SSSD 忽略 ldap_access_filter

SSSD 忽略 ldap_access_filter

我已經設定了 sssd 和 LDAP。使用者進行身份驗證並登入。我的問題是 sssd 似乎忽略了 ldap_access_filter 選項並允許所有使用者登入。我檢查了日誌/調試,並且 pam_sss 每次都會授權用戶,而不管過濾器如何(我嘗試了幾個不同的過濾器,但結果都相同)。

這是用於設定係統的命令:

authconfig 
    --updateall --passalgo=md5 --enableldap --enableldapauth  \
    --ldapserver=ldaps://ldap.example.com  \
    --ldapbase=ou=people,dc=example,dc=com \
    --enableldaptls --enableldapstarttls --disablekrb5 \
    --ldaploadcacert=http://certserver/cacerts/cacert.pem \
    --enablesssd --enablesssdauth --enableshadow \ 
    --enablecachecreds --enablemkhomedir

這是/etc/sssd/sssd.conf:

[domain/default]
debug_level = 9
ldap_id_use_start_tls = True
cache_credentials = True
ldap_search_base = ou=people,dc=example,dc=com
id_provider = ldap
auth_provider = ldap
ldap_access_filter = memberOf=cn=sysadmins,ou=people,dc=example,dc=com
chpass_provider = ldap
ldap_uri = ldaps://ldap.example.com
ldap_tls_cacertdir = /etc/openldap/cacerts
[sssd]
services = nss, pam
config_file_version = 2

domains = default
[nss]

[pam]

[sudo]

[autofs]

[ssh]

[pac]

pam.d/系統驗證:

auth        required      pam_env.so
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_sss.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_oddjob_mkhomedir.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

範例 /var/log/secure:

Dec 30 17:40:36 test login: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost=  user=testacct
Dec 30 17:40:36 test login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=testacct
Dec 30 17:40:36 test login: pam_unix(login:session): session opened for user testacct by LOGIN(uid=0)
Dec 30 17:40:36 test login: LOGIN ON tty1 BY testacct

答案1

它不起作用的原因是您沒有指定實際的過濾器。根據 LDAP 和 SSSD,您必須了解什麼是「過濾器」。這是我自己的帶有過濾器的 sssd.conf。

我的 LDAP 存取過濾器表示,如果登入的人具有 host=servername 或 host=ALL,他們就可以存取電腦。

[域/預設]

ldap_id_use_start_tls = True
快取憑證=假
ldap_search_base = dc=example,dc=net?sub?|(host=palaceredirect.example.net)(host=ALL)
ldap_group_search_base = ou=群組、dc=範例、dc=net
id_provider = LDAP
auth_provider = LDAP
chpass_provider = LDAP
sudo_provider = LDAP
ldap_uri = ldap://library.example.net
ldap_tls_cacertdir = /etc/openldap/cacerts
訪問提供者=ldap
ldap_access_filter = (|(主機=palaceredirect.example.net)(主機=全部))
ldap_schema = rfc2307bis
枚舉=真
autofs_provider = LDAP

[SSD]
設定檔版本 = 2
服務 = nss、pam、sudo、autofs

域=預設

[國家安全局]

[帕姆]

[須藤]

[自動檔案系統]

你可以忽略我的搜尋庫。這樣做的目的是讓「enumerate = True」能夠有效地取得 getent passwd。

答案2

雖然我一直使用 /etc/security/access.conf 來控制伺服器登入訪問,但根據 doco (和 Sokel 的工作範例),您可能會丟失 sssd.conf 中的「access_provider=ldap」行。

答案3

請嘗試使用以下內容,因為它對我基於 centos 的發行版有用

access_provider = ldap
ldap_access_order = filter
ldap_group_member = member
ldap_access_filter = (memberOf=cn=vpn-clients,ou=Groups,dc=example,dc=com)

相關內容