[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 135.   Moduli PAM

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 135.1. Riepilogo dei file e delle directory per la gestione del sistema PAM.

Nome Descrizione
/lib/libpam.so Libreria dinamica che consente l'uso dei moduli PAM.
/etc/pam.d/ Directory contenente la configurazione dei servizi di autenticazione PAM.
/etc/pam.conf File di configurazione obsoleto.
/lib/security/ Directory contenente i file di libreria del sistema PAM.
/etc/security/ Directory contenente la configurazione dei moduli PAM (dei file di libreria), contenuti fisicamente nella directory /lib/security/.

135.1   Servizi 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.

135.2   File di configurazione e moduli

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 135.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 135.4. Esempio del file /etc/pam.d/login.

auth       requisite  pam_securetty.so
auth       required   pam_nologin.so
auth       required   pam_env.so
auth       required   pam_unix.so nullok
account    required   pam_unix.so
session    required   pam_unix.so
session    optional   pam_lastlog.so
session    optional   pam_motd.so
session    optional   pam_mail.so standard noenv
password   required   pam_unix.so nullok obscure min=4 max=8

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.

Parola chiave Descrizione
auth
Verifica l'identità dell'utente, eventualmente attraverso la richiesta di una parola d'ordine oppure attraverso altri metodi di autenticazione.
account
Verifica lo stato dell'utenza, che può risultare attiva, scaduta, inattiva o disabilitata, solitamente secondo le informazioni provenienti dal file /etc/shadow.
password
Si utilizza per controllare la modifica della parole d'ordine, per esempio per imporre che questa non sia troppo banale.
session
Questo contesto permette di definire delle azioni da compiere nel momento dell'accesso, oppure al momento della sua conclusione. Osservando l'esempio che è stato proposto, si può intendere intuitivamente la richiesta di informare l'utente sull'ultimo accesso, di mostrare il messaggio del giorno e di informare sulla presenza di messaggi di posta elettronica.

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.

Parola chiave Descrizione
required
Rappresenta un controllo indispensabile, attraverso il quale si pretende di ottenere un esito soddisfacente. Tuttavia, l'insuccesso nell'autenticazione, che porta comunque a un risultato finale negativo, non conclude immediatamente la procedura, in modo da non consentire all'utente di comprendere dove si sia verificato il problema.
requisite
Rappresenta un controllo indispensabile, attraverso il quale si pretende di ottenere un esito soddisfacente. A differenza di required, in questo caso l'insuccesso fa concludere immediatamente la procedura (logicamente con un risultato finale negativo).
sufficient
Rappresenta un controllo sufficiente. In pratica, se prima di questo controllo non si sono verificati problemi, un esito soddisfacente conclude la procedura con un'autenticazione corretta. Al contrario, un esito non soddisfacente determina solo un risultato temporaneamente indeterminato. Naturalmente, se si tratta dell'ultimo risultato disponibile, ciò corrisponde a un risultato negativo (in quanto non positivo).
optional
Rappresenta un controllo opzionale, nel quale un esito non soddisfacente dà soltanto un risultato indeterminato.
Si usa questa modalità di controllo quando il modulo PAM serve per compiere delle operazioni che possono fallire senza però pregiudicare la sicurezza.

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.

Parola chiave Espressione equivalente
required
[success=ok new_authok_reqd=ok ignore=ignore default=bad]
requisite
[success=ok new_authok_reqd=ok ignore=ignore default=die]
sufficient
[success=done new_authok_reqd=done default=ignore]
optional
[success=ok new_authok_reqd=ok default=ignore]

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 135.8 rappresenta il contenuto di questo file quando si vuole garantire un sistema minimo di autenticazione, secondo i canoni tradizionali.

Listato 135.8. Un file /etc/pam.d/other per consentire l'accesso in mancanza di altro.

auth     required       pam_unix.so
account  required       pam_unix.so
password required       pam_unix.so
session  required       pam_unix.so

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 135.9.

Listato 135.9. Un file /etc/pam.d/other per impedire l'accesso quando manca una configurazione specifica.

auth     required       pam_deny.so
account  required       pam_deny.so
password required       pam_deny.so
session  required       pam_deny.so

135.3   Verifica nel registro del sistema

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:

Oct 21 18:07:30 dinkel PAM_unix[591]: check pass; user unknown
Oct 21 18:07:30 dinkel PAM_unix[591]: authentication failure; \
  \LOGIN(uid=0) -> tizio for login service Oct 21 18:07:33 dinkel login[591]: FAILED LOGIN (1) on `tty3' \
  \FOR `UNKNOWN', Authentication service cannot retrieve \
  \authentication info.

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.

135.4   Configurazione particolareggiata dei moduli

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.

135.5   Descrizione di alcuni moduli

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.

135.5.1   Modulo «pam_warn.so»

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:

auth  required  pam_warn.so

Quando la direttiva viene presa in considerazione, si ottiene un'annotazione nel registro di sistema, simile a quella seguente:

Nov  5 20:00:39 127 login[3702]: pam_warn(login:auth): \
  \function=[pam_sm_authenticate] service=[login] terminal=[tty4] \
  \user=[tizio] ruser=[<unknown>] rhost=[]

Naturalmente, altri moduli trasmettono già informazioni sufficienti nel registro di sistema e rendono normalmente inutile l'uso di pam_warn.so.

135.5.2   Modulo «pam_permit.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:

auth  sufficient  pam_permit.so

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.

135.5.3   Modulo «pam_deny.so»

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:

auth      required  pam_deny.so
account   required  pam_deny.so
password  required  pam_deny.so
session   required  pam_deny.so

135.5.4   Modulo «pam_exec.so»

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:

password  optional  pam_exec.so seteuid make -C /var/yp

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.

135.5.5   Modulo «pam_unix.so»

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:

auth      required      pam_unix.so
account   required      pam_unix.so
password  required      pam_unix.so
session   required      pam_unix.so

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).

135.6   Riferimenti


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 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


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] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory