Sftp

chroot 後使用者無法進行 SFTP

  • May 22, 2021

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

Cyber​​duck 說Unexpected end of sftp stream.和其他客戶給出了類似的錯誤。

我忘記了什麼/出了什麼問題?

謝謝!


編輯

即使在聯繫了 OpenSSH 郵件列表之後,我也無法讓它工作,所以我決定重置我的整個伺服器(幸運的是,這是一個可行的選擇)。它現在正在工作。

您的設置肯定看起來不錯,讓我們看看我們是否能找出問題所在。

  1. 檢查您的 openSSH 版本是否支持ChrootDirectory

ChrootDirectoryopenSSH 版本 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 的密碼)。如果它有效,Cyber​​duck 的配置可能存在問題。

如果您無法登錄,請嘗試不使用 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@localhostLogLevel 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 VERBOSEin /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

我不知道為什麼提供了兩個實現

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