为一个帐户创build多个SFTP用户

我正在将一个老化的共享主机系统迁移到更先进的技术上。 现在,普通的不安全的FTP是客户访问文件的唯一方式。

我打算用SFTP来替代它,但是我需要一种方法来创build与一个UNIX帐户相对应的多个SFTP用户。 客户在机器(例如customer )上拥有一个像/home/customer/这样的主目录的账户。

我们的客户习惯于能够为他们的域创build任意数量的FTP帐户(分发给不同的人)。 我们需要与SFTP相同的function。

我的第一个想法是使用SSH密钥,并将每个新的“用户”添加到authorized_keys ,但是这对于我们的客户来说是令人困惑的,其中许多人并不倾向于技术上的偏好,而更愿意使用密码。

SSH不是问题,只有SFTP可用。 我们如何创build多个SFTP帐户( customercustomer_developer1customer_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_developerflowershop_testerflowershop_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。