需要帮助 - 限制对 sftp 用户的访问,以便其他用户主页->子文件夹

需要帮助 - 限制对 sftp 用户的访问,以便其他用户主页->子文件夹

我已经找到很多帮助,将用户限制在他们自己的主文件夹中并将他们仅限于 sftp,但我正在研究更高级的解决方案。

我正在尝试做但找不到任何文档,我想限制用户的 sftp 访问权限,但允许他们访问另一个用户主文件夹内的站点文件夹。

两个用户 - u1 和 u2 两个主文件夹 - /home/u1 & /home/u2 u1 在子文件夹中有一个网站 - /home/u1/public_html/site1/ 我想将 u2 限制在用户 u1 的上述 site1 文件夹中。需要一些帮助才能做到这一点。

注意: - 我无法使用像 vsftpd 这样的工具,因为我已经将系统锁定得很好了。 - 用户 u1 的 site1 文件夹的 chown 是 u1:www-data,如果可能的话,我希望能够保持这种状态。我读到,为了 chroot,文件夹必须由 root:root 拥有,但我认为这会在 Web 服务器端搞砸一切。 - 如果我需要使用 vsftpd,我只需要帮助了解如何同时保持系统安全。

在此先感谢您的帮助。

更新1:

添加了用户 u2

设置私钥

将 /home/u2 所有权更改为 root:root

修改了 /etc/ssh/sshd_config 文件:

#Subsystem sftp /usr/lib/openssh/sftp-server 
Subsystem sftp internal-sftp -u 0002
Match User u2
        ChrootDirectory /home/u2
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand internal-sftp

将 u2 添加到 www-data 组

添加文件夹 /home/u2/site1

使用此命令绑定了我需要 u2 访问的 u1 文件夹:

sudo mount --bind /home/u1/public_html/site1/public /home/u2/site1

更改 /home/u2/site1 中所有文件/文件夹的所有权限,以包含组的写权限:

chmod -R 775 /home/u2/site1

使所有未来的文件/文件夹属于www-data:

chmod g+s /home/u2/site1/

切换到两个用户并使新文件/文件夹具有组写权限:

umask 002

进入 u2 /home/u2/.bashrc 和 /home/u2/.profile 并在每个文件末尾添加 umask 002

一切正常 - u2 无法通过 ssh 进入,但可以通过 sftp 进入,并且只能看到 /home/u2 及以上。但是,我仍然无法让任何新文件/文件夹自动具有组写入权限。任何帮助都很好。谢谢。

更新2:

好的,做了几个测试。结果很奇怪:

使用 u2 通过 sftp 创建了一个名为 test 的文件夹,它具有权限 rwxr-sr-x(755 对吗?)并且能够以 u1 的身份进行 sftp 访问,能够进入该文件夹但不能上传文件,但能够删除该文件夹。

作为 u1,我能够上传文件,并且它的权限变为 rw-rw-r-- (664),就像我们一直尝试做的那样。此外,作为 u1,我创建了一个名为 test2 的文件夹,它授予了 rwxrwsr-x(775) 的权限,这也是我们想要的。

作为 u2,我可以通过 sftp 进入文件夹 2 并上传文件,但权限仍然是 rw-r--r-- (644),但可以使用 u1 sftp 将其删除。

我认为 jail 出了问题,或者 u2 帐户不允许某项服务运行,或者导致正确的 umask 生效。您怎么看?

更新3

好的,尝试了一下,成功了。确实很困惑!希望有人能解释一下为什么成功了。

在 /etc/ssh/sshd_config 文件中,我注释掉了 ForceCommand internal-sftp 行,然后重新启动了 ssh,一切正常。很高兴,但也很困惑。谢谢。

Match User u2
        ChrootDirectory /home/u2
        X11Forwarding no
        AllowTcpForwarding no
        #ForceCommand internal-sftp

答案1

如果用户 u2 只需要通过 SFTP 访问/home/u1/public_html/site1,而不允许以任何其他方式访问系统:您可以将该目录作为主目录提供给他,并遵循正常的 chroot 程序。


或者 :

Linuxbind挂载允许您将现有文件系统的一部分映射到目录树中的第二个位置。绑定挂载不会更改底层文件系统权限。

mkdir /home/u2/site1
mount -t bind  /home/u1/public_html/site1 /home/u2/site1

用户 u2 仍然可以被 chrooted,并且如果文件系统权限允许他在 /home/u1/public_html/site1 中写入,那么他现在可以从他的 chroot 中访问 /home/u2/site1 上的该位置。

相关内容