Webdav

與 WebDAV 連結的最佳實踐,因為 FollowSymLinks 不允許顯示符號連結

  • September 8, 2020

符號連結是 linux 上的一種普遍做法,它可以使資源(例如目錄)在另一個位置可用,而無需維護它的多個副本。這在許多應用程序中實現,例如具有資源樹和帶有使用者目錄的樹:每當使用者打算使用某個資源時,都會將符號連結放置到他或她有權訪問的目錄中。給定足夠的權限,他或她可以使用資源(在其中創建文件),這些資源可以物理地寫入不同的位置,例如在具有足夠空間的設備上。如果使用者使用 Samba 訪問他的主目錄,這可以正常工作。

但是,使用 WebDAV 是有充分理由的,埠問題就是其中之一。將此類應用程序移植到 WebDAV 時的問題:Apache 的 mod_dav 以不暴露符號連結的方式編寫,無論是否設置了 FollowSymLinks。這種行為是社區有意的,因此從未處理過錯誤報告。

但是,如何將所需的行為移植到 WebDAV?我嘗試改用硬連結,但硬連結目錄似乎根本不起作用。使用mount可能有效,但我無法估計數百個坐騎的副作用。有沒有我現在沒有過來的選項?是否有已知的“最佳實踐”?還是 WebDAV 根本不適合作為 Samba 的替代品?

這似乎mount --bind是我正在尋找的解決方案。有理由支持和反對使用ln -s vs mount –bind,但在 linux 系統上多次掛載設備似乎是一種常見的做法(甚至鼓勵將單個文件掛載到其他文件上man mount),而且似乎系統穩定性沒有受到嚴重影響。

當然,唯一的缺點是,如果掛載點沒有通過修改來修復/etc/fstab,它們會在伺服器重啟時失去。

對 WebDAV 再說一句話:有一個網際網路草案(已經過期)來擴展 WebDAV 規範,以允許“高級集合”,它也應該提供處理連結的能力。大約在 1998 年到 2002 年,人們在這個問題上花費了精力,然後這個話題就悄然消失了。您可能會在 Internet 上找到幾個頁面聲稱WebDav 通過高級集合支持符號連結,但目前情況並非如此。目前(v.1.0.3-1.3.6)mod_dav原始碼如下:

/* ### for now, only process regular files (e.g. skip symlinks) */
if (S_ISREG(fsctx->info1.finfo.st_mode)) {

有人可能認為Tomcat 6 的 WebDAV 模組可能不知道符號連結(因為,afaik,在版本 7 之前沒有將這種文件系統特殊內容的意識合併到 Java 模型中),但它表現出相同的行為,因此符合規範,也是。

最後,mod_dav-1.0.3-1.3.6 的符號連結更新檔已經發布,但是您必須將更新檔應用到原始碼並自己編譯模組……我沒有嘗試過。

引用自:https://serverfault.com/questions/453807