PAM - Politica di definizione delle password

Come e' risaputo, fornire esclusivamente indicazioni ai propri utenti riguardanti come debbano definire le proprie password, credo sia pressoche' inutile, poiche' avendone la possibilita' essi continueranno ad usare password semplici quali nomi di persona, date di nascita, squadra del cuore e cosi' via. L'unica soluzione valida e' fare in modo che siano obbligati a scegliersi delle password decenti.
Una simile soluzione puo' essere imolementata utilizzando Pluggable Authentication Modules, ed il modulo pam_cracklib.
Tale modulo non e' presente al termine dell'installazione base del sistema, e quindi sara' necessario installarlo tramite il comando apt-get install libpam-cracklib. Tra le dipendenze viene installato anche un dizionario, che potra' essere utilizzato per impedire la scelta di password uguali alle parole che lo compongono. Per qualche oscuro motivo, pero', anziche' un dizionario inglese od italiano sulla mia debian sarge e' ne e' stato installato uno in catalano.
E' quindi necessario rimuoverlo con un comando apt-get remove wcatalan, ed al suo posto ho installare i dizionari desiderati. Nel mio caso ho optato quelli italiano, inglese ed americano:  apt-get install witalian wamerican wenglish.
Perche' il modulo am_cracklib possa farvi riferimento deve essere editato il file /etc/cracklib.conf, modificando la riga cracklib_dictpath_src:

    cracklib_dictpath_search=”/usr/share/dict/italian
    /usr/share/dict/american-english /usr/share/dict/british-english
    /usr/share/dict/extra.words”

L'opzione modificata consente di specificare dei files contenenti delle liste di parole, che potranno essere aggiunti al database della libreria cracklib con il comando update-cracklib -a -r /etc/cracklib/cracklib.conf.
La scelta dell'utilizzo di dizionari di diverse lingue ritenga sia giustificata dalla necessita' di impedire che gli utenti possano utilizzare parole dei dizionari inglese ed americano come password. Volendo essere veramente paranoici si potrebbero aggiungere anche altri dizionari quali quello francese, tedesco ecc.
Un ulteriore precauzione presa, puo' essere la creazione del file /usr/share/dict/extra.words, anch'esso richiamato in cracklib.conf, al cui interno andranno definite tutte quelle parole non appartenenti al vocabolario, ma che potrebbero essere facilmente utilizzate come password, come ad esempio nomi di squadre di calcio, personaggi dei fumetti ecc.
Il modulo pam_cracklib si basa sulla libreria crackLib, per controllare le password e capire se rispettano determinati criteri di sicurezza.
Nel mio caso la politica prescelta per la definizione delle password e' stata la seguente:

- lunghezza di almeno 8 caratteri;
- hash md5 della password in /etc/shadow;
- presenza di almeno una lettera maiuscola;
- presenza di almeno un numero;
- almeno tre caratteri diversi rispetto alla precedente password
- verifica che la parola non appartenga ai vocabolari definiti;
- verifica che la parola inserita non sia una delle password utilizzate precedentemente

Per ottenere questo comportamento e' stato modificato nel modo seguente il file /etc/pam.d/passwd:

    password    required    pam_cracklib.so    dcredit=-1   ucredit=-1   minlen=8   difok=3
    password    required    pam_unix.so    obscure   md5   use_authtok   remember=20

Entrambe le regole riguardano il tipo di modulo password, ovvero quello preposto all'aggiornamento dei token di autenticazione relativi all'utente. Poiche' si vuole che entrambe le regole vengano onorate il flag di controllo e' posto a required, in modo che la richiesta del servizio (nel caso il programma passwd) fallisca in caso l'azione di almeno uno dei moduli non abbia l'esito richiesto.
Nella prima regola viene richiamato il modulo pam_cracklib con i parametri dcredit ed ucredit pari a -1 e minlen uguale a 8. Tale regola richiede che la lunghezza della password sia di almeno 8 caratteri e contenente almeno un numero ed una lettera maiuscola.
I valori negativi dei parametri dcredit ed ucredit definiscono appunto i primi due requisiti,  disabilitando pero' il sistema di attribuzione dei crediti alla password. In caso contrario, abilitando il sistema di crediti per ogni numero e ogni lettera maiuscola verra' calcolato un credito pari rispettivamente al valore di dcredit ed ucredit. In tale caso la password verrebbe accettata se la sua lunghezza fosse pari almeno alla differenza tra minlen e la somma di questi crediti.
La seconda regola invece utilizza il modulo pam_unix. Il parametro obscure dovrebbe servire per eseguire una ulteriore serie di controlli, non specificati pero' nella documentazione; md5 indica di memorizzare le password usando un hash md5 anziche' la funzione crypt, ed infine use_authtok obbliga pam_unix ad impostare automaticamente come nuova password quella gia' accettata dal precedente modulo nello stack (nel caso pam_cracklib). Non utilizzando quest'ultima opzione, all'utente verrebbe chiesto di cambiare la password due volte, la prima tramite il modulo pam_cracklib e la seconda tramite il modulo pam_unix.
Inoltre, non viene impostata l'opzione nullok, che avrebbe consentito il cambio di password anche nel caso la password attuale fosse stata vuota. In caso dovesse presentarsi tale necessita', root e' comunque in grado di effettuare il cambio, poiche' queste regole non debbono essere onorate nel suo caso.
Per verificare il funzionamento della politica adottata si puo' provare ad impostare alcune password  prive di numeri o lettere maiuscole, troppo corte, troppo ripetitive (come ad esempio asdasdasd)  o appartenenti al vocabolario. Il sistema dovrebbe impedire la modifica, riportando rispettivamente i seguenti avvisi: BAD PASSWORD: is too simple, BAD PASSWORD: is too short, BAD PASSWORD: it does not contain enough different characters, e BAD PASSWORD: it is based on a dictionary word.
Un'altra caratteristica utile nella politica di definizione delle password potrebbe essere anche quella di impedire il riutilizzo di password usate in precedenza, poiche', in caso contrario buona parte degli utenti, per pigrizia, userebbero sempre le solite due o tre password cambiandole ciclicamente.
Tramite il modulo pam_unix e' possibile memorizzare le ultime password degli utenti nel file /etc/security/opasswd, in modo che al cambio di password si possa controllare che la parola scelta non sia compresa in questo elenco. Il numero di password memorizzate puo' essere impostato con il parametro remember di tale modulo.
In caso non esista il file opasswd e' necessario crearlo con un touch /etc/security/opasswd, pena il non funzionamento del parametro remember.
Anche con questo accorgimento, pero', la pigrizia dell'utente potrebbe ancora avere ancora vita troppo facile, ad esempio cambiando solo una lettera od un numero dalla password precedente. Per impedire un comportamento simile si potrebbe puo' richiedere che che la nuova password contenga un numero minimo di caratteri diversi rispetto alla precedente. Tale caratteristica e' gestibile tramite il parametro difok del modulo pam_cracklib.
Nell'esempio riportato viene impedito il riutilizzo di una delleultime 20 password, e si richiede il cambio di almento tre caratteri nelle nuove parole chiave. I valori specificati per difok e remember in /etc/pam.d/passwd sono quindi stati rispettivamente 3 e 20.

Privacy Policy