如何让 sftp 只访问子目录而不访问父目录

如何让 sftp 只访问子目录而不访问父目录

我想向用户授予tom目录的SFTP 访问权限/var/www/html/my_project/。虽然我不想授予对目录的任何 SFTP 访问权限/var/www/html/

目前由 apache 用户拥有/var/www/html/my_project//var/www/html/我只需要授予 /var/www/html/my_project/用户 tom 和 apache 目录的访问权限。

一旦获得访问权限,tom 就可以访问 /var/www/html/my_project/ 下的所有目录。

请帮助我,我已经挣扎了很长时间了。

答案1

/etc/ssh/sshd_config我在我的文件中使用类似以下内容:

Match User tom
ChrootDirectory /var/www/html/my_project/
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp

然后,确保 Tom 有权访问该目录。这可能很棘手,因为tom对于目标目录之上的所有目录至少需要“x”(执行)权限。在大多数 Linux/Unix 版本中,/var/www/html/ 通常可供每个人访问。

我可能会将my_project目录设为 所拥有tom,并让 Tom 位于 apache 组中。如果 apache 作为 apache:apache (user:group) 运行,则以下内容应该适用:

http://www.cyberciti.biz/faq/howto-linux-add-user-to-group/

# usermod -a -G apache tom

使整个my_project目录由 usertom和 group拥有apache

# chown -R tom:apache /var/www/html/my_project/

使整个my_project目录对组完全可写tom,并且对组可读/可执行apache

# chmod -R 750 /var/www/html/my_project/

注意:创建的任何文件tom都将归 tom 的用户及其默认组所有。上面的示例添加tom到组中apache,但没有使其成为apache默认组。这意味着 apache 服务器将无法访问新文件。要解决这个问题,请设置apachebetom的默认 group by useradd -g apache tom

答案2

您可以通过/var/www/html/my_project/正确配置 SFTP 服务器来 chroot 用户 tom。来自 apache 的访问将被允许,并且 Tom 无法进入其 chroot 目录。

为了给您提供更多帮助,您需要说明您正在使用的 SFTP 服务器。

相关内容