我正在为一个团队部署一个 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
...