我的目标是允许给定的 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
提前致谢!
答案1
您需要使用 SSSD 中的 ad_access_filter 来过滤哪些 AD 用户可以访问服务器。语法如下:
ad_access_filter=(&(memberof=cn=sftp_user,ou=groups,dc=example,dc=com)(其他会员标准))
答案2
经过反复尝试,我可能找到了自己问题的答案。我只是想从你们那里了解一下这个解决方案是否有任何已知的影响。
因此,我将其改为sshd_config
如下所示(省略其余部分):
Match Group !wheel,*
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
AllowGroups sftp_users
Match Group wheel
第一Match
阻断力量不是与团体相匹配车轮(带 !),并用 * 匹配任何其他组。然后AllowGroups
定义允许使用 SFTP 的组的空格分隔列表。这些组的成员将无权访问 SSH shell。在我的测试中,我可以看到他们已成功 chroot。
然后在第二个Match
区块中车轮通过在块中不添加任何其他内容来定义默认的 sshd 选项。因此车轮成员将可以不受限制地访问 SSH 和 SFTP。他们没有陷入 chroot 中。
我选择了小组车轮因为它是基于 Fedora 的系统上的 sudoers 组,所以对我来说这些本地系统用户就足够了(记住根用户不属于它;小心不要将自己锁在外面!)。
然后我可以看到只有所需的 AD 组成员才能登录 SFTP。非成员将生成如下日志:
User john from 192.168.1.11 not allowed because none of user's groups are listed in AllowGroups
我还没有测试过(只是因为这不会是我的情况):
- 属于允许组和不允许组的用户会发生什么情况。
- 如果系统和 Active Directory 名称相同,会发生什么情况(我猜nsswitch.conf秩序在这里会发挥作用)。