Autenticazione LDAP con Linux
Dando per scontate che conosciate già LDAP, o almeno sappiate più o meno come funziona, questo articolo vi racconta come l’abbiamo utilizzato per centralizzare l’autenticazione Linux. Ovverosia, gli utenti Linux non vengono creati sulle macchine locali ma su un server centrale facilitando quindi la gestione, soprattutto grazie al fatto che la password va cambiata una volta sola.
Se poi il nostro LDAP server fa anche da base per un server di dominio realizzato tramite emulazione Samba, allora gli stessi utenti vengono usati per autenticarsi sia da macchine Windows che Linux. A proposito di integrazione 🙂
Openldap è una suite di pacchetti che implementa l’autenticazione LDAP in ambiente Linux. Nel dettagli, affrontiamo separatamente il server ldap (ovverosia il demone e il database che si occupano dell’autenticazione) e il client ldap (gli strumenti e le configurazioni che permettono di autenticarsi su un PC utilizzando il server LDAP remoto).
Gli esempi di seguito riportati si riferiscono a una installazione su Kubuntu 8.04. Non dovrebbe differire di molto nelle altre distribuzioni.
Server LDAP
Sul server devono essere installati i pacchetti slapd libldap e ldap-utils ; si consiglia inoltre migrationtools, che comprende una serie di strumenti utili per effettuare la migrazione dagli utenti locali esistenti a utenti. Gli strumenti inclusi in migrationtools sono scritti in perl, quindi deve esserci l’interprete perl installato. Nel caso di Kubuntu 8.04, libldap è già installato di default e se si usa apt-get ldap-utils è una dipendenza di slapd, per cui alla fine basta il comando
apt-get install slapd
e abbiamo tutto quello che ci serve
Il file di configurazione del server ldap è /etc/ldap/slapd.conf. Le opzioni principali da configurare sono:
- suffix, che deve essere impostato al dominio di riferimento (es. suffix = “dc=dominio,dc=com”)
- database, che specifica il tipo di db da impostare come repository (il più utilizzato è “bdb”)
- rootdn, che è il nome completo dell’utente amministratore (es. “cn=Manager,dc=my-domain,dc=com”)
Se non vengono specificate ACL, di default tutti possono accedere in sola lettura a tutto il database. Notare che in questa modalità le modifiche alle proprietà, tra cui il cambio delle password, può essere fatto solo da un utente amministratore con un apposito strumento di amministrazione (es. phpLDAPadmin). Per il momento usiamo questa modalità, poi in seguito vedremo come restringere l’accesso se necessario.
Client LDAP
Ora veniamo ai passi da compiere sui client ldap affinchè questi si possano loggare tramite ldap.
Nota: se vogliamo applicate l’autenticazione via ldap anche sulla macchina stessa su cui è installato il server ldap, a tale macchina vanno applicate tutte le operazioni di configurazione indicate di seguito. Non stupitevi, quindi, e non fate confusione se trovate sulla stessa macchina il file /etc/ldap/slapd.conf (file di configurazione del server) e il file /etc/ldap/ldap.conf (file di configurazione del client).
Sul client vanno installati i pacchetti nscd, libnss-ldap e libpam_ldap . Gli unici accorgimenti da tener presente in fase di configurazione interattiva sono il nome del dominio di riferimento (che deve corrispondere con il valore inserito nel file di configurazione slapd.conf) e l’indirizzo ip del server ldap (si potrebbe usare anche un nome host TCP, però per evitare errori di autenticazione legati a problemi DNS si consiglia di usare direttamente l’indirizzo).
Dopo l’installazione dei pacchetti vanno modificati a mano i seguenti file che gestiscono l’autenticazione:
- /etc/nsswitch.conf
Modificare le righe seguenti inserendo la voce ldap dopo compat
passwd: compat ldap shadow: compat ldap group: compat ldap
- in /etc/pam.d/, i file common-account, common-auth, common-password e common-session
Inserire in prima linea il valore:
[account | auth | password | session] sufficient pam_ldap.so
dove il primo parametro varia ovviamente a seconda del file che stiamo modificando.
- in /etc/pam.d/common-session
Per creare automaticamente la creazione delle home directory degli utenti LDAP, va aggiunta la seguente line
session required /lib/security/pam_mkhomedir.so skel=/etc/skel umask=0022
A questo punto, per evitare sovrapposizioni, si possono eliminare da /etc/passwd, /etc/shadow e /etc/group i valori relativi agli utenti che sono stati trasportati sul server ldap.
Passi successivi
- La creazione di un account specifico che possa modificare le password, e la configurazione del client LDAP perchè usi questo account per l’operazione di cambio password.
- La configurazione di Samba per l’autenticazione LDAP.