OpenSSH + Active Directory:允许某个组使用 sftp,同时禁止其他所有人使用

OpenSSH + Active Directory:允许某个组使用 sftp,同时禁止其他所有人使用

我的目标是允许给定的 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秩序在这里会发挥作用)。

相关内容