
我已經遵循了六個不同的教學來為 sftp 使用者設定 chroot,但我被監禁的使用者仍然可以瀏覽到父目錄。我懷疑我的權限設定不正確,因為這是教學之間變化最大的部分。這是我到目前為止所做的:
1)我使用的是CentOS 5.6,預設的OpenSSH是4.3版本,所以我手動安裝了最新的5.x版本。運行 sshd -v 現在返回 OpenSSH_5.9p1、OpenSSL 0.9.8e-fips-rhel5。
2)我編輯/etc/ssh/sshd_config將子系統sftp更改為internal-sftp,並新增:
Match user guest
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
3)重新啟動sshd。
4)建立一個使用者“guest”,主目錄為/var/www/uploads/guest。
5) /var/www/uploads 歸 root:root 所有,模式為 755。
6) /var/www/uploads/guest 由 guest:root 擁有,模式為 755。
我使用 Mac 上的 Transmit sftp 用戶端以訪客使用者身分登入。預設情況下,它會開啟使用者的主目錄,但我可以向上導航目錄層級並瀏覽伺服器上的其他目錄。
有些教學說 /var/www/uploads 應該有模式 700 或 750;如果我這樣做,我仍然可以以來賓用戶身份登錄,但預設情況下我會看到伺服器根目錄,並且可以瀏覽所有其他目錄。
其他教程說我應該將來賓用戶的 shell 更改為 /bin/false;如果我這樣做,我根本無法以訪客使用者登入。輸入密碼後,傳輸顯示“伺服器不接受使用者名稱或密碼”,命令列 sftp 用戶端顯示“連線已關閉”。
我想我已經嘗試了一切 - 有人能看到缺少什麼嗎?
答案1
看起來 ChrootDirectory 應該指向主目錄之上的一級。
所以既然客人的家是/var/www/uploads/guest,那麼Chroot目錄應該指向/var/www/上傳
這可能是…我又想到了另一個想法:
您手動安裝了較新的 openssh,是否刪除了舊版本?新版本安裝在哪裡? 有時,如果你不小心,新的東西就會被安裝到/usr/本地/代替/usr,這意味著啟用 sftp 的伺服器正在從中讀取其設定文件/usr/local/etc/ssh/...而不是預期的/etc/ssh/...
至少要檢查一些東西。
答案2
我一直在努力解決完全相同的問題,但透過設定 chrooted 目錄解決了它以及所有父目錄具有以下權限
1)將所有者更改為root:
sudo chown root [directory]
2)刪除所有群組寫權限:
sudo chmod 755 [directory]
遺憾的是,我認為這意味著您不能直接跳到不屬於 root 的資料夾,但很高興聽到是否有人可以糾正我!