Le informazioni presenti nell'infrastruttura LDAP di INFN-AAI, possono essere utilizzate anche per effettuare le operazioni di Autenticazione ed Autorizzazione da parte di sistemi UNIX. In questa guida viene descritta una possibile configurazione minimale di un sistema basato su RHEL8, che utilizza il demone SSSD.
dnf -y install curl tar openldap-clients sssd sssd-ldap oddjob-mkhomedir nss-pam-ldapd openssl-perl
I certificati dei server LDAP nazionali sono attualmente firmati da Sectigo.
Creare (se non esiste già) la directory /etc/openldap/cacerts/ ed estrarre nella stessa directory il contenuto del file sectigo-ca.tar:
curl -s https://wiki.infn.it/_media/cn/ccr/aai/howto/sectigo-ca.tar | tar xvf - -C /etc/openldap/cacerts/
Generare gli hash dei certificati CA con il comando:
c_rehash /etc/openldap/cacerts/
Editare il file /etc/openldap/ldap.conf sostituendo ds1.na.infn.it / ds2.na.infn.it con l'URI del (o dei) server LDAP nella propria sede (oppure usare il server LDAP nazionale ds.infn.it):
URI ldap://ds1.na.infn.it ldap://ds2.na.infn.it BASE ou=people,dc=na,dc=infn,dc=it TLS_CACERTDIR /etc/openldap/cacerts
Impostare il profilo SSSD con authselect. L'opzione with-mkhomedir fa in modo che la home directory dell'utente venga automaticamente creata al primo login. Le opzioni with-custom-* se non si vogliono risolvere i netgroup, automount e services via demone SSSD:
authselect select sssd with-mkhomedir with-custom-netgroup with-custom-automount with-custom-services --force
Creare il file /etc/sssd/sssd.conf sostituendo ds1.na.infn.it / ds2.na.infn.it con l'URI del (o dei) server LDAP nella propria sede oppure usare il server LDAP nazionale ds.infn.it:
[domain/aai-napoli] # Le informazioni dell'utente e gli attributi posix vengono recuperati dal ramo LDAP della propria sede id_provider = ldap ldap_uri = ldap://ds1.na.infn.it, ldap://ds2.na.infn.it ldap_search_base = dc=na,dc=infn,dc=it # ATTENZIONE: In questo modo si considerano -tutti- gli utenti presenti nel ramo di sede. # Per impostare dei filtri sugli utenti leggere il paragrafo successivo. ldap_user_search_base = ou=people,dc=na,dc=infn,dc=it # ATTENZIONE: I gruppi sul ramo di sede sono in "ou=group" e -non- in "ou=groups" ldap_group_search_base = ou=group,dc=na,dc=infn,dc=it ldap_id_use_start_tls = True cache_credentials = True ldap_tls_cacertdir = /etc/openldap/cacerts ldap_tls_reqcert = demand # L'autenticazione viene invece demandata alle PAM-LDAP sul ramo LDAP nazionale. # SSSD può infatti utilizzare due meccanismi diversi per separare la parte di identità # da quella di autenticazione. auth_provider = proxy proxy_pam_target = sssdproxyldap # Il cambio password sul ramo LDAP nazionale è consentito solo via IdP o Kerberos, inutile configurare un chpass provider. chpass_provider = none # Sugli LDAP server di INFN-AAI non ci sono informazioni di questo tipo, inutile configurare i rispettivi provider. sudo_provider = none selinux_provider = none subdomains_provider = none session_provider = none autofs_provider = none hostid_provider = none resolver_provider = none [sssd] services = nss, pam domains = aai-napoli
Per filtrare/autorizzare gli utenti del ramo di sede in base a specifici attributi LDAP ci sono diversi metodi:
ldap_user_search_base = <ramo-people-di-sede>?<scope>?<filter>
Ad esempio, per filtrare gli utenti che hanno l'attributo isMemberOf che inizia con la stringa i:infn:na::d: (cioè: dipendenti della sezione di Napoli):
ldap_user_search_base = ou=people,dc=na,dc=infn,dc=it?one?(isMemberOf=i:infn:na::d:*)
access_provider = ldap ldap_access_filter = <filter>
Ad esempio, per filtrare gli utenti che hanno l'attributo isMemberOf che inizia con la stringa i:infn:na::d: (cioè: dipendenti della sezione di Napoli):
access_provider = ldap ldap_access_filter = (isMemberOf=i:infn:na::d:*)
Impostare i permessi del file:
chmod 600 /etc/sssd/sssd.conf
Abilitare i servizi sssd e oddjobd:
systemctl enable sssd.service systemctl enable oddjobd.service
Creare il file /etc/pam.d/sssdproxyldap:
auth required pam_ldap.so account required pam_ldap.so password required pam_ldap.so session required pam_ldap.so
Creare (o editare) il file /etc/nslcd.conf sostituendo ds1.na.infn.it / ds2.na.infn.it con l'URI del (o dei) server LDAP nella propria sede oppure usare il server LDAP nazionale ds.infn.it:
# L'autenticazione dell'utente viene fatta con un bind LDAP sul ramo nazionale uid nslcd gid ldap uri ldap://ds1.na.infn.it ldap://ds2.na.infn.it base ou=people,dc=infn,dc=it ssl start_tls tls_cacertdir /etc/openldap/cacerts filter passwd (objectClass=infnAccount)
Abilitare il demone nslcd:
systemctl enable nslcd.service
systemctl restart sssd oddjobd nslcd