[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]
Secondo la tradizione dei sistemi Unix, l'identificazione di un utente avviene attraverso una parola d'ordine, annotata in modo cifrato nel file /etc/passwd, oppure nel file /etc/shadow se è attiva la gestione delle parole d'ordine oscurate. L'introduzione delle parole d'ordine oscurate ha aggiunto la possibilità di maggiori controlli sull'utenza, in particolare definendo dei tempi di validità per le parole d'ordine e per le utenze stesse.
Tuttavia, il sistema delle parole d'ordine oscurate rimane ancorato alla gestione di parole d'ordine, mentre i metodi di identificazione potrebbero essere differenti. L'esigenza di definire una struttura generalizzata per la gestione dei metodi di autenticazione ha portato alla realizzazione del sistema PAM (Pluggable authentication modules), con il quale, attraverso le librerie PAM è possibile definire e configurare la politica di accesso in base al contesto.
Per mettere in pratica questo sistema, i programmi che in qualche modo si occupano di mettere a disposizione un servizio di autenticazione devono essere predisposti per l'utilizzo di tali librerie. In generale, un sistema Unix in cui è attivata la gestione PAM, configurato in modo standard, si comporta esattamente come un sistema che ne è sprovvisto. In altri termini, la configurazione standard del sistema PAM è quella che ricalca la tradizione dei sistemi Unix.
In questo capitolo si fa riferimento alla realizzazione del sistema PAM per GNU/Linux, ovvero Linux-PAM.(1)
|
Tabella 137.1. Riepilogo dei file e delle directory per la gestione del sistema PAM.
|
I programmi che si avvalgono del sistema PAM sono stati compilati in modo da utilizzare la libreria LibPAM, costituita generalmente dalla libreria dinamica /lib/libpam.so. Lo si può verificare facilmente con ldd:
# ldd /bin/login[Invio]
...
libpam.so.0 => /lib/libpam.so.0 (0xb7f17000)
...
|
Ogni programma che utilizza il sistema PAM (attraverso la libreria LibPAM), viene associato a un servizio, il cui nome corrisponde generalmente a quello del programma. Per esempio, si associa il servizio login al programma login, ma succede anche che si associ il servizio ssh al programma sshd. L'associazione tra programmi e servizi dipende dal modo in cui i programmi sono compilati, pertanto non si può modificare in fase di amministrazione del sistema, a meno di intervenire direttamente nei sorgenti degli stessi.
Ogni servizio PAM rappresenta una situazione in cui si richiede l'autenticazione degli utenti, o comunque qualcosa di strettamente correlato. Teoricamente, programmi differenti possono condividere lo stesso servizio PAM.
Per ogni servizio PAM viene predisposta una configurazione particolareggiata, la quale può risiedere complessivamente nel file /etc/pam.conf, oppure in file separati all'interno della directory /etc/pam.d/. Generalmente il file /etc/pam.conf non viene più usato e i file contenuti nella directory /etc/pam.d/ hanno nomi corrispondenti al servizio PAM a cui si riferiscono.
L'aspetto più importante del sistema PAM è la modularità, costituita da diversi file di libreria, oltre a quello principale già descritto (LibPAM). Quando si gestisce il sistema PAM, questi file sono indispensabili al funzionamento del sistema, pertanto non possono essere collocati al di sotto della directory /usr/.(2) La collocazione normale di questi file è così la directory /lib/security. A titolo di esempio, nella directory si potrebbero vedere i file seguenti:
pam_access.so pam_ldap.so pam_rhosts_auth.so pam_unix_acct.so pam_deny.so pam_limits.so pam_rootok.so pam_unix_auth.so pam_env.so pam_listfile.so pam_securetty.so pam_unix_passwd.so pam_filter.so pam_mail.so pam_shells.so pam_unix_session.so pam_ftp.so pam_mkhomedir.so pam_stress.so pam_userdb.so pam_group.so pam_motd.so pam_tally.so pam_warn.so pam_issue.so pam_nologin.so pam_time.so pam_wheel.so pam_lastlog.so pam_permit.so pam_unix.so |
Come già accennato, la configurazione del sistema PAM dipendeva originariamente dal file /etc/pam.conf. Attualmente la configurazione è suddivisa in più file (ognuno competente per un servizio PAM specifico), contenuti nella directory /etc/pam.d/ e il file /etc/pam.conf rimane vuoto o commentato completamente. In tal modo, ogni servizio PAM ha un proprio file nella directory /etc/pam.d/, facilitando anche la gestione dei pacchetti di applicazioni, che non devono condividere la configurazione in un solo file.
I file di configurazione contenuti nella directory /etc/pam.d/ sono file di testo normali, in cui le righe vuote e quelle bianche sono ignorate, così come sono ignorate quelle che iniziano con il simbolo #. Per il resto, si tratta di direttive con la struttura seguente:
tipo livello_di_controllo modulo_pam [opzioni_del_modulo] |
Oppure, si può trattare di direttive di inclusione di altri file:
@include nome_file_da_includere |
Il listato 137.4 rappresenta l'esempio di come potrebbe apparire il file /etc/pam.d/login che serve a configurare il servizio di autenticazione attraverso il programma login.
|
Listato 137.4. Esempio del file
|
Il primo campo serve a definire la fase di autenticazione a cui si fa riferimento, attraverso alcune parole chiave ben definite, descritto nell'elenco successivo.
|
Ogni modulo PAM può essere visto come una funzione che restituisce un valore. Sono possibili diversi casi, tra cui si distingue un successo completo o un insuccesso, con tante sfumature intermedie che, eventualmente, possono essere verificate nel dettaglio. A questo proposito, il secondo campo delle direttive di configurazione consente di definire come deve essere preso in considerazione l'esito della verifica fatta dal modulo corrispondente. Anche in questo caso si usa una parola chiave, come descritto nel prossimo elenco.
|
Le direttive di ogni servizio PAM vengono analizzate nell'ordine in cui appaiono; pertanto, è evidente che il risultato finale dipenda dalla sequenza in cui vengono trovate nel file di configurazione relativo.
Le parole chiave appena descritte (quelle del secondo campo) possono essere dettagliate in modo completo, sostituendole con un'espressione tra parentesi quadre (pertanto le parentesi quadre vanno inserite effettivamente). A titolo di esempio, la tabella successiva descrive la traduzione delle parole chiave già descritte. Naturalmente, per poter usare tali espressioni occorre conoscere perfettamente le opzioni relative.
|
Il terzo campo rappresenta il nome del file di libreria che costituisce il modulo relativo. Questo nome può essere completo di percorso assoluto, oppure può essere indicato senza tale informazione, se la sua collocazione è quella predefinita. Il quarto campo è costituito dalle opzioni da passare al modulo, separate tra loro da uno o più spazi.
Tra i vari file di configurazione è importante definirne uno denominato other, che viene utilizzato quando per quel particolare servizio di autenticazione non ne è stato previsto uno specifico. L'esempio che si vede nel listato 137.8 rappresenta il contenuto di questo file quando si vuole garantire un sistema minimo di autenticazione, secondo i canoni tradizionali.
|
Listato 137.8. Un file
|
Per verificare che ciò sia vero, si può provare a spostare temporaneamente gli altri file di configurazione della directory /etc/pam.d/ in un'altra collocazione, lasciando al suo posto il file /etc/pam.d/other.
In alternativa, si può fare in modo che non ci siano altre possibilità di autenticazione, al di fuori di quando definito dai file di configurazione specifici. Per questo, basta che il file /etc/pam.d/other contenga le righe che si vedono nel listato 137.9.
|
Listato 137.9. Un file
|
A seconda delle circostanze, alcuni moduli possono annotare nel registro del sistema l'esito della loro verifica. Spesso è prevista l'opzione debug per abilitare queste annotazioni, a meno che ciò sia implicito. Queste annotazioni possono aiutare l'amministratore a comprendere dove ci possono essere dei problemi di configurazione. A titolo di esempio, si può osservare l'estratto seguente:
|
In questo caso si può osservare che l'utente tizio ha tentato di accedere attraverso il servizio di autenticazione login, senza che per lui sia prevista un'utenza, pertanto, già il nominativo-utente tizio risulta sconosciuto.
Oltre alle opzioni fornite nelle direttive dei file di configurazione dei servizi di autenticazione, nella directory /etc/pam.d/, alcuni moduli possono richiedere una configurazione particolare. Questi file ulteriori hanno solitamente un nome corrispondente a quello dei moduli, senza il prefisso pam_ e senza l'estensione .so, con l'aggiunta dell'estensione .conf, collocati nella directory /etc/security/. Per esempio, il file /etc/security/access.conf si riferisce al modulo pam_access.so.
In condizioni normali, tali file di configurazione ulteriori, sono vuoti, oppure sono commentati completamente, rimanendo a disposizione per la definizione di funzionalità particolari.
Per poter mettere mano, concretamente, alla configurazione del sistema PAM, occorre conoscere i moduli e il loro utilizzo. I moduli principali sono descritti nel documento The Linux-PAM system administrators' guide, annotato alla fine del capitolo, ma altri moduli possono aggiungersi per scopi specifici. Dovrebbero essere disponibili anche delle pagine di manuale, corrispondenti ai nomi dei moduli (senza l'estensione .so); per esempio pam_unix(8), pam_deny(8),... Nelle sezioni successive vengono descritti solo alcuni tra i moduli più semplici.
|
Bisogna ricordare che la modifica della configurazione del sistema PAM è sempre molto delicata, perché si corre il rischio di impedire l'accesso o di consentirlo indiscriminatamente, o comunque di gestirlo secondo criteri non desiderati. |
Il modulo costituito dal file di libreria pam_warn.so consente di eseguire un'annotazione nel registro di sistema e può essere associato a tutte le fasi (auth, account, password e session). Per esempio si potrebbe utilizzare una direttiva come quella seguente:
|
Quando la direttiva viene presa in considerazione, si ottiene un'annotazione nel registro di sistema, simile a quella seguente:
|
Naturalmente, altri moduli trasmettono già informazioni sufficienti nel registro di sistema e rendono normalmente inutile l'uso di pam_warn.so.
Il modulo costituito dal file di libreria pam_permit.so consente l'accesso in ogni circostanza; pertanto va usato solo per fare degli esperimenti. Può essere associato a tutte le fasi (auth, account, password e session). Per esempio, all'inizio del file /etc/pam.d/login, prima delle altre direttive, potrebbe apparire quella seguente:
|
Così facendo, dai terminali comuni, sarebbe consentito l'accesso a qualunque utente, senza la richiesta di alcuna parola d'ordine (in altri termini, il programma login non procederebbe con alcuna richiesta di parola d'ordine). Ovviamente, una direttiva del genere, può essere utile concretamente solo quando si vuole specificare che la presenza di risultati indeterminati, precedenti, devono portare comunque a un risultato finale positivo.
Il modulo relativo al file pam_deny.so è l'opposto di pam_permit.so, in quanto dà sempre un esito negativo. Anche questo modulo può essere usato per tutte le fasi (auth, account, password e session). Il suo uso più probabile riguarda il file /etc/pam.d/other, quando si vogliono escludere gli accessi che non siano stati previsti espressamente attraverso altri file:
|
Il modulo relativo al file pam_exec.so consente di eseguire un programma e di tenere conto dell'esito dello stesso. Può essere usato per tutte le fasi (auth, account, password e session). Nella documentazione del modulo si fa l'esempio seguente che è particolarmente significativo:
|
In questo caso, quando viene presa in considerazione la direttiva si tratta di una modifica di una parola d'ordine, quindi l'azione associata al modulo consiste nell'eseguire il comando make -C /var/yp. In pratica, in questo modo, quando si cambia la parola d'ordine vengono aggiornati anche i file del NIS, presumibilmente per la condivisione delle utenze attraverso la rete.
Si osservi nell'esempio l'uso della parola chiave optional, per garantire che il risultato del comando eseguito non abbia effetto sul processo di modifica della parola d'ordine. Inoltre, l'opzione seteuid serve sostanzialmente a far sì che il comando (make -C /var/yp) venga eseguito con i privilegi dell'utente root.
Il modulo relativo al file pam_unix.so consente di riprodurre il sistema di verifica e autenticazione tradizionale dei sistemi UNIX, con i file /etc/passwd e /etc/shadow (se la gestione delle parole d'ordine oscurate è attiva). Può essere usato per tutte le fasi (auth, account, password e session).
A titolo di esempio, un file /etc/pam.d/login ridotto all'osso potrebbe avere il contenuto seguente:
|
Questo modulo prevede l'uso di diverse opzioni e di norma ne vengono usate alcune, soprattutto per garantire che le parole d'ordine siano presenti e rispettino alcuni criteri minimi di sicurezza. A ogni modo, si veda la pagina di manuale pam_unix(8).
Andrew G. Morgan, The Linux-PAM system administrators' guide
<http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html>
1) Linux-PAM licenza in stile BSD che può trasformarsi in GNU GPL
2) La gerarchia che parte dalla directory /usr/ tipica, potrebbe essere contenuta in un disco diverso da quello che contiene quella principale; pertanto, se all'avvio ci sono delle difficoltà e non si può innestare la gerarchia /usr/, si rischia di non poter usare il sistema perché mancano le librerie PAM.
Appunti di informatica libera 2008.11.27.00.26 anteprima --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com> <http://informaticalibera.net> Edizione di prova: si prega di segnalare i difetti.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome moduli_pam.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]