SSSD ignoriert ldap_access_filter

SSSD ignoriert ldap_access_filter

Ich habe sssd und LDAP eingerichtet. Benutzer authentifizieren sich und melden sich an. Mein Problem ist, dass sssd die Option ldap_access_filter zu ignorieren scheint und allen Benutzern die Anmeldung erlaubt. Ich habe die Protokolle/Debugging-Dateien untersucht und pam_sss autorisiert die Benutzer jedes Mal, unabhängig vom Filter (ich habe ein paar verschiedene ausprobiert, alle mit demselben Ergebnis).

Mit diesem Befehl wird das System konfiguriert:

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

Dies ist die Datei /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]

Die Datei 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

Beispiel /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

Antwort1

Der Grund, warum es nicht funktioniert, ist, dass Sie keinen tatsächlichen Filter angeben. Sie müssen verstehen, was ein „Filter“ gemäß LDAP und SSSD ist. Hier ist meine eigene sssd.conf mit den Filtern.

Mein LDAP-Zugriffsfilter besagt, dass die sich anmeldende Person auf die Maschine zugreifen kann, wenn sie über Host=Servername oder Host=ALL verfügt.

[Domäne/Standard]

ldap_id_use_start_tls = Wahr
cache_credentials = Falsch
ldap_search_base = dc=Beispiel,dc=net?sub?|(Host=palaceredirect.example.net)(Host=ALLE)
ldap_group_search_base = ou=Gruppe,dc=Beispiel,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
Zugriffsanbieter = ldap
ldap_access_filter = (|(Host=palaceredirect.example.net)(Host=ALLE))
ldap_schema = rfc2307bis
aufzählen = Wahr
autofs_provider = ldap

[nicht]
Konfigurationsdateiversion = 2
Dienste = nss, pam, sudo, autofs

Domänen = Standard

[nss]

[pam]

[sudo]

[autofs]

Sie können meine Suchbasis ignorieren. Der Sinn dahinter war, dass „enumerate = True“ effektiv für getent passwd funktioniert.

Antwort2

Während ich immer /etc/security/access.conf verwendet habe, um den Server-Anmeldezugriff zu steuern, fehlt Ihnen laut der Dokumentation (und Sokels funktionierendem Beispiel) möglicherweise die Zeile „access_provider=ldap“ in sssd.conf.

Antwort3

Bitte versuchen Sie Folgendes, da es bei mir bei einer CentOS-basierten Distribution funktioniert hat

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

verwandte Informationen