![如何允许一些 SFTP 用户也进行 SSH 访问?](https://linux22.com/image/782066/%E5%A6%82%E4%BD%95%E5%85%81%E8%AE%B8%E4%B8%80%E4%BA%9B%20SFTP%20%E7%94%A8%E6%88%B7%E4%B9%9F%E8%BF%9B%E8%A1%8C%20SSH%20%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我正在为一个团队部署一个 SFTP 服务器,但其中一些用户也需要 SSH 访问权限来管理服务器。
PAM 与我们的 AD 是 sssd。因此我无法为他们创建单独的本地用户以用于 SSH,或创建单独的 AD 帐户仅用于 SSH 访问。
目前,我有这个:
Match group server_ftp-only
ChrootDirectory /shared
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
如果我删除 ForceCommand internal-sftp,将允许用户同时使用 SFTP 和 SSH,但我不希望所有用户都使用 SFTP,只希望几个用户使用。
我尝试添加这个:
Match group server_admins
AllowUsers *
但它不起作用。看来原始 Match 组覆盖了第二个 Match 组。
一种可能的解决方案是将 SSH 用户从 server_ftp-only 安全组中删除并放入 server_admins 组,然后创建一个 Match 组 server_admins 而不使用 ForceCommand internal-sftp,但 server_ftp-only 组由团队组填充(Team-A > server_ftp-only)。我真的无法创建其他组并将这些用户与他们的团队组分开。
答案1
您的问题部分在于,据我所知,没有办法使用条件Match
块来取消设置 ForceCommand
为全局默认值或由另一个 Match 条件设置的 when。
那么你做不到:
# /etc/ssh/sshd_config
# global config ...
# Enable the internal SFTP server and restrict all users to only SFTP
Subsystem sftp internal-sftp
ForceCommand internal-sftp
ChrootDirectory /shared
# ...
# Override and remove the ForceCommand sftp-only restriction
# for users in the server_admins group
Match group server_admins
ChrootDirectory none <=== this does exist
ForceCommand none <=== this does NOT exist
您可以通过实施不同的策略来解决这个问题:不要将其设置ForceCommand
为默认值,保持默认值稍微宽松一些,然后创建一个稍微复杂一些的Match
用否定模式使其适用于所有人(*
),除了成员server_admins
然后你可以覆盖默认值并添加限制:
# /etc/ssh/sshd_config
# ...
# your current global config
#
# Enable the internal sftp server but do not set the ForceCommand
Subsystem sftp internal-sftp
# ...
# Everybody except members of the server_admins group are restricted to SFTP
Match group !server_admins,*
ForceCommand internal-sftp
ChrootDirectory /shared
X11Forwarding no
AllowTcpForwarding no
和类似匹配的成员server_ftp-only
不是server_admins
Match group !server_admins,server_ftp-only
ForceCommand internal-sftp
...