我正在将老化的共享托管系统迁移到更现代的技术。现在,普通的旧式不安全 FTP 是客户访问其文件的唯一方式。
我计划用 SFTP 替换它,但我需要一种方法来创建对应于一个 UNIX 帐户的多个 SFTP 用户。一位客户在机器上有一个帐户(例如customer
),其主目录如/home/customer/
.
我们的客户习惯于为他们的域创建任意数量的 FTP 帐户(分发给不同的人)。我们需要与 SFTP 相同的功能。
我的第一个想法是使用 SSH 密钥并将每个新“用户”添加到authorized_keys
,但这让我们的客户感到困惑,他们中的许多人在技术上并不倾向并且更愿意坚持使用密码。
SSH 不是问题,只有 SFTP 可用。我们如何创建多个 SFTP 帐户(customer
、customer_developer1
、customer_developer2
等),这些帐户都具有等效功能并且不干扰文件权限(理想情况下,所有文件都应保留customer
为它们的所有者)?
我最初的想法是某种 PAM 模块,但我不清楚如何在我们的限制范围内完成它。如果 OpenSSH 不适合我们的情况,我们愿意使用替代的 SSH 守护进程;同样,它只需要支持 SFTP 而不是 SSH。
目前我们的 SSH 配置附加了这个,以便将用户关在他们自己的目录中:
# 所有客户都有组 'customer' 匹配组客户 ChrootDirectory /home/%u # 主目录中的监狱 AllowTcpForwarding 否 X11转发没有 ForceCommand internal-sftp # 强制 SFTP PasswordAuthentication yes # 对于非客户帐户,我们使用密钥代替
我们的服务器运行的是 Ubuntu 12.04 LTS。
我们的解决方案是为每个客户创建一个主用户帐户,例如
flowershop
。每个客户都可以使用自己的密码创建任意数量的副账户flowershop_developer
,例如他们需要删除他们的 DBA 帐户,他们可以轻松地做到这一点而无需更改自己的密码)。flowershop_tester
flowershop_dba
这些帐户中的每一个都在
flowershop
组中,主文件夹为/home/flowershop/
. SSH 使用它作为 chroot 目录(/home/%u
,如问题中的配置所示)。然后,我们使用 ACL 使组
flowershop
中的每个用户都可以修改所有文件。创建新客户帐户时,我们将 ACL 设置如下:这将执行以下操作:
admin
(对我们来说,托管服务提供商)rwx
www-data
(Apache)r-x
授予文件*$USERNAME
rwx
文件$USERNAME
rwx
给文件分组这种设置似乎对我们来说效果很好,但我们愿意接受任何改进建议。
* 我们使用 suexec 作为客户帐户运行 CGI/PHP
不确定上述解决方案如何帮助解决 Op 的问题。如果 flowershop_developer 登录,他将被 chroot 到
/home/%u
ie/home/flowershop_developer
目录。其他用户也是如此。/home/flowershop
如果他们被关在自己的主目录中,他们怎么能看到目录的内容呢?希望我没有遗漏如此微不足道的事情。我有一个使用
mount -o
绑定选项的工作解决方案,它允许我在其中安装/home/flowershop
,/home/flowershop_developer
但希望有一个更简单和优雅的解决方案。我不确定你所说的“等价物”是什么意思。所有帐户都应该有自己的主目录吗?在那种情况下,只需创建具有个人主目录的个人帐户。还是所有帐户都应该共享同一个主目录?这可能不是一个好主意,但您可以创建具有相同主要(或补充)组的所有帐户,并使用ACL来处理权限。