PAM

Da Andreabont's Wiki.

Il Pluggable Authentication Modules (PAM) è un sistema per centralizzare l'autenticazione nei sistemi unix-like e pensato per essere facilmente estensibile tramite l'uso di moduli.

Interfaccia del modulo

Esistono quattro tipi di interfacce di moduli PAM che permettono di controllare l'accesso a determinati servizi e sono correlati ad aspetti diversi del processo di autorizzazione:

Interfaccia Significato
auth Questa interfaccia del modulo autentica l'uso. Per esempio, esso richiede e verifica la validità di una password. I moduli con questa interfaccia possono anche impostare delle credenziali come l'appartenenza al gruppo o i ticket di Kerberos. Solitamente è in forma di white list.
account Questo modulo esegue un controllo per verificare che l'accesso sia abilitato per quei casi che non necessitano di autenticazione diretta. Per esempio, controlla se un account è scaduto o se l'utente ha il permesso di collegarsi ad una determinata ora del giorno. Solitamente è in forma di black list.
password Questa interfaccia imposta e verifica le password. Solitamente è in forma di white list.
session Questa interfaccia configura e gestisce le sessioni dell'utente. I moduli con questa interfaccia, possono effettuare ulteriori compiti richiesti per autorizzare l'accesso, per esempio montando la home directory dell'utente o rendendo disponibile la sua mailbox.

Control Flag

Quando vengono controllati, tutti i moduli PAM generano un risultato positivo o negativo. I Control flag indicano a PAM cosa fare con il risultato. Poiché i moduli possono essere ordinati in determinati modi, i control flag permettono di stabilire l'importanza di un risultato positivo o negativo di un particolare modulo per l'autenticazione dell'utente al servizio. L'ordine con il quale i moduli required sono chiamati non è importante. I control flag sufficient e requisite invece, conferiscono una certa importanza all'ordine.

Flag Esteso Significato
required [success=ok new_authtok_reqd=ok ignore=ignore default=bad] Il modulo deve superare il controllo perché l'autenticazione sia autorizzata. Se il controllo di un modulo required fallisce, l'utente non ne viene avvisato finché tutti gli altri moduli dello stesso tipo non sono stati controllati.
requisite [success=ok new_authtok_reqd=ok ignore=ignore default=die] Il modulo deve superare la verifica perché l'autenticazione vada a buon fine. Tuttavia, se la verifica di un modulo requisite fallisce, l'utente ne viene immediatamente avvisato tramite un messaggio che richiama il primo modulo required o requisite.
sufficient [success=done new_authtok_reqd=done default=ignore] Il risultato del modulo viene ignorato se fallisce. Tuttavia, se il risultato del modulo con opzione sufficient supera la verifica e nessun modulo con opzione required che lo precedono abbia fallito, non viene richiesto nessun altro risultato e l'utente viene autenticato.
optional [success=ok new_authtok_reqd=ok default=ignore] Il risultato del modulo viene ignorato. L'unico caso in cui un modulo con opzione optional è necessario ai fini dell'autenticazione è quando non ci sono altri moduli che si riferiscono all'interfaccia.

Versione estesa

[ritorno=azione ritorno=azione ...]

Possibili valori di ritorno

success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy,authtok_disable_aging, try_again, ignore, abort, authtok_expired,module_unknown, bad_item, conv_again, incomplete, and default.

Possibili azioni da intraprendere

Azione Descrizione
ignore Il valore di ritorno non influisce.
bad Viene segnalato come evento negativo, il controllo continua.
die Il controllo termina rifiutando l'autenticazione.
ok Viene segnalato come evento positivo, il controllo continua.
done Il controllo termina concedendo l'autenticazione.
reset Cancella ogni risultato intermedio precedente.

Lista dei moduli più usati

Modulo Descrizione
pam_deny.so Nega sempre l'accesso.
pam_permit.so Permette sempre l'accesso.
pam_unix.so Autenticazione standard su UNIX
pam_ldap.so Autenticazione tramite LDAP
pam_sss.so Autenticazione tramite SSSD
pam_rootok.so Permette l'accesso se il Real UID è quello di root.
pam_wheel.so Permette l'accesso se l'utente fa parte del gruppo wheel.
pam_securetty.so Permette l'accesso se l'utente è loggato ad una tty considerata sicura. (definita in /etc/securetty)
pam_shells.so Permette l'accesso se l'utente sta usando una shell considerata sicura. (definita in /etc/shells)
pam_access.so Permette accesso in base alla configurazione in /etc/security/access.conf
pam_env.so Al login setta le variabili d'ambiente definite in /etc/security/pam_env.conf
pam_tally2.so Impedisce l'accesso dopo un definito numero di tentativi falliti, ripristina dopo un definito periodo di tempo.
pam_succeed_if.so Permette l'accesso se vengono verificate le codizioni specificate negli argomenti. (Le condizioni verificano valori dell'account di chi si vuole loggare)
pam_cracklib.so Esegue controlli sulla robustezza della password. (Interfaccia "password")
pam_tty_audit.so Abilita l'audit sulla tty dell'utente. (Interfaccia "session")
pam_echo.so Stampa un messaggio a schermo.

File di configurazione

Ci sono diversi file di configurazione per PAM, ogniuno dedicato ad un'aspetto della sicurezza del sistema. La sintassi di questi file è molto semplice:

<Interfaccia del modulo>  <Control Flag>   <Nome del modulo>   <Argomenti>

Esempio:

auth      required  pam_securetty.so
auth      required  pam_unix.so shadow nullok
auth      required  pam_nologin.so

account   required  pam_unix.so

password  required  pam_cracklib.so retry=3
password  required  pam_unix.so shadow nullok use_authtok

session   required  pam_unix.so