我已经设置了sssd和LDAP。 用户进行身份validation和login。 我的问题是,sssd似乎忽略了ldap_access_filter选项,并允许所有用户login。 我已经检查了日志/debugging和pam_sss授权用户每次不pipefilter(我已经尝试了几个不同的所有具有相同的结果)。
这是用来configuration系统的命令:
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
它不工作的原因是因为你没有指定一个实际的filter。 根据LDAP和SSSD,您必须了解“filter”是什么。 这是我自己的sssd.conf与filter。
我的LDAP访问filter是说,如果login的人有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 =组,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 [SSSD] config_file_version = 2 services = nss,pam,sudo,autofs 域=默认 [NSS] [PAM] [须藤] [autofs的]
你可以忽略我的search基地。 重点是允许“enumerate = True”有效地为getent passwd工作。
虽然我总是使用/etc/security/access.conf来控制服务器login访问,但根据doco(和Sokel的工作示例),您可能会忽略sssd.conf中的“access_provider = ldap”行。