Ubuntu 10.04.4 LTS
我正在尝试 chroot 用户“sam”。根据所有文章的说法,这应该可行,但显然我还是做错了什么。
用户:
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 邮件列表,所以我决定重置整个服务器(幸运的是,这是一个可行的选择)。它现在可以正常工作了。
答案1
您的设置看起来确实不错,让我们看看是否可以找出问题所在。
检查你的 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]
在本地测试 SFTP。
在 Ubuntu 计算机上的终端中输入:
sftp sam@localhost
看看您是否可以登录(当系统询问时,您必须输入 sam 的密码)。如果可以登录,则 Cyberduck 的配置可能有问题。
如果您无法登录,请尝试不带 chroot 的 SFTP。
无需 chroot 在本地测试 SFTP。
前缀:
Match group users ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
将
#
其注释掉,重新启动 sshd (sudo service ssh restart
),然后输入:sftp sam@localhost
询问时输入密码,看看是否可以登录。如果可以登录,请按如下方式排除 chroot 配置故障:使用命令重试步骤 2,
sftp -vvv sam@localhost
以获得详细输出。您还可以通过添加并重新启动来提高的日志sshd
级别。希望您在控制台或 中看到一些明显的信息。LogLevel VERBOSE
/etc/ssh/sshd_config
sshd
/var/log/auth.log
如果您无法登录,请尝试 SSH。
在本地测试 SSH。
SFTP 需要有效的 SSH,因此将 sam 的 shell 更改为 /bin/bash:
sudo usermod -s /bin/bash sam
然后尝试:
ssh sam@localhost
当系统询问时,输入 sam 的密码。如果您可以登录,请尝试增加详细程度(如 3) 中所述)以找出问题所在(和
sftp -vvv sam@localhost
)。另一种可能性是 shell 初始化混淆了 sftp 客户端(LogLevel VERBOSE
/etc/ssh/sshd_config
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
在 中/etc/ssh/sshd_config
),重新启动sshd
并仔细阅读/var/log/auth.log
,答案可能就在那里。
答案2
Centos 7 - 我遇到了同样的问题 - 我尝试了一切方法来诊断它 - 最终我更改了'/etc/ssh/sshd_conf'中的 sftp 子系统,重新启动了 sshd ( service sshd restart
) 并且问题得到了解决:
从 :
#Subsystem sftp /usr/libexec/openssh/sftp-server
到 :
Subsystem sftp internal-sftp
我不知道为什么提供了两种实现
答案3
我遇到了同样的问题,通过将 chroot-dir 设置为所有者根和组根来解决。
chown root:root chroot-dir
答案4
对于“连接被拒绝”错误,请检查 sshd_config 中的“UsePAM yes”设置。它必须在“Subsystem sftp”之前
对于身份验证问题,请检查 chroot-path 中的每个目录是否由 root 拥有且具有 755 或更低的权限。
例如:ChrootDirectory /var/www/data
您必须检查以下权限和所有者:/var、/var/www、/var/www/data
- 对于诸如“身份验证后关闭连接”之类的奇怪问题,请尝试更新或更改 SFTP 服务器。
apt-get 安装 openssh 服务器
“子系统 sftp internal-sftp”<->“子系统 sftp /usr/lib/openssh/sftp-server”(从出现问题的类型切换到另一个)