16.2. Configurazione PAM per sshd

Per illustrare i meccanismi dietro le quinte di PAM, verrà preso come esempio pratico la configurazione PAM per sshd:

Esempio 16.1. Configurazione PAM per sshd


#%PAM-1.0 
auth     include        common-auth 
auth     required       pam_nologin.so 
account  include        common-account 
password include        common-password 
session include        common-session 
# Abilitare la riga seguente per ottenere supporto resmgr per 
# le sessioni ssh (vedere /usr/share/doc/packages/resmgr/README.SuSE) 
#session  optional      pam_resmgr.so nometty_fittizio 

La configurazione PAM tipica per un'applicazione (sshd in questo caso) contiene 4 istruzioni "include" relative ai file di configurazione di 4 tipi di modulo: common-auth, common-account, common-password e common-session. Questi 4 file contengono la configurazione di default per ciascun tipo di modulo. Includendoli, invece di invocare ciascun modulo separatamente per ciascuna applicazione PAM, si ottiene automaticamente una configurazione PAM aggiornata in caso di modifiche dei valori di default da parte dell'amministratore. In precedenza, in caso di modifiche del PAM o di installazione di nuove applicazioni, era necessario modificare manualmente tutti i file di configurazione per tutte le applicazioni. L'attuale configurazione PAM è costituita da file di configurazione centrali e tutte le modifiche vengono automaticamente ereditate dalla configurazione PAM di ciascun servizio.

Il file con istruzione "include" (common-auth) invoca 2 moduli di tipo auth: pam_env e pam_unix2. Vedere l'Esempio 16.2, "Configurazione di default per la sezione auth".

Esempio 16.2. Configurazione di default per la sezione auth


auth    required        pam_env.so
auth    required        pam_unix2.so

Il primo, pam_env, carica il file /etc/security/pam_env.conf per impostare le variabili d'ambiente come specificato nel file stesso. Questa operazione è utile per impostare la variabile DISPLAY sul valore corretto, poiché il modulo pam_env indica l'ubicazione da cui avviene il login. Il secondo, pam_unix2, verifica il nome di login e parola d'ordine dell'utente a fronte dei file /etc/passwd e /etc/shadow.

Al termine della corretta invocazione dei moduli specificati in common-auth, un terzo modulo denominato pam_nologin accerta l'esistenza del file /etc/nologin. Se l'esito è positivo, nessun utente eccetto root potrà effettuare il login. L'intero stack dei moduli auth viene elaborato prima che giunga risposta a sshd riguardo il risultato del login. Dato che tutti i moduli dello stack contengono il flag di controllo required, devono tutti essere elaborati senza errori prima che venga inviato il risultato positivo a sshd. Se uno dei moduli restituisce un errore, l'intero stack del modulo viene comunque elaborato e solo dopo giunge la notifica a sshd riguardo il risultato negativo.

Al termine dell'elaborazione corretta di tutti i moduli di tipo auth, viene elaborata un'altra istruzione "include", in questo caso quella nell'Esempio 16.3, "Configurazione di default per la sezione account". Il tipo common-account contiene un solo modulo, pam_unix2. Se il file pam_unix2 conferma l'esistenza del risultato, sshd ne viene notificato e inizia l'elaborazione dello stack di moduli successivo (password), descritto nell'Esempio 16.4, "Configurazione di default per la sezione password".

Esempio 16.3. Configurazione di default per la sezione account


account required        pam_unix2.so

Esempio 16.4. Configurazione di default per la sezione password


password required       pam_pwcheck.so  nullok
password required       pam_unix2.so    nullok use_first_pass use_authtok
#password required      pam_make.so     /var/yp

Anche in questo caso, la configurazione PAM implica solo un'istruzione "include" relativa alla configurazione di default per i moduli password ubicati in common-password. Questi moduli devono essere correttamente completati (flag di controllo required) ogni volta che l'applicazione richiede la modifica del token di autenticazione. La modifica di una parole d'ordine o di altro token di autenticazione richiede una verifica di sicurezza. Questa operazione viene svolta dal modulo pam_pwcheck. Il modulo pam_unix2 utilizzato successivamente ricava sia la vecchia parola d'ordine che quella nuova dal modulo pam_pwcheck, in modo che l'utente non debba essere riautenticato. Questo metodo impedisce i tentativi di evitare le verifiche svolte da pam_pwcheck. I moduli di tipo password devono essere utilizzati ogni volta che i moduli precedenti di tipo account o auth sono configurati per verificare una parola d'ordine scaduta.

Esempio 16.5. Configurazione di default per la sezione session


session required        pam_limits.so
session required        pam_unix2.so

Nell'ultima fase, i moduli di tipo session, raccolti nel file common-session, vengono invocati per configurare la sessione in base alle impostazioni dell'utente in questione. L'ulteriore elaborazione di pam_unix2 non ha conseguenze pratiche a causa dell'opzione none specificata nel relativo file di configurazione per questo modulo pam_unix2.conf. Il modulo pam_limits carica il file /etc/security/limits.conf contenente i limiti di utilizzo di alcune risorse di sistema. I moduli session vengono di nuovi invocati quando l'utente esegue il logout.