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

Tom*_*nal 6 linux ssh sftp

我正在将老化的共享托管系统迁移到更现代的技术。目前,老式的不安全 FTP 是客户访问其文件的唯一方式。

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

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

我的第一个想法是使用 SSH 密钥并将每个新“用户”添加到authorized_keys,但这让我们的客户感到困惑,他们中的许多人在技术上并不感兴趣,并且更愿意坚持使用密码。

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

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

目前我们的 SSH 配置已经附加了这个,以便将用户关在他们自己的目录中:

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

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

Tom*_*nal 4

我们的解决方案是为每个客户创建一个主用户帐户,例如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/
Run Code Online (Sandbox Code Playgroud)

这会执行以下操作:

  • 提供组admin(对于我们,托管提供商)rwx
  • 为用户www-data(Apache)提供r-x文件*
  • 向用户提供$USERNAME rwx文件
  • $USERNAME rwx为文件提供组

这个设置似乎对我们来说效果很好,但我们愿意接受任何更好的建议。

* 我们使用 suexec 作为客户帐户运行 CGI/PHP