我需要自由职业者能够下载和上传文件到我的 Ubuntu 服务器上的某些网站,但不是全部。
我该如何设置,以便每个自由职业者都是只能访问他们应该能够访问的网站而不能访问其他任何网站的用户?
我按照找到的说明通过 bind 设置 ftp 用户访问特定文件夹。我已将我的 ftp 用户添加到对这些文件夹具有读取和写入访问权限的组中,因此从这个角度来看一切似乎都很好 - 我的用户可以做他们需要做的事情。但我的 ftp 用户可以导航到我服务器上的所有文件夹,这根本不好。我如何确保他们仅限于他们的 /home/thisuser 文件夹,而不能访问其他文件夹。
答案1
由于我的声誉还不够,我无法对您的问题发表评论,但您使用 FTP 而不是 SFTP 有什么原因吗?FTP 会以明文形式发送密码,这是一件非常糟糕的事情。SFTP 会加密客户端和服务器之间的交换。
设置 SFTP chroot 是一个多步骤的过程。这些说明假设您已经安装了 ssh 服务器。
在 /etc/ssh/sshd_config 中替换以下行
Subsystem sftp /usr/lib/openssh/sftp-server
有了这个:Subsystem sftp internal-sftp
在此行后面添加以下部分:
匹配组 sftponly
ChrootDirectory /home/%u
X11Forwarding 没有
AllowTcpForwarding 没有
ForceCommand internal-sftpChrootDirectory /home/%u 将强制用户的主目录作为根目录。
创建 sftponly 组:
sudo groupadd sftponly
将所有自由职业者添加到 sftponly 组并更改用户的主目录:
sudo usermod -g sftponly -d / johnnyfreelancer
'sftponly' 必须是用户的主要组(这是 -g 标志的作用),否则此方法将不起作用。-d 标志也是必需的,因为一旦用户登录,/home/%u 将有效地成为登录用户的最高目录。
答案2
我会用chroot。这确实是您的最佳选择,因为您可以 100% 确保没有人能够查看除其“主”目录之外的任何内容。
答案3
我会使用 SUphp 为自由职业者创建群组。然后,您可以为他们的群组添加所需文件夹的写入/读取权限。