我们最近发现了一种解决方法,如下所示:
/ etc / ssh / sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
目录权限:
root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*
现在/home
满足了ChrootDirectory
受限用户的要求,并且不能被受限用户列出,但是sftponly
如果用户的主目录照常设置(/home/$LOGNAME
),则用户将无法登录:在chroot环境下,其主目录不在内部,/home
而在其正下方根(/
)。
解决方法1
将受限用户的房屋设置为它们在chroot下的显示方式:
root@server:~ # usermod -d /username username
洞穴1
如果任何不受限制的用户或某些管理脚本都使用了bash的波浪号扩展,就像~username
它将扩展到/username
现在一样,那不是什么意思。
创建sftponly
用户的管理员还必须记住使用非默认主目录。用脚本可以解决。管理员必须记住要使用的内容。
解决方法2
这是我们最终使用的上一个替代方案:
root@server:~ # ln -s . /home/home
那就是在/home
它自己的目录名内创建一个符号链接。现在,在chroot下/home/username
指向的目录与没有chroot的目录相同。对于使用sftp登录的受限用户,它将显示为/username
。该目录对其所有者(受限用户)可写。受限用户无法按名称列出其任何兄弟姐妹的父目录或主目录。
关于sftponly
用户的唯一特别之处在于其对sftponly
组的参与。我们发现比解决方法1更容易处理。
告诫2
- 您不能将用户名为“ home”的主目录
/home/home
- 您必须小心遍历
/home
层次结构并遵循符号链接的脚本。
chroot
用户拥有自己的版ChrootDirectory
?他们可以访问吗?