
當為特定目的設定 FTP 帳戶時(例如,作為共享資料檔案的落點),只允許使用者存取特定目錄,而不提供更廣泛的檔案系統的視圖似乎是明智的。
特別是在 *nix 系統上,每個使用者通常都具有對許多系統檔案(例如/etc/passwd
. FTP 守護程式通常允許您透過執行登入時隱藏這些內容chroot
,以便使用者處於虛擬「監獄」中。
但chroot
不是作為安全措施而設計的[網站似乎已關閉,存檔副本],甚至可能引入其自身的安全問題;因此,vsftpd限制此功能這樣您只能chroot
進入唯讀目錄,然後使用者必須導航到子目錄才能執行任何寫入操作。FTPD協定警告該問題但沒有提供替代方案,並且 PureFTPD 需要創建各種特殊文件才能使用chroot
.
在我看來,FTP 存取根本沒有映射到作業系統檔案系統存取概念的根本原因。與 HTTP 守護程序一樣,FTP 守護程序可以根據一組配置規則「重寫」所有請求。如果您向 Apache Web 主機詢問路徑/
,它會將其對應到目錄中定義的目錄DocumentRoot
,而不是主機作業系統的目前/
目錄。
我的問題是,是否有任何 *nix FTP 守護程式使用這樣的「重寫」機制(或限制存取的其他方式),如果沒有,是否有根本原因?
注意:有一些重疊這個現有的問題,但答案主要討論是否使用chroot
,而非完整的替代方案。
答案1
http://www.ietf.org/rfc/rfc959.txt
我假設規範沒有說“目的地”或伺服器端必須指向特定類型的檔案系統。如果不深入了解這一點,我懷疑任何人都可以編寫一個守護程序,以任何合理的方式監禁用戶,並且仍然可行。
或者,像 selinux 這樣的東西可能能夠將 ftp 使用者限製到某些目錄,而不需要更改 ftp 守護程序。