Table of Contents
RHEL8 LDAP AuthN & AuthZ
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.
- Le informazioni di utenti/gruppi (attributi Posix) vengono recuperate via LDAP dal ramo di sede (nell'esempio viene utilizzato quello di Napoli: dc=na,dc=infn,dc=it).
- L'autenticazione, via bind LDAP, viene invece effettuata sul ramo nazionale.
Installazione dei pacchetti necessari
dnf -y install curl tar openldap-clients sssd sssd-ldap oddjob-mkhomedir nss-pam-ldapd openssl-perl
Configurazione certificati CA e parametri default per openldap
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
Configurazione SSSD
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:
- Impostare un filtro LDAP direttamente nel parametro ldap_group_search_base. In questo modo soltanto le entry LDAP che soddisfano il filtro saranno considerati utenti reali dal sistema operativo. La sintassi generale è:
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:*)
- Impostare access_provider di tipo ldap e specificare un ldap_access_filter. In questo modo soltanto gli utenti LDAP che soddisfano il filtro potranno loggarsi sul sistema. Chi non soddisfa il filtro non potrà loggarsi ma sarà comunque considerato un utente reale dal sistema operativo. La sintassi generale è:
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:*)
- Una combinazione dei metodi 1 e 2. Ad esempio si può impostare un filtro nella ldap_group_search_base per specificare quali sono gli utenti reali del sistema operativo e permettere il login soltanto ad alcuni di questi attraverso un secondo filtro in ldap_access_filter
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
Configurazione PAM-LDAP
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
Restart dei servizi
systemctl restart sssd oddjobd nslcd