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

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

我正在将一个老旧的共享主机系统迁移到更现代的技术。目前,普通的、不安全的 FTP 是客户访问其文件的唯一方式。

我计划用 SFTP 替换它,但我需要一种方法来创建与一个 UNIX 帐户相对应的多个 SFTP 用户。客户在计算机上有一个帐户(例如customer),主目录如下/home/customer/

我们的客户习惯于为他们的域创建任意数量的 FTP 帐户(以分配给不同的人)。我们需要 SFTP 具有同样的功能。

我的第一个想法是使用 SSH 密钥并将每个新“用户”添加到authorized_keys,但这会让我们的客户感到困惑,因为他们中的许多人不懂技术,更喜欢使用密码。

SSH 不是问题,只有 SFTP 可用。我们如何创建多个 SFTP 帐户(customer、、等),使它们customer_developer1customer_developer2功能相同,且不干扰文件权限(理想情况下,所有文件都应保留customer其所有者)?

我最初的想法是某种 PAM 模块,但我不清楚如何在我们的限制内实现这一点。如果 OpenSSH 不适合我们的情况,我们愿意使用替代的 SSH 守护程序;同样,它只需要支持 SFTP 而不支持 SSH。

目前我们的 SSH 配置已附加此内容,以便将用户限制在他们自己的目录中:

# 所有客户都有“客户”组
匹配团体客户
    ChrootDirectory /home/%u # 监禁在主目录中
    AllowTcpForwarding 否
    X11转发否
    ForceCommand internal-sftp #强制 SFTP
    PasswordAuthentication yes # 对于非客户账户,我们使用密钥代替

我们的服务器正在运行 Ubuntu 12.04 LTS。

答案1

我们的解决方案是为每个客户创建一个主用户帐户,例如flowershop。每个客户都可以创建任意数量的副帐户,并使用自己的密码,例如flowershop_developerflowershop_testerflowershop_dba等。这样,他们就可以分发帐户而无需共享主帐户密码,这样做有很多好处(例如,如果他们需要删除 DBA 的帐户,他们可以轻松地做到这一点,而无需更改自己的密码)。

这些帐户中的每一个都在flowershop组中,并有一个主文件夹/home/flowershop/。SSH 使用它作为 chroot 目录(/home/%u,如问题中的配置所示)。

然后,我们使用 ACL 使组中的每个用户都能flowershop修改所有文件。创建新客户帐户时,我们将 ACL 设置如下:

setfacl -Rm \
d:group:admin:rwx,d:user:www-data:r-x,d:user:$USERNAME:rwx,d:group:$USERNAME:rwx,\
  group:admin:rwx,  user:www-data:r-x,  user:$USERNAME:rwx,  group:$USERNAME:rwx \
/home/$USERNAME/

这将执行以下操作:

  • 给予团体admin(对于我们来说,托管服务提供商)rwx
  • 向用户www-data(Apache)提供r-x文件*
  • 向用户提供$USERNAME rwx文件
  • $USERNAME rwx文件分组

这种设置对我们来说似乎运行良好,但我们愿意听取任何改进建议。

* 我们使用 suexec 以客户账户身份运行 CGI/PHP

答案2

不确定上述解决方案如何帮助解决 Op 的问题。如果 flowershop_developer 登录,他将被 chroot 到/home/%u ie/home/flowershop_developer目录。其他用户也是如此。

/home/flowershop如果他们被限制在主目录中,他们怎么能看到目录的内容呢?

希望我没有错过如此琐碎的事情。我有一个使用mount -o绑定选项的有效解决方案,它允许我/home/flowershop在内部进行挂载,/home/flowershop_developer但我希望有一个更简单、更优雅的解决方案。

答案3

我不确定你说的“等价”是什么意思。所有账户都应该有自己的主目录吗?在这种情况下,只需创建具有单独主目录的单独账户即可。或者所有账户都应该共享同一个主目录?这可能不是一个好主意,但你可以创建具有相同主(或补充)组的所有账户,并使用ACL处理权限。

相关内容