仅具有特定文件夹访问权限的 SFTP 用户 - 拒绝创建文件的权限

仅具有特定文件夹访问权限的 SFTP 用户 - 拒绝创建文件的权限

因此,我尝试创建一个只能访问我public_html文件夹内特定文件夹的用户。我已成功创建用户,并且可以登录。一开始,我在登录时遇到了一些麻烦,因为文件夹必须由 root 拥有,然后 sftp 用户才能进行 sftp。

因此我遵循了以下指南:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component- 指示我将文件夹的所有权更改为根用户。

完成此操作后,我可以成功登录,但是,登录后,我无法添加文件或在此文件夹内执行任何操作,因为它归 root 所有。

我尝试创建一个组,并将 root 用户和 sftp 用户添加为该组的成员,但这也不起作用。

我的解决方法是使用 root 用户在 sftp 文件夹内创建另一个目录,然后将所有权更改为 sftp 用户,但这对我来说似乎太过黑客,而且还在树结构中添加了另一个文件夹,而我并不喜欢这样。

有什么想法可以允许 sftp 用户对文件夹具有写访问权限,而 root 仍为所有者?

答案1

一些 Stack Exchange 网站上有很多关于此类事情的讨论。但万一这不是重复的……

在我的 CentOS 7 中,当您使用 ChrootDirectory 将用户限制到某个目录时,该目录必须由 root 拥有,并且它不能通过权限或 FACL 允许任何其他用户进行写访问。您可以设置符号链接,但如果 sftp 用户被限制到某个目录,则他/她将无法跟踪它。所以你必须这样做。

创建用户

useradd ftp_user

设置密码

passwd ftp_user

设置权限。他的主目录将成为他的监狱。

chown root:root /home/ftp_user
chmod 0755 /home/ftp_user

立即将用户限制在该监狱

vi /etc/ssh/sshd_config

改变这个:

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

Subsystem sftp internal-sftp

添加

Match User ftp_user
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

保存并退出 vi。

不要忘记:

systemctl restart sshd 

现在我们来欺骗他们。假设你的客户有一个网站,你让他继续玩/var/www/corny_website

确保他对该目录具有权限

setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website

现在您可以挂载它而不是符号链接到它。

mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/

现在,当用户使用 sftps 时,他将不会收到管道损坏错误,并且只能看到 /home/ftp_user,而且他只能从 /var/www/corny_website(他将其视为 /corny_website)上传或下载。

相关内容