chroot 後使用者無法進行 SFTP
Ubuntu 10.04.4 LTS
我正在嘗試對使用者 ‘sam’ 進行 chroot。根據那裡的所有文章,這應該可行,但顯然我仍然做錯了什麼。
使用者:
sam:x:1005:1006::/home/sam:/bin/false
我改變了 /etc/ssh/sshd_config 像這樣(在文件的底部):
#Subsystem sftp /usr/lib/openssh/sftp-server # CHROOT JAIL Subsystem sftp internal-sftp Match group users ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
我將 sam 添加到使用者組:
$groups sam sam : sam users
我更改了 sam 的主文件夾的權限:
$ ls -la /home/sam drwxr-xr-x 11 root root 4096 Sep 23 16:12 . drwxr-xr-x 8 root root 4096 Sep 22 16:29 .. drwxr-xr-x 2 sam users 4096 Sep 23 16:10 awstats drwxr-xr-x 3 sam users 4096 Sep 23 16:10 etc ... drwxr-xr-x 2 sam users 4096 Sep 23 16:10 homes drwxr-x--- 3 sam users 4096 Sep 23 16:10 public_html
我重新啟動了 ssh,現在 sam 無法使用 SFTP 登錄。會話被創建,但也立即關閉:
Sep 24 12:55:15 ... sshd[9917]: Accepted password for sam from ... Sep 24 12:55:15 ... sshd[9917]: pam_unix(sshd:session): session opened for user sam by (uid=0) Sep 24 12:55:16 ... sshd[9928]: subsystem request for sftp Sep 24 12:55:17 ... sshd[9917]: pam_unix(sshd:session): session closed for user sam
Cyberduck 說
Unexpected end of sftp stream.
和其他客戶給出了類似的錯誤。我忘記了什麼/出了什麼問題?
謝謝!
編輯
即使在聯繫了 OpenSSH 郵件列表之後,我也無法讓它工作,所以我決定重置我的整個伺服器(幸運的是,這是一個可行的選擇)。它現在正在工作。
您的設置肯定看起來不錯,讓我們看看我們是否能找出問題所在。
- 檢查您的 openSSH 版本是否支持
ChrootDirectory
:
ChrootDirectory
openSSH 版本 4.8p1 ( http://www.debian-administration.org/articles/590 ) 添加了對關鍵字的支持。檢查是否至少安裝了該版本:dpkg --list openssh-server
[這可能不是原因,根據http://releases.ubuntu.com/lucid/ubuntu-10.04.4-server-amd64.list openssh-server的版本是5.3p1] 2. 在本地測試 SFTP。
在 Ubuntu 電腦上輸入終端:
sftp sam@localhost
並查看您是否可以登錄(當被詢問時您必須輸入 sam 的密碼)。如果它有效,Cyberduck 的配置可能存在問題。
如果您無法登錄,請嘗試不使用 chroot 的 SFTP。 3. 在沒有 chroot 的情況下在本地測試 SFTP。
前綴這個:
Match group users ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
用
#
註釋掉它,重新啟動 sshd (sudo service ssh restart
) 然後輸入:sftp sam@localhost
詢問時鍵入密碼,看看您是否可以登錄。如果您可以登錄,請按如下方式對 chroot 配置進行故障排除:使用
sftp -vvv sam@localhost
詳細輸出命令再次嘗試第 2 步。您還可以通過添加和重新啟動來提高sshd
日誌級別。希望您在控制台或.LogLevel VERBOSE``/etc/ssh/sshd_config``sshd``/var/log/auth.log
如果無法登錄,請嘗試 SSH。 4. 在本地測試 SSH。
SFTP 需要一個正常工作的 SSH,因此將 sam 的 shell 更改為 /bin/bash:
sudo usermod -s /bin/bash sam
並嘗試:
ssh sam@localhost
詢問時輸入 sam 的密碼。如果您可以登錄,請嘗試按照 3) 中的說明增加詳細程度以找出問題所在(
sftp -vvv sam@localhost
和LogLevel VERBOSE
中/etc/ssh/sshd_config
)。另一種可能是 shell 初始化混淆了 sftp 客戶端(http://www.openssh.org/faq.html#2.9):2.9 - sftp/scp 連接失敗,但 ssh 沒問題。
如果您有為非互動式會話生成輸出的 shell 初始化(.profile、.bashrc、.cshrc 等),則 sftp 和/或 scp 可能會在連接時失敗。此輸出使 sftp/scp 客戶端感到困惑。您可以通過執行以下命令來驗證您的 shell 是否正在執行此操作:
ssh yourhost /usr/bin/true
如果上面的命令產生任何輸出,那麼你需要修改你的 shell 初始化。
如果您無法登錄,請嘗試
ssh root@localhost
. 如果不起作用sshd
,則伺服器上有問題。增加詳細程度(LogLevel VERBOSE
in/etc/ssh/sshd_config
),重新啟動sshd
並仔細閱讀/var/log/auth.log
,答案可能就在那裡。
Centos 7 - 我遇到了同樣的問題 - 我在陽光下嘗試了一切來診斷它 - 最終我更改了 ‘/etc/ssh/sshd_conf’ 中的 sftp 子系統,重新啟動 sshd (
service sshd restart
) 並解決了問題:從 :
#Subsystem sftp /usr/libexec/openssh/sftp-server
到 :
Subsystem sftp internal-sftp
我不知道為什麼提供了兩個實現