我的目标是允许给定的 Active Directory 组成员在 chroot 中使用 OpenSSH SFTP,并拒绝他们和所有其他不属于该组成员的 SSH 访问,同时仍然允许本地(非 AD)系统帐户。
我已经配置sshd_config
为使用 Kerberos 来获取 Active Directory 信息,并且该部分已经在工作。
问题是:虽然它适用于我希望授予访问权限的组(允许 sftp,拒绝 ssh),但所有其他 AD 帐户都可以打开 SSH shell 和非 chroot SFTP,这当然是不希望的。
总结一下,我需要:
- 授予对 Active Directory 组的 chroot'ed SFTP 访问权限;拒绝他们的 SSH。
- 拒绝该组的非成员的 SFTP 和 SSH。
- 保留对本地系统帐户的访问权限。
我正在使用带有 OpenSSH_8.3p1 的 Fedora 32,我的配置如下(未注释掉的行)。
/etc/ssh/sshd_config:
Include /etc/ssh/sshd_config.d/*.conf
HostbasedAuthentication no
KerberosAuthentication yes
Subsystem sftp internal-sftp
Match Group sftp_users
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
/etc/ssh/sshd_config.d/50-redhat.conf:
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
PrintMotd no
提前致谢!
您需要在 SSSD 中使用 ad_access_filter 来过滤哪些 AD 用户可以访问服务器。语法类似于:
ad_access_filter=(&(memberof=cn=sftp_user,ou=groups,dc=example,dc=com)(其他会员标准))
经过一些试验和错误,我可能已经找到了我自己问题的答案。我只是想从你们那里知道这个解决方案是否会产生任何已知的影响。
所以,我变成
sshd_config
了这样(省略其余部分):第一个
Match
块强制不匹配组轮(使用!),并使用 * 匹配任何其他组。然后AllowGroups
定义允许使用 SFTP 的组的空格分隔列表。这些组的成员将无权访问 SSH shell。在我的测试中,我可以看到它们已成功 chroot。然后在第二个
Match
块中,组轮通过在块中放置任何其他内容来定义默认的 sshd 选项。因此,wheel成员将可以不受限制地访问 SSH 和 SFTP。他们没有落入chroot。我选择了组轮,因为它是基于 Fedora 的系统上的 sudoers 组,所以对我来说这些本地系统用户就足够了(记住root用户不属于它;注意不要把自己锁在外面!)。
然后我可以看到只有所需的 AD 组成员才能登录 SFTP。非成员会生成如下日志:
我没有测试的(只是因为它不是我的情况):