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
提前致謝!
經過一些試驗和錯誤,我可能已經找到了我自己問題的答案。我只是想從你們那裡知道這個解決方案是否會產生任何已知的影響。
所以,我變成
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 選項。因此,wheel成員將可以不受限制地訪問 SSH 和 SFTP。他們沒有落入chroot。我選擇了組輪,因為它是基於 Fedora 的系統上的 sudoers 組,所以對我來說,這些本地系統使用者就足夠了(記住root使用者不屬於它;注意不要把自己鎖在外面!)。
然後我可以看到只有所需的 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順序會在這裡起作用)。
您需要在 SSSD 中使用 ad_access_filter 來過濾哪些 AD 使用者可以訪問伺服器。語法類似於:
ad_access_filter=(&(memberof=cn=sftp_user,ou=groups,dc=example,dc=com)(其他會員標準))