我正在将一个老化的共享主机系统迁移到更先进的技术上。 现在,普通的不安全的FTP是客户访问文件的唯一方式。
我打算用SFTP来替代它,但是我需要一种方法来创build与一个UNIX帐户相对应的多个SFTP用户。 客户在机器(例如customer )上拥有一个像/home/customer/这样的主目录的账户。
我们的客户习惯于能够为他们的域创build任意数量的FTP帐户(分发给不同的人)。 我们需要与SFTP相同的function。
我的第一个想法是使用SSH密钥,并将每个新的“用户”添加到authorized_keys ,但是这对于我们的客户来说是令人困惑的,其中许多人并不倾向于技术上的偏好,而更愿意使用密码。
SSH不是问题,只有SFTP可用。 我们如何创build多个SFTP帐户( customer , customer_developer1 , customer_developer2等),它们都作为等价物并且不会干扰文件许可(理想情况下,所有文件都应该保留customer作为其所有者)?
我最初的想法是某种PAM模块,但我不清楚如何在我们的约束范围内完成此任务。 如果OpenSSH不适合我们的情况,我们愿意使用另一个SSH守护进程。 再次,它只需要支持SFTP而不是SSH。
目前我们的SSHconfiguration已经附加到它,以监禁用户在他们自己的目录中:
#所有顾客都有团体“顾客”
匹配组客户
ChrootDirectory / home /%u#监狱在主目录
AllowTcpForwarding号码
X11转发号码
ForceCommand internal-sftp#强制SFTP
PasswordAuthentication yes#对于非客户帐户,我们使用密钥来代替
我们的服务器正在运行Ubuntu 12.04 LTS。
我们的解决scheme是为每个客户创build一个主要用户帐户,例如flowershop 。 每个客户都可以使用自己的密码创build任意数量的副账户,比如flowershop_developer , flowershop_tester , flowershop_dba等。这样,他们就可以在不分享主账户密码的情况下flowershop_dba账户,这对于一系列原因来说是更好的select例如,如果他们需要删除他们的DBA帐户,他们可以很容易地做到这一点,而无需更改自己的密码)。
这些帐户中的每一个帐户都位于flowershop组中,具有/home/flowershop/的主文件夹。 SSH使用这个作为chroot目录( /home/%u ,如问题configuration中所示)。
然后,我们使用ACL来使组flowershop每个用户能够修改所有文件。 在创build新的客户帐户时,我们将ACL设置如下:
setfacl -Rm \ d:group:admin:rwx,d:user:www-data:rx,d:user:$USERNAME:rwx,d:group:$USERNAME:rwx,\ group:admin:rwx, user:www-data:rx, user:$USERNAME:rwx, group:$USERNAME:rwx \ /home/$USERNAME/
这样做如下:
admin (对我们来说,主机提供商) rwx www-data (Apache) rx文件* $USERNAME rwx文件 $USERNAME rwx 这个设置似乎对我们来说很好,但我们愿意提供更好的build议。
*我们使用suexec作为客户帐户运行的CGI / PHP
我不确定“等值”是什么意思。 所有帐户都应该有自己的主目录吗? 在这种情况下,只需创build具有个人主目录的个人帐户。 还是应该所有的帐户共享相同的主目录? 这可能不是一个好主意,但可以使用相同的主(或补充)组创build所有帐户,并使用ACL来处理权限。
不知道以上的解决scheme如何帮助解决欧普的问题。 如果flowershop_developerlogin,他将被chroot到/home/%u即/home/flowershop_developer目录。 和其他用户一样。
如果他们被监禁到他们的主目录,他们怎么能看到/home/flowershop目录的内容?
希望我不会错过这么微不足道的东西。 我有一个使用mount -o bind选项的工作解决scheme,它允许我在/home/flowershop挂载/home/flowershop ,但希望有一个更简单和优雅的解决scheme。