我刚刚设置了我的 SFTP 服务器,当我从我的第一个用户帐户使用它时,它工作正常。我想添加一个我们称之为“magnarp”的用户。起初我在 sshd_config 中这样做:
Subsystem sftp internal-sftp
Match group sftponly
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
一切运行良好,用户 magnarp 进入了他的主目录。然后我尝试向其添加一个符号链接。
home$ sudo ln -s /home/DUMP/High\ Defenition/ /home/magnarp/"High Defenition"
符号链接通过 SSH 可以正常工作,但通过 SFTP 则不行。
所以我现在想要做的是将 sftponly 组 Chroot 到 /home/DUMP 并且我这样做:
Match group sftponly
ChrootDirectory /home/DUMP
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
DUMP文件夹具有以下权限。
drwxrwxrwx 5 root root 4096 aug 18 02:25 DUMP
错误代码如下:
Aug 18 16:40:29 nixon-01 sshd[7346]: Connection from 192.168.1.198 port 51354
Aug 18 16:40:30 nixon-01 sshd[7346]: Accepted password for magnarp from 192.168.1.198 port 51354 ssh2
Aug 18 16:40:30 nixon-01 sshd[7346]: pam_unix(sshd:session): session opened for user magnarp by (uid=0)
Aug 18 16:40:30 nixon-01 sshd[7346]: User child is on pid 7467
Aug 18 16:40:30 nixon-01 sshd[7467]: fatal: bad ownership or modes for chroot directory "/home/DUMP"
Aug 18 16:40:30 nixon-01 sshd[7346]: pam_unix(sshd:session): session closed for user magnarp
答案1
sshd
在 chroot 目录方面有一定程度的偏执。我不认为可以禁用此功能(即使使用StrictModes no
)。chroot 目录和所有父目录必须正确设置:
- chroot 目录及其所有父目录不得具有组或世界写入功能(即
chmod 755
) - chroot 目录及其所有父目录必须由 root 拥有。
在你的情况下,登录错误可以通过以下方法修复:chmod 755 /home/DUMP
你显然想要有一个世界可写的目录,sftpuser 可以登录,每个人都可以把文件放进去,可以通过把该目录设为/home/DUMP/
答案2
A) 如果创建 simlink 有助于逃避 chroot,那么创建 chroot 有什么意义呢?(任何用户都可以上传 simlink,然后访问整个文件系统)
B) 再一次 chmod 777 你将受到 theo 的攻击(http://rlv.zcache.com/i_got_flamed_by_theo_de_raadt_t_shirt_tshirt-p235453348828729121en7rf_210.jpg)。 看http://lists.mindrot.org/pipermail/openssh-unix-dev/2010-January/028151.html了解为什么 openssh 对 chroot 目录权限如此挑剔。