我有一个SFTP服务器设置,每当用户试图通过SFTP连接,他们看到目录/ home / user,但他们也可以改变目录到/ home甚至/
我该如何阻止他们只能看到当前的用户主目录?
我有这个在我的sshd_config里面
Subsystem sftp internal-sftp Match group ftpaccess ChrootDirectory /home/sony X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
从https://wiki.archlinux.org/index.php/SFTP_chroot ,重点是我的:
写访问chroot目录
… 如果用户能够写入到chroot目录,那么他们有可能将他们的权限升级到root并退出chroot。 解决这个问题的一个办法是给用户两个主目录 – 一个是他们可以写入的“真正”的主目录 ,另外一个SFTP主目录被locking,以保持sshd的快乐和系统的安全。 通过使用mount –bind,可以使真正的主目录作为SFTP主目录内的一个子目录显示,从而允许他们完全访问其真正的主目录。
这也可以用来实现其他目标。 例如,可以按照sshd chroot规则locking用户的主目录,并绑定用于为用户提供对其他目录的访问权限的挂载:
# mkdir /home/user/web # mount --bind /srv/web/example.com /home/user/web
可选添加一个条目到/ etc / fstab:
# echo '/srv/web/example.com/ /home/user/web none bind' >> /etc/fstab
现在,用户可以使用SFTPlogin,他们被chrooted到/ home / user,但他们看到一个名为“web”的文件夹,他们可以访问操纵网站上的文件(假设他们在/ srv / web / example中拥有正确的权限.COM。
正如在sshd_config手册页中所指定的那样:
ChrootDirectory
指定要validation后chroot(2)的目录的path名。 在会话启动时,sshd(8)会检查path名的所有组件是否为任何其他用户或组所不能写入的根拥有的目录。 在chroot之后,sshd(8)将工作目录更改为用户的主目录。
path名可以包含以下在连接用户被authentication后在运行时展开的标记:%%被字面值'%'replace,%h被replace为被authentication的用户的主目录,%u被replace由该用户的用户名。
因此,定义chrootpath/home/%u或%h可能是您正在查找的内容。
请特别注意sftp用户home root dir(即/home/exampleuser1 , /home/exampleuser2等)为root用户所有的要求。 对sftp用户的写入权限只能在子目录中给出。 这个要求在这里被仔细研究。