Sin dalla nascita dei primi sistemi UNIX l’autenticazione si basava su una password che l’utente doveva inserire nel sistema per poi essere confrontata con una crittografata nel file /etc/passwd, questo metodo di autenticazione permetteva di avere la certezza dell’identità dell’utente per corrispondenza tra le due password. Successivamente con l’incremento della velocità di elaborazione dei computer e la larga diffusione delle reti, rese questo sistema vulnerabile e non più applicabile. La limitazione di questo metodo consiste nella necessità di aggiornare tutti i programmi ogni volta che il sistema di autenticazione veniva modificato, PAM ( Pluggable Authentication Modules ) è un sistema di librerie condivise che consente all’amministratore di scegliere il metodo di autenticazione degli utenti da parte delle applicazioni.
Linux-PAM permette di sviluppare programmi indipendenti dal metodo, questi si avvalgono dei moduli di autenticazione che dipendono dalle impostazioni locali del sistema e che sono, quindi, configurabili dall’amministratore. L’applicazione può essere configurata localmente attraverso il file di configurazione /etc/pam.conf oppure con una serie di moduli posti nella directory /etc/pam.d che si avvalgono di una serie di moduli posti di solito nella directory /usr/lib/security. I moduli nei file di configurazione gestiscono quattro operazioni:
- authentication management o gestione dell’autenticazione
- account management o gestione dell’accesso
- session management o gestione della sessione
- password management o gestione delle password
Per quanto riguarda il metodo di configurazione di file in una directory, il più utilizzato, il nome dei file di configurazione per ogni servizio PAM ereditano il nome del servizio stesso, avremo quindi ftpd, rlogind, su, ecc. Esiste tuttavia un nome di servizio speciale OTHER riservato ai meccanismi non esplicitamente configurati, cioé per i quali non esiste un file di configurazione nella directory. Ciascun file di configurazione è costituito da linee del tipo:
tipo_di_modulo flag_di_controllo percorso_del_modulo argomenti
Esistono quattro tipi di modulo ciascuno associato alle quattro operazioni citate in precedenza:
- auth – stabilisce l’identità dell’utente richiedendo una password all’applicazione.
- account – non esegue autenticazione, ma gestisce l’accesso, usato per permettere o inibire l’autorizzazione ad un servizio.
- session – si occupa delle operazioni da compiere prima o dopo che sia dato un servizio all’utente, per esempio registrare log, mounting di directory od altro di questo tipo.
- password – si occupa di aggiornare l’oggetto di autenticazione associato all’utente, può essere la password oppure un’operazione matematica. Solitamente esiste uno di questi moduli per ciascun auth basato su domanda e risposta.
I flag di controllo specificano come la libreria PAM dovrà reagire al successo o fallimento di un modulo a cui è associata. Il formato più semplice prevede l’uso di una delle seguenti parole chiave:
- required – indica che il modulo deve avere successo per la riuscita della pila di moduli dello stesso tipo.
- requisite – differisce dal precedente in quanto al fallimento del modulo il controllo viene affidato all’applicazione.
- sufficient – il successo di questo modulo è giudicato sufficiente perché la libreria Linux-PAM stabilisca che questo tipo di modulo ha avuto successo.
- optional – indica che il modulo non è critico per il successo o fallimento della pila.
Il percorso del modulo indica il nome del percorso del file oggetto dinamicamente caricabile, mentre gli argomenti sono una lista di elementi passati al modulo quando viene invocato, tra le più comuni abbiamo: debug per registrare informazioni di debugging, no_warn per non mandare segnali di allerta all’applicazione, use_first_pass, try_first_pass ed altri.
Veniamo ad un esempio concreto:
# /etc/pam.d/ftp auth sufficient /usr/lib/security/pam_ftp.so auth required /usr/lib/security/pam_unix.so use_first_pass auth required /usr/lib/security/pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ftpusers
Il modulo pam_ftp gestisce solo operazioni di authentication management, in particolare intercetta il nome e la password dell’utente, essendo con flag sufficient, il successo di tale modulo consente di ignorare i moduli auth seguenti. Il modulo pam_unix si avvale delle librerie standard di sistema per ottenere le informazioni per l’autenticazione, di solito contenute in /etc/passwd o /etc/shadow. L’uso di use_first_pass inibisce la richiesta della password e forza l’uso di quella ottenuta con il modulo pam_ftp. Il modulo pam_listfile cerca un’istanza contenuta nell’opzione item ( in questo caso user ) nel file /etc/ftpusers negando sense=deny l’autorizzazione ( in pratica tutti gli utenti contenuti nel file non possono autenticarsi ).
Se il sistema sul quale si lavora è costituito da un solo utente, l’uso di PAM non sembra offrire grossi vantaggi, però su di un server Linux ci sono diversi servizi in cui PAM può svolgere un ruolo egregio, in particolare mediante l’uso dei moduli. Purtroppo non tutti i programmi sono compatibili con PAM, ma occorre aggiungere il supporto e tale opportunità è possibile solo avendo a disposizione i sorgenti del programma stesso, cosa che in Linux, essendo open source, è decisamente probabile.
Articolo molto interessante…Grazie
Ciao Massimo, sono contento che questo articolo ti sia stato utile ed interessante, continua a visitare il blog perché scriverò ancora molto sul mondo Linux.
Salve Giampaolo..complimenti per l’articolo ben scritto e semplice da capire.
Studio sempre manuali in inglese….ma a volte mi piace cercare in giro qualche appassionato che scriva nella mia lingua natia 🙂