我需要允许不受信任的用户通过 SFTP 访问其 Web 服务器根目录下的特定目录。我不希望他访问系统的任何其他部分(包括 Web 的其余部分),因此我考虑使用 OpenSSH 的ChrootDirective
。本质上类似于描述的方法这里。
但是,似乎没有办法做到这一点,同时允许 Web 服务器(或 git deploy 脚本)写入该目录,因为一旦我这样做,就会出现错误fatal: bad ownership or modes for chroot directory component "/srv/www/"
。
我曾经考虑过在其他地方创建目录并mount --bind
对其进行管理,但限制似乎仅适用于 chrooted 目录,而不仅适用于它的父目录,所以我再次遇到同样的问题。
我知道这是安全问题,但这并不重要,因为:
- 其他用户是受信任的(嗯,相对而言,他们无论如何也不能添加 suid 文件)
- 不受信任的用户只有 SFTP 访问权限,没有 SSH 访问权限,因此他们无论如何都无法运行任何东西
那么,我忽略了什么吗?有什么明智的方法可以摆脱这种困境吗?(最好不要移动到 FTP 或在 2 个目录之间设置 incron/rsync。)
答案1
您可以将用户的主目录设置为他的 chroot 文件夹,如您链接的教程中所述。然后挂载/srv/www/
到用户主目录的子目录中:
mkdir /home/jdoe/srv-www
mount --bind /srv/www /home/jdoe/srv-www
连接 sftp 后,他必须进入子目录才能访问 的内容/srv/www/
。如果您愿意,可以锁定用户主目录及其中其他文件的权限。