工作溶液

工作溶液

我刚刚在我的服务器上创建了一个新用户friend,目标是为我的一个朋友提供 SFTP 访问权限,以便他可以在那里托管他的网站。

我注意到,当用户通过 SFTP 连接服务器时friend,默认文件夹是/home/friend/,但您可以轻松退出/home/friend/ 并访问服务器上所有处于读访问权限的文件, 例如/home/anotheruser/website2/config.php!我不想要这个。

我被告知要将此用户置于“监禁/隔离模式”,因此,在我的默认设置结束时sshd_config

...
Subsystem sftp /usr/lib/openssh/sftp-server

...我添加了这个:

Match User friend
ChrootDirectory /home/friend
ForceCommand internal-sftp

并做到了service sshd restart

然后我根本无法再通过 SFTP 使用用户连接服务器friend,哎呀!我也尝试过替换Subsystem ...Subsystem sftp internal-sftp,但结果是一样的:friend无法再通过SFTP连接服务器。

问题:

如何通过SFTP/SSH隔离用户friend,使其无法走出家门?/home/friend/


注:我已经读过如何使用 chroot Jail 将 SFTP 用户限制到主目录,如何将仅限 sftp 的 SSH 用户 chroot 到他们的家中? , ETC。

答案1

不确定您使用的是什么操作系统,但当我必须配置被监禁的 SFTP 用户时,我会使用下面的链接。这是一个关于如何配置被监禁的 SFTP 用户的非常好的教程。

https://access.redhat.com/solutions/2399571

然后,我会将任何一个目录挂载到您想让您的朋友访问的 chroot 目录。

答案2

工作溶液

这是受到教程的启发如何使用 ssh 密钥配置具有受限 chroot 用户的 sftp 服务器 @HeysusEscobar 的回答中提到。

从以下位置执行此操作root

useradd friend   # NB: this doesn't create a home dir, see https://askubuntu.com/q/374870
passwd friend    # set the password 
groupadd sftpusers
mkdir /sftp
mkdir /sftp/friend        # this is where he'll be chrooted
mkdir /sftp/friend/home   # his home directory
mkdir /sftp/friend/www    # for websites
usermod -aG sftpusers friend   # aG for append group
chown friend:sftpusers /sftp/friend/home/
chown friend:sftpusers /sftp/friend/www/
usermod -d /sftp/friend/home friend   # set as his home directory

将其添加到/etc/ssh/sshd_config

# Subsystem sftp /usr/lib/openssh/sftp-server   # you'll probably need to comment this line
Subsystem sftp internal-sftp -d /home
Match Group sftpusers
ChrootDirectory /sftp/%u

并做service sshd restart。就这样!

注意:

  • 其他用户仍然可以ssh,所以它没有为其他用户修改任何内容
  • 用户friend不能ssh
  • 用户friend可以通过以下方式连接sftp

PS:如果你想让friend的网站可以访问互联网,你可以将其添加到 Apache 配置中:

<VirtualHost *:80>
  ServerName friend.example.com
  DocumentRoot /sftp/friend/www
  php_admin_value "open_basedir" "/sftp/friend"
  <Directory />
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

站点注释:即使执行了open_basedir上述操作,仍然无法friend使用 PHP 退出 chroot 环境或运行影响整个文件系统的恶意代码吗?链接问题:chroot/隔离的 SFTP 用户仍然可以使用 PHP 访问整个文件系统


旧的(仅半工作)解决方案

根据文档,ChrootDirectory /home/friend用help替换:ChrootDirectory /home

ChrootDirectory:指定身份验证后 chroot(2) 的目录的路径名。路径名的所有组成部分都必须为 root 所有任何其他用户或组都不可写入的目录。

这样,用户friend就可以再次连接SFTP了;不能出去/home/;但仍然可以访问/home/anotheruser/...,这是不需要的!

答案3

您可以保留对 .sshd_config 文件的修改,并用于chmod -R 700 /home/anotheruser限制其他任何人(包括friend.你可以修改chmod值如果这太严格了,但这就是我个人在我的问题中寻找的这里。 (很抱歉将此作为另一个答案发布,我没有足够的声誉将此作为评论添加到您的答案中)

相关内容