image_pdfimage_print

Da tempo orami CentOS, ovvero “Community ENTerprise Operating System”, è alla versione 8 in upstream mode, dunque anche RHEL “Red Hat Entrprise Linux” è alla medesima versione.

Vediamo nell’articolo come integrare un server CentOS 8 o RHEL 8 con OpenLDAP per abilitarlo ad accedervi con autenticazione centralizzata. Tra le prime cose che notiamo “sparisce” nscd in favore di SSSD.

SSSDè l’acronimo di  System Security Services Daemon  (link: https://sssd.io/), ovvero il demone dei servizi di sicurezza del sistema, un software originariamente sviluppato per il sistema operativo Linux che fornisce un set di demoni per gestire l’accesso ai servizi di directory services e ai meccanismi di autenticazione. Gli inizi di SSSD risiedono nel progetto software open-source FreeIPA (Identity, Policy and Audit).

Aggiornare il sistema tramite dnf o yum

Per prima cosa bisogna aggiornare il sistema operativo, per farlo, usare i seguenti comandi:

dnf update -y
oppure
yum update -y

Installazione SSSD su CentOS/RHEL 8

Dopo che l’aggiornamento è andato a buon fine installare SSSD e gli SSSD tools.

dnf install sssd sssd-tools -y
oppure
yum install sssd sssd-tools -y

Configurazione SSSD per autenticazione OpenLDAP su CentOS/RHEL 8

Prossimo passo è configurare SSSD per abilitare l’autenticazione OpenLDAP sul sistema locale.

SSSD non usa una sua configurazione di default, il file quindi non esisterà, crearne uno manualmente:

vim /etc/sssd/sssd.conf

Copiare il contenuto seguente nel file sssd.conf. Assicuriamoci di aver sostituito i parametri con i valori corretti del nostro ambiente.

[sssd]
services = nss, pam, sudo
config_file_version = 2
domains = default

[sudo]

[nss]

[pam]
offline_credentials_expiration = 60

[domain/default]
ldap_id_use_start_tls = True
cache_credentials = True
ldap_search_base = dc=ldap,dc=acme,dc=com
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
sudo_provider = ldap
ldap_uri = ldap://ad.acme.com
ldap_default_bind_dn = cn=readonly,ou=system,dc=ldap,dc=acme,dc=com
ldap_default_authtok = hjsd4Rtsd
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/openldap/cacerts/ca.cert.pem
ldap_tls_cacertdir = /etc/openldap/cacerts/
ldap_search_timeout = 50
ldap_network_timeout = 60
ldap_sudo_search_base = ou=SUDOers,dc=ldap,dc=acme,dc=com
ldap_access_order = filter
ldap_access_filter = (objectClass=posixAccount)

Salvare ed uscire dal file. Nota che abbiamo anche configurato il nostro server OpenLDAP per fornire i diritti sudo come mostrato dalle configurazioni;

services = nss, pam, sudo
...

[sudo]
...

ldap_sudo_search_base = ou=SUDOers,dc=acme,dc=com

Se non usi OpenLDAP per le regole di sudo, puoi rimuovere queste configurazioni.

ldap_tls_cacert nel file sssd.conf sopra.

Ora scarica il certificato CA del server OpenLDAP e salvalo nel file specificato dalla direttiva  ldap_tls_cacert del file sssd.conf.

openssl s_client -connect ldap.acme.com:636 -showcerts < /dev/null | openssl x509 -text

copia il certificato ed incollalo nel file /etc/openldap/cacerts/ca.cert.pem.

vim /etc/openldap/cacerts/ca.cert.pem
-----BEGIN CERTIFICATE-----
MIIFxzCCA6+gAwIBAgIUV+l4aOvMCLlNQRKOpt9YfxcxA8MwDQYJKoZIhvcNAQEL
BQAwczELMAkGA1UEBhMCS0UxEDAOBgNVBAgMB05haXJvYmkxDDAKBgNVBAcMA05h
...
...
5deiMlJkrYv7wZ0prq0QO5lduGBuD9UJvRa8LBV0GEAiHZL5PJOnREHObbAH907E
eixIJpkcC4wguMaXDNqIv6WGdQtRUyIP8tdByXYJGrbRW0K/K9qEaIZhJiAES1Qy
8U96RdYBpLvDctRch1kIfvnAVffTxmObAGI9n64O89p48kocJwNI/XQNRg==
-----END CERTIFICATE-----

Ora apriamo il file /etc/openldap/ldap.conf e configuriamo le linee seguenti:

vim /etc/openldap/ldap.conf

Fondamentalmente, devi definire la posizione del certificato CA, la base di ricerca OpenLDAP, l’URI e se stai fornendo le direttive SUDO tramite OpenLDAP anche la base SUDOers.

BASE    dc=ldap,dc=acme,dc=com
URI     ldaps://ldap.acme.com:636
SUDOERS_BASE    ou=SUDOers,dc=ldap,dc=acme,dc=com
...
...
TLS_CACERT      /etc/openldap/cacerts/ca.cert.pem
...

Salva ed esci dal file di configurazione.

Configurare il Name Service Switch e PAM su CentOS/RHEL 8

Successivamente, è necessario aggiornare NSS e PAM per utilizzare SSSD per gestire le risorse di autenticazione

Nelle precedenti versioni di  CentOS potevamo usare il tool authconfig ma è stato sostituito da authselect.

Authselect è un’utilità che semplifica la configurazione dell’autenticazione dell’utente, soprattutto durante l’utilizzo dell’SSSD.

Configurare il profilo SSSD.

Il comando Authselect quando viene utilizzato per creare un profilo SSSD modificherà i seguenti file:

  • /etc/pam.d/system-auth
  • /etc/pam.d/password-auth
  • /etc/pam.d/fingerprint-auth
  • /etc/pam.d/smartcard-auth
  • /etc/pam.d/postlogin
  • /etc/nsswitch.conf

Pertanto, esegui un backup di questi file nel caso in cui le cose non funzionino. Dopo aver salvato il backup di questi file rimuovili in modo che il comando successivo li possa ricostruire.

Crea un profilo SSSD. Questo comando avrà esito positivo solo se hai rimosso i file sopra.

authselect select sssd

In caso contrario, puoi sovrascrivere i file aggiungendo l’opzione  --force.

authselect select sssd --force
Backup stored at /var/lib/authselect/backups/2022-03-23-11-52-12.yMO4TA
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- services

Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.

Quindi, affinché il sistema possa recuperare i diritti sudo da SSSD/OpenLDAP modifica il file /etc/nsswitch.conf inserendo la riga seguente:

echo "sudoers:    files sss" >> /etc/nsswitch.conf

Configurae la creazione automatica della Home Directory

 

Per abilitare la creazione automatica della home directory al primo accesso dobbiamo installare oddjob-mkhomedir il quale fornisce il modulo pam_oddjob_mkhomedir.

dnf install oddjob-mkhomedir -y
o
yum install oddjob-mkhomedir -y

Avviare oddjobd ed inserirlo per essere avviato allo start del sistema

systemctl enable --now oddjobd

Carica il modulo pam_oddjob_mkhomedir nel file di autenticazione PAM /etc/pam.d/system-auth  per abilitare la creazione automatica della home directory.

echo "session optional pam_oddjob_mkhomedir.so skel=/etc/skel/ umask=0022" >> /etc/pam.d/system-auth

Restart oddjobd.

systemctl restart oddjobd

Running SSSD

Before you can start SSSD, you need to check configuration for any typos or permissions;

Prima di avviare SSSD verifica che la confiugrazione non abbia errori nei file o permessi sbagliati:

sssctl config-check
File ownership and permissions check failed. Expected root:root and 0600.

Come suggerisce l’output diamo l’accesso in read/write (600) al file  /etc/sssd/ al solo proprietario del file (root).

chown -R root: /etc/sssd
chmod 600 -R /etc/sssd

La configurazione è ora corretta, possiamo impostare SSSD per essere avviato al boot.

systemctl enable --now sssd

Controliamo lo stato

systemctl status sssd
● sssd.service - System Security Services Daemon
   Loaded: loaded (/usr/lib/systemd/system/sssd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-12-08 16:57:07 EAT; 42min ago
 Main PID: 779 (sssd)
    Tasks: 3 (limit: 5073)
   Memory: 60.6M
   CGroup: /system.slice/sssd.service
           ├─779 /usr/sbin/sssd -i --logger=files
           ├─800 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
           └─801 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files

Test autenticazione OpenLDAP via SSSD

Supponendo che tu abbia già creato i tuoi utenti e gruppi OpenLDAP, verifichiamo di poter accedere, prima di tutto, vediamo se  il tuo nome utente LDAP sul sistema venga riconosciuto con il comando id.

id domenico.tricarico

Dovresti ottenere una voce simile a;

uid=1002(domenico.tricarico) gid=1002(domenico.tricarico) groups=1002(sysadmin)

Se non riesci a trovare l’utente assicurati di controllare i log syslog e i log sssd. Altrimenti, puoi riavviare sssd

systemctl restart sssd

Controlla di nuovo l’utente con il comando  id.

Se tutto va bene, esegui un accesso ssh locale per testare l’autenticazione LDAP

ssh -l domenico.tricarico 127.0.0.1
oppure
ssh domenico.tricarico@127.0.0.1
The authenticity of host '127.0.0.1(::1)' can't be established.
ECDSA key fingerprint is SHA256:iMRNJQa8gU0t6fHx6nzmAU+ZygA/3J2BC6zzwzqfY4o.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
domenico.tricarico@localhost's password: 
[domenico.tricarico@ldapserver ~]$ pwd
/home/domenico.tricarico

Verifica diritti sudo.

Innanzitutto, se hai assegnato all’utente i diritti sudo, puoi verificare eseguendo il comando seguente sul tuo server OpenLDAP:

export SUDOERS_BASE=ou=SUDOers,dc=ldap,dc=acme,dc=com
ldapsearch -b "$SUDOERS_BASE" -D cn=admin,dc=ldap,dc=acme,dc=com -W -x
...
# sudo, SUDOers, ldap.acme.com
dn: cn=sudo,ou=SUDOers,dc=ldap,dc=acme,dc=com
objectClass: top
objectClass: sudoRole
cn: sudo
sudoUser: domenico.tricarico
sudoHost: ALL
sudoRunAsUser: ALL
sudoCommand: ALL
...

Ora proviamo il sudo:

[domenico.tricarico@ldapserver ~]$ sudo su -
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for domenico.tricarico: Last login: Wed Mar 23 13:49:47 EAT 2022 from 172.16.0.15 on pts/0 [root@ldapserver ~]#

No responses yet

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.