Ldap
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/system-auth:
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
它不起作用的原因是因為您沒有指定實際的過濾器。根據 LDAP 和 SSSD,您必須了解什麼是“過濾器”。這是我自己的帶有過濾器的 sssd.conf。
我的 LDAP 訪問過濾器說如果登錄的人有 host=servername 或 host=ALL,他們可以訪問那台機器。
[域/預設] ldap_id_use_start_tls = 真 cache_credentials = False ldap_search_base = dc=example,dc=net?sub?|(host=palaceredirect.example.net)(host=ALL) ldap_group_search_base = ou=Group,dc=example,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 access_provider = ldap ldap_access_filter = (|(host=palaceredirect.example.net)(host=ALL)) ldap_schema = rfc2307bis 列舉=真 autofs_provider = ldap [固態硬碟] config_file_version = 2 服務 = nss、pam、sudo、autofs 域 = 預設 [nss] [帕姆] [須藤] [自動對焦]
你可以忽略我的搜尋庫。這樣做的目的是讓“enumerate = True”能夠有效地為 getent passwd 工作。