如何使用 sshd 在不属于 root 的目录中进行 chroot?

如何使用 sshd 在不属于 root 的目录中进行 chroot?

我跟着,将用户限制在一个确定的目录中,它工作得很好,但我需要将用户 chroot 到一个目录中

/dir1/dir2/dir3/dir4

假设 dir1 由 root 拥有,dir2 由 www-data 拥有,dir3 由 www-data 拥有,dir4 由 root 拥有,并且我无法改变这种状态,也不能使用其他软件来实现我的目的。

sshd chrooting 对 dir1 有效,但对 dir4 无效,即使它归 root 所有,对 dir2 和 dir3 可能也不行。

我该如何处理这个问题?

答案1

抱歉,解决方案在页面的最后一段,名为“对 chroot 目录的写访问权限”

引用:“如上所述,如果用户能够写入 chroot 目录,那么他们就有可能将其权限提升为 root 并逃离 chroot。解决此问题的一种方法是向用户提供两个主目录 - 一个他们可以写入的“真实”主目录,以及一个锁定的 SFTP 主目录,以确保 sshd 正常运行并保护您的系统安全。通过使用 mount --bind,您可以使真实主目录显示为 SFTP 主目录中的子目录,从而允许他们完全访问其真实主目录。这也可以用于实现其他目标。例如,可以根据 sshd chroot 规则锁定用户的主目录,并使用绑定挂载为用户提供对其他目录的访问权限:

  # 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

现在用户可以使用 SFTP 登录,他们被 chroot 到 /home/user,但他们会看到一个名为“web”的文件夹,他们可以访问该文件夹来操作网站上的文件(假设他们在 /srv/web/example.com 中拥有正确的权限。”

相关内容