我正在尝试允许用户“user”通过 sftp 或 ssh 访问我的服务器。我想用 chroot 将他们关进一个目录中。我读了说明这里但是它不起作用。我做了以下事情:
- 用户添加用户
修改 /etc/ssh/sshd_config 并添加
Match User user
ForceCommand internal-sftp
ChrootDirectory /home/duke/aa/smart
到文件底部将子系统线路更改为
Subsystem sftp internal-sftp
重新启动 sshd
/etc/init.d/ssh restart
使用 PuTTY 以用户“user”身份通过 ssh 登录
Putty 显示“服务器意外关闭了连接”。
为什么会出现这种情况?如何解决?
编辑
根据以下建议,我把 sshd_config 的底部修改如下:
Match User user
ChrootDirectory /tmp
还没有变化。我确实输入了密码,但我无法通过 ssh 或 sftp 连接。怎么回事?
答案1
您设置为 chroot 的目录必须由 root 拥有并具有 755 权限。
这是我用于设置的内容
Match user sftpuser
ChrootDirectory /home/sftpuser
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
在家
drwxr-xr-x 5 root users 4096 Jan 29 10:31 sftpuser
在/home/sftpuser
drwx------ 2 sftpuser users 4096 Jan 29 10:52 sftpuser
这将他们 chroot 到 /home/sftpuser 目录,但由于他们没有权限写入该目录,因此我为他们创建了第二个 sftpuser 目录以供写入。
答案2
我认为问题出在ChrootDirectory /home/duke/aa/smart
。问题与权限有关。我认为您尝试登录到框的用户没有可执行权限。您可以尝试将其更改为某个目录,例如/tmp
每个用户都有完全权限的目录。
答案3
检查 /var/log/auth.log 中是否存在 ssh 错误。
这可能是权限错误。chroot 目录必须由根。
仅供参考,我的工作配置如下所示(我更喜欢使用组访问而不是用户访问):
Subsystem sftp internal-sftp
AllowGroups sshusers sftponly
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
答案4
SSHD 对 chroot 权限非常严格;我找到了一个适合我的解决方案这里. 本质上,ChrootDirectory及其所有父目录需要由 root 拥有并具有 755 权限。您可以使用命令获取权限namei -l /path/to/chrootdirectory
。在我的情况下,/tmp
具有 777 权限,因此尝试连接时出现client_loop: send disconnect: Broken pipe
错误。我将 chroot 移动到/opt/chrootjail
并开始工作。