PAM
Cenni storici
Nel caso di sistemi unix-like, il meccanismo tradizionale di autenticazione prevede che l'utente confermi l'identità comunicando all'applicazione due dati (cosiddette "credenziali"): il "nome utente" (username) ed un "codice segreto" (password). L'utente è riconosciuto se la corrispondenza tra le credenziali trova conferma con quanto noto al sistema di autenticazione (ad esempio, quanto configurato nel file /etc/passwd oppure /etc/shadow). Una volta autenticato, l'utente può, nell'implementazione più semplice, accedere alle risorse del sistema associate al suo identificativo personale (user ID o UID) o all'identificativo del/dei gruppi di utenti (group ID o GID) cui appartiene; tale permesso è poi ulteriormente modulabile in funzione delle autorizzazioni per le attività di lettura, scrittura ed esecuzione di file.
Il meccanismo di autenticazione sopra indicato, variamente modificabile ed integrabile, è, naturalmente, quello più diffuso, ma non l'unico possibile. Ad esempio, un'azienda potrebbe volerlo integrare con altre e differenti tecnologie (come il riconoscimento delle impronte digitali oppure il contestuale utilizzo di un dispositivo univocamente identificabile). In tal caso però, se le istruzioni per implementare uno specifico meccanismo di autenticazione fossero inserite dal programmatore permanentemente all'interno delle applicazioni, allora ogni variazione del metodo di riconoscimento richiederebbe la riscrittura dei programmi interessati; in effetti, era quello che accadeva fino a non molto tempo fa e, in alcuni casi, accade ancora oggi.
Architettura
Per far fronte all'esigenza di rendere la scrittura delle applicazioni indipendenti dallo schema di autenticazione, nel 1995 la Open Software Foundation [1] propone uno standard che separa l'implementazione "a basso livello" dei singoli metodi di autenticazione dall'implementazione del programma che richiede tale servizio; ciò è realizzato attraverso la standardizzazione di uno "strato software intermedio" (in gergo tecnico definito application program interface o API) posto tra applicazione e metodo di autenticazione: nasce così il Pluggable Authentication Modules o PAM. In altri termini, ricorrendo a PAM, l'amministratore di sistema può scegliere il metodo utilizzato dalle applicazioni per autenticare gli utenti senza doverle ogni volta riscrivere. Resta inteso che l'opportunità di utilizzare PAM è facoltativa: il programmatore può comunque realizzare applicazioni che ne facciano a meno.
Per verificare se un'applicazione fa uso di PAM si può controllare se essa utilizza la "libreria software" chiamata libpam.so; ciò può essere ottenuto con il comando /usr/bin/ldd che, ad esempio riferito al comando /bin/su, potrà essere così impartito:
$ ldd /bin/su | grep libpam.so
che restituirà, in caso di esito positivo:
libpam.so.0 => /lib/libpam.so.0 (0xb7f15000)