Autenticazione via token con PAM USB: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (Rimozione stub - nessuna modifica)
(Aggiornamento per disponibilità pacchetti in Debian Wheezy e Sid; e riformattazione)
Riga 3: Riga 3:
== Introduzione ==
== Introduzione ==


L'autenticazione a un servizio del sistema, che si tratti del login a una console o un display manager oppure di una qualunque operazione per cui siano necessari determinati privilegi (su, sudo, ecc... ), è gestita in maniera centralizzata dalla libreria PAM e solitamente effettuata mediante la richiesta di una parola chiave segreta (''password'') associata all'utente.
L'autenticazione a un servizio del sistema, che si tratti del login a una console o un display manager oppure di una qualunque operazione per cui siano necessari determinati privilegi (<code>su</code>, <code>sudo</code>, ecc... ), è gestita in maniera centralizzata dalla libreria PAM e solitamente effettuata mediante la richiesta di una password associata all'utente.


PAM presenta tuttavia un'architettura molto flessibile, che può essere estesa da altri moduli software. In particolare '''libpam-usb''' consente l'autenticazione via token grazie a una pendrive su porta USB, sulla quale verrà conservata una one-time password aggiornata a ogni nuova autenticazione. Il modulo una volta installato può essere configurato in modo sia da rappresentare un ulteriore requisito per l'autenticazione, sia da sostituire la richiesta di password per una maggiore comodità.
PAM presenta tuttavia un'architettura molto flessibile, che può essere estesa da altri moduli software. In particolare <code>libpam-usb</code> consente l'autenticazione via token grazie a una pendrive su porta USB, sulla quale verrà conservata una one-time password aggiornata a ogni nuova autenticazione. Il modulo una volta installato può essere configurato in modo sia da rappresentare un ulteriore requisito per l'autenticazione, sia da sostituire la richiesta di password per una maggiore comodità.


L'uso combinato di due diverse forme di autenticazione è molto diffuso in ambienti professionali dove la sicurezza ricopre un'importanza critica, e l'uso di ''libpam-usb'' e di una comune chiavetta USB possono rappresentare una soluzione molto economica e alla portata di tutti.
L'uso combinato di due diverse forme di autenticazione è molto diffuso in ambienti professionali dove la sicurezza ricopre un'importanza critica, e l'uso di <code>libpam-usb</code> e di una comune chiavetta USB possono rappresentare una soluzione molto economica e alla portata di tutti.


Per maggiori dettagli riguardo PAM e ''libpam-usb'' rimando all'articolo di pmate e Aki uscito nel [http://e-zine.debianizzati.org/web-zine/numero_4/?page=48 numero 4 dell'e-zine]. In questa guida vedremo solo come cambiare il comportamento di tutto ciò che si appoggia a tale libreria, in modo consistente anche in presenza di aggiornamenti del sistema o uso di altri moduli, senza mai modificare direttamente i file nella directory ''/etc/pam.d'', anche se così si rinuncia a una maggiore possibilità di personalizzazione.
Per maggiori dettagli riguardo PAM e <code>libpam-usb</code> rimando all'articolo di pmate e Aki uscito nel [http://e-zine.debianizzati.org/web-zine/numero_4/?page=48 numero 4 dell'e-zine]. In questa guida vedremo solo come cambiare il comportamento di tutto ciò che si appoggia a tale libreria, in modo consistente anche in presenza di aggiornamenti del sistema o uso di altri moduli, senza mai modificare direttamente i file nella directory <code>/etc/pam.d</code>, anche se così si rinuncia a una maggiore possibilità di personalizzazione.


== Installazione ==
== Installazione ==


Al momento in cui questa guida è scritta è possibile installare PAM USB per mezzo di APT soltanto in '''Debian Squeeze'''. Per via della sua dipendenza da ''HAL'' i pacchetti non sono infatti presenti nelle altre versioni.
Il metodo di installazione varia leggermente tra '''Debian Squeeze''' e le successive '''Wheezy'''/'''Sid''', infatti è stata rimossa la dipendenza da ''HAL'' utilizzando ''UDisks'' e inoltre viene fornito un profilo di default.


Dal sito ufficiale è tuttavia possibile procurarsi la nuova versione (al momento corrente la 0.5), che utilizza ''UDisks'' e risolve i problemi di dipendenza. Vediamo quindi separatamente le due modalità di installazione, la seconda attualmente necessaria per '''Wheezy''' e '''Sid'''.
=== Usando APT con Debian Squeeze ===


L'unico altro requisito è la disponibilità di una penna USB, nella quale verranno salvate le password richieste per l'autenticazione nella sessione successiva. Si può utilizzare la stessa per più utenti, anche se la cosa ha senso unicamente se a tali utenti del sistema corrisponde un unico utente fisico, e anche per più utenti di più sistemi, purché con hostname diverso (e per cui ancor più vale la stessa considerazione).
È sufficiente installare due pacchetti:


{{Suggerimento | Non è necessario riservarla a tale utilizzo e può essere impiegata anche per altro, date le limitate esigenze di memoria di ''libpam-usb'', ma non è una buona idea per la sicurezza inserire il token quando non richiesto per l'autenticazione, in particolar modo se si prevede che la sua presenza sia sufficiente per l'esecuzione di comandi con privilegi di amministrazione.}}
<pre># apt-get install libpam-usb pamusb-tools</pre>
 
Finito! Ora bisogna solo associare la memoria USB agli utenti che si desidera e creare un profilo.
 
=== Usando APT con Debian Wheezy e Sid ===


=== Usando APT ===
Anche per queste distribuzioni è sufficiente installare due pacchetti, solo che <code>pamusb-common</code> sostituisce il precedente <code>pamusb-tools</code>, che in '''Wheezy''' e '''Sid''' è solo un metapacchetto presente per permettere un aggiornamento indolore, quindi installiamo direttamente il primo:


È sufficiente installare due pacchetti:
<pre># apt-get install libpam-usb pamusb-common</pre>


<pre># apt-get install libpam-usb pamusb-tools</pre>
Finito! Ora bisogna solo associare la memoria USB agli utenti che si desidera.


Finito!
Esiste già un profilo di default in tali distribuzioni, il file <code>/usr/share/pam-configs/usb</code> fornito dal pacchetto <code>pamlib-runtime</code>, corrispondente alla '''Alternative mode'''. Pertanto è necessario modificarlo unicamente se si intende scegliere un'altra modalità.


=== Usando il tarball ===
=== Usando il tarball ===


Prima di tutto ci procuriamo l'ultima versione dei sorgenti dal [http://sourceforge.net/projects/pamusb/files sito ufficiale] (al momento della stesura di questa guida si tratta del file ''pam_usb-0.5.0.tar.gz'').
{{Warningbox|Tale metodo non è più necessario, in quanto PAM USB è al momento supportato da tutte le distribuzioni. In futuro questa sezione sarà rimossa, ed è attualmente presente solo per agevolare la rimozione dei pacchetti precedentemente installati.
 
Se si è installato via tarball si consiglia di effettuare la disinstallazione, '''dopo aver disabilitato la richiesta del modulo''' se si è usata una modalità diversa dalla ''Alternative'', seguendo la sezione relativa di questa guida. Poi è sufficiente installare nuovamente i pacchetti ora disponibili direttamente dai repository di Debian, per poter usufruire degli aggiornamenti automatici.}}
 
Prima di tutto ci procuriamo l'ultima versione dei sorgenti dal [http://sourceforge.net/projects/pamusb/files sito ufficiale] (al momento della stesura di questa guida si tratta del file <code>pam_usb-0.5.0.tar.gz</code>).


Una volta scaricato il pacchetto, lo estraiamo con:
Una volta scaricato il pacchetto, lo estraiamo con:
Riga 37: Riga 45:
<pre>$ tar xvzf pam_usb-*.tar.gz</pre>
<pre>$ tar xvzf pam_usb-*.tar.gz</pre>


Poi installiamo o ci assicuriamo siano già presenti i pacchetti base per la compilazione con ''make'' (''build-essential'' e ''pkg-config''), i pacchetti ''dev'' richiesti per la compilazione del modulo ''pamusb'' e quelli necessari per avviare l'eseguibile ''pamusb-conf''. È sufficiente il seguente comando:
Poi installiamo o ci assicuriamo siano già presenti i pacchetti base per la compilazione con <code>make</code> (<code>build-essential</code> e <code>pkg-config</code>), i pacchetti ''dev'' richiesti per la compilazione del modulo '''pamusb''' e quelli necessari per avviare l'eseguibile <code>pamusb-conf</code>. È sufficiente il seguente comando:


<pre># apt-get install build-essential pkg-config \
<pre># apt-get install build-essential pkg-config \
Riga 43: Riga 51:
     libxml2 udisks pmount python python-gobject python-dbus</pre>
     libxml2 udisks pmount python python-gobject python-dbus</pre>


Infine ci posizioniamo nella cartella in cui abbiamo estratto il tarball, compiliamo il modulo con ''make'' e (con privilegi di amministrazione) lo installiamo; il tutto con:
Infine ci posizioniamo nella cartella in cui abbiamo estratto il tarball, compiliamo il modulo con <code>make</code> e (con privilegi di amministrazione) lo installiamo; il tutto con:


<pre>$ cd pam_usb-*/  &&  make  &&  su -c 'make install'</pre>
<pre>$ cd pam_usb-*/  &&  make  &&  su -c 'make install'</pre>


A questo punto - e se tutto si è concluso con successo - è possibile rimuovere sia il tarball sia la cartella estratta, in quanto non più necessarie. Per semplificare la procedura di rimozione, e non dover riscaricare l'archivio nuovamente, è però consigliabile conservare almeno il file ''Makefile''.
A questo punto - e se tutto si è concluso con successo - è possibile rimuovere sia il tarball sia la cartella estratta, in quanto non più necessarie. Per semplificare la procedura di rimozione, e non dover riscaricare l'archivio nuovamente, è però consigliabile conservare almeno il file <code>Makefile</code>.


== Configurazione di pamusb ==
== Configurazione di pamusb ==
L'unico requisito è la disponibilità di una penna USB, nella quale verranno salvate le password richieste per l'autenticazione nella sessione successiva.
Si può utilizzare la stessa per più utenti, anche se la cosa ha senso unicamente se a tali utenti del sistema corrisponde un unico utente fisico, e anche per più utenti di più sistemi, purché con hostname diverso (e per cui ancor più vale la stessa considerazione).
{{Suggerimento | Non è necessario riservarla a tale utilizzo e può essere impiegata anche per altro, date le limitate esigenze di memoria di ''libpam-usb'', ma non è una buona idea per la sicurezza inserire il token quando non richiesto per l'autenticazione, in particolar modo se si prevede che la sua presenza sia sufficiente per l'esecuzione di comandi con privilegi di amministrazione.}}


Inserire la pendrive nella porta USB e darle un nome che ci consenta di identificarla, inserendolo al posto di NOME:
Inserire la pendrive nella porta USB e darle un nome che ci consenta di identificarla, inserendolo al posto di NOME:
<pre># pamusb-conf --add-device="NOME"</pre>
<pre># pamusb-conf --add-device="NOME"</pre>
Verrà richiesta una conferma e si potrà scegliere una qualunque tra le memorie USB collegate, che sarà aggiunta al file ''/etc/pamusb.conf''.
Verrà richiesta una conferma e si potrà scegliere una qualunque tra le memorie USB collegate, che sarà aggiunta al file <code>/etc/pamusb.conf</code>.


Aggiungere gli utenti del sistema che si desidera autenticare tramite il dispositivo, ripetendo il seguente comando per ciascuno di loro (con il relativo nome utente al posto di NOME_UTENTE):
Aggiungere gli utenti del sistema che si desidera autenticare tramite il dispositivo, ripetendo il seguente comando per ciascuno di loro (con il relativo nome utente al posto di NOME_UTENTE):
Riga 59: Riga 73:
Nuovamente verrà richiesta una conferma, e in caso si siano aggiunte più chiavette si potrà scegliere quale associare all'utente scelto. Per una guida passo-passo alla configurazione si veda al solito l'e-zine.  
Nuovamente verrà richiesta una conferma, e in caso si siano aggiunte più chiavette si potrà scegliere quale associare all'utente scelto. Per una guida passo-passo alla configurazione si veda al solito l'e-zine.  


Se si desidera disabilitare l'output, che in caso di autenticazione via console o terminale rende chiaro se il modulo USB è stato autenticato o meno, modificare con privilegi di amministrazione i defaults nel file ''/etc/pamusb.conf'', aggiungendoci la riga con quiet:
Se si desidera disabilitare l'output, che in caso di autenticazione via console o terminale rende chiaro se il modulo USB è stato autenticato o meno, modificare con privilegi di amministrazione i defaults nel file <code>/etc/pamusb.conf</code>, aggiungendoci la riga con ''quiet'':
<pre><defaults>
<pre><defaults>
     <quiet>true</quiet>
     <quiet>true</quiet>
Riga 65: Riga 79:
È possibile anche disabilitarlo solo per alcuni utenti e solo per alcuni servizi.
È possibile anche disabilitarlo solo per alcuni utenti e solo per alcuni servizi.


Ora ''pamusb'' è configurato, resta da modificare soltanto il comportamento dei file di configurazione di PAM affinché il modulo sia richiamato.
Ora '''pamusb''' è configurato, resta da modificare soltanto il comportamento dei file di configurazione di PAM affinché il modulo sia richiamato.


== Creazione di un profilo ==
== Creazione di un profilo ==


Scelta la policy da adottare tra quelle presentate nelle sottosezioni successive, si tratta di creare con privilegi di amministrazione e il proprio editor preferito il file '''/usr/share/pam-configs/usb''' con il contenuto corrispondente.
Se si utilizza '''Debian Wheezy''' o una più recente, si possiede già il profilo per la '''Alternative mode'''. Non è quindi necessario fare alcunché e si può passare direttamente alla fase di test, salvo si voglia un'altra modalità.
 
Se la modalità di default non va bene o si utilizza '''Debian Squeeze''', va scelta la policy da adottare tra quelle presentate nelle sottosezioni successive. Si tratta poi di modificare (o di creare con '''Squeeze''') con privilegi di amministrazione e il proprio editor preferito il file <code>/usr/share/pam-configs/usb</code> con il contenuto scelto.


{{Warningbox | Tutti gli utenti per cui è richiesta - e non solo sufficiente - questa forma di autenticazione devono essere aggiunti a una pendrive USB, oppure non potranno più autenticarsi al sistema. Lo stesso root, se abilitato, non fa eccezione.
{{Warningbox | Tutti gli utenti per cui è richiesta - e non solo sufficiente - questa forma di autenticazione devono essere aggiunti a una pendrive USB, oppure non potranno più autenticarsi al sistema. Lo stesso root, se abilitato, non fa eccezione.
Riga 75: Riga 91:
In caso di problemi per bypassare il modulo l'unico modo sarà durante l'avvio, scegliendo la modalità singolo utente messa a disposizione da ''grub''.}}
In caso di problemi per bypassare il modulo l'unico modo sarà durante l'avvio, scegliendo la modalità singolo utente messa a disposizione da ''grub''.}}


Il file creato costituisce il profilo utilizzato per la generazione automatica dei file di configurazione di default di PAM (''/etc/pam.d/common-*''), che non modificheremo manualmente. Per una veloce introduzione sul suo funzionamento, si consideri a titolo esemplificativo quanto segue:
Il file creato costituisce il profilo utilizzato per la generazione automatica dei file di configurazione di default di PAM (<code>/etc/pam.d/common-*</code>), che non modificheremo manualmente. Per una veloce introduzione sul suo funzionamento, si consideri a titolo esemplificativo quanto segue:


<pre>Name: USB authentication
<pre>Name: USB authentication
Riga 87: Riga 103:


* la prima riga serve per l'identificazione;
* la prima riga serve per l'identificazione;
* ''Default'' indica se il modulo di default è abilitato (l'impostazione manuale effettuata con ''pam-auth-update'' ha priorità su quella di default, ma se non si cambia nulla verrà mantenuta questa) e lo imposteremo sempre su ''yes'';
* <code>Default</code> indica se il modulo di default è abilitato (l'impostazione manuale effettuata con <code>pam-auth-update</code> ha priorità su quella di default, ma se non si cambia nulla verrà mantenuta questa) e lo imposteremo sempre su ''yes'';
* ''Priority'' determina l'ordine in cui verrà caricato il modulo, seguendo un ordinamento decrescente. Considerando che ''pam_unix.so'' che si occupa dell'autenticazione locale mediante richiesta di password ha priorità 256, 257 andrà bene se si vuole che venga richiamato prima il modulo ''pamusb'' mentre 255 altrimenti. In questa guida verrà usato quasi sempre 257;
* <code>Priority</code> determina l'ordine in cui verrà caricato il modulo, seguendo un ordinamento decrescente. Considerando che <code>pam_unix.so</code> che si occupa dell'autenticazione locale mediante richiesta di password ha priorità ''256'', ''257'' andrà bene se si vuole che venga richiamato prima il modulo '''pamusb''' mentre ''255'' altrimenti. In questa guida verrà usato quasi sempre ''257'';
* ''Auth-Type'' può essere ''Primary'' o ''Additional''. Nel primo caso viene eseguito solo se l'autenticazione non è già stata provvista da un altro modulo (purché sufficiente), nel secondo a prescindere ma non contribuirà all'esito dell'autenticazione. Le priorità tra i due tipi sono risolte separatamente e per i nostri usi andrà sempre bene ''Primary'';
* <code>Auth-Type</code> può essere ''Primary'' o ''Additional''. Nel primo caso viene eseguito solo se l'autenticazione non è già stata provvista da un altro modulo (purché sufficiente), nel secondo a prescindere ma non contribuirà all'esito dell'autenticazione. Le priorità tra i due tipi sono risolte separatamente e per i nostri usi andrà sempre bene ''Primary'';
* infine ''Auth'' indica se considerare l'autenticazione del modulo sufficiente (con ''sufficient'') se tutti quelle con priorità maggiore non falliscono, oppure se considerarla un requisito necessario (con ''required'') e richiama il modulo ''pam_usb.so'' (eventualmente passandoci anche dei parametri). È la parte più importante e quella che siamo interessati a modificare.
* infine <code>Auth</code> indica se considerare l'autenticazione del modulo sufficiente (con ''sufficient'') se tutti quelle con priorità maggiore non falliscono, oppure se considerarla un requisito necessario (con ''required'') e richiama il modulo <code>pam_usb.so</code> (eventualmente passandoci anche dei parametri). È la parte più importante e quella che siamo interessati a modificare.


=== Alternative mode ===
=== Alternative mode ===
Riga 134: Riga 150:
Si è impostata una priorità molto maggiore, visto che deve sostituire ogni altra forma di autenticazione locale (che devono avere priorità inferiore a 512).
Si è impostata una priorità molto maggiore, visto che deve sostituire ogni altra forma di autenticazione locale (che devono avere priorità inferiore a 512).


In luogo di ''sufficient'' e ''requisite'' per le due modalità già viste si è utilizzata una forma intermedia, che salta l'esecuzione delle regole rimanenti tanto in caso di successo (''success=done'') che di fallimento (''default=die''), in modo che l'autenticazione dipenda soltanto da questo modulo. Per maggiori dettagli si veda il manuale (''man pam.d'').
In luogo di ''sufficient'' e ''requisite'' per le due modalità già viste si è utilizzata una forma intermedia, che salta l'esecuzione delle regole rimanenti tanto in caso di successo (''success=done'') che di fallimento (''default=die''), in modo che l'autenticazione dipenda soltanto da questo modulo. Per maggiori dettagli si veda il manuale (<code>man pam.d</code>).


=== Custom mode ===
=== Custom mode ===
Riga 151: Riga 167:
     sufficient    pam_usb.so</pre>
     sufficient    pam_usb.so</pre>


''pam_succeed_if.so'' è un modulo che ha successo unicamente se la condizione è soddisfatta, e chiaramente uid è uguale a zero soltanto per l'utente root, mentre è maggiore per tutti gli altri. Al posto di ''sufficient'' e ''required'' si è impostata una policy più complessa, e per un'analisi più dettagliata si rimanda alla pagina di manuale (''man pam.d''), nella quale in caso di fallimento del modulo non succede niente (''default=ignore'') ma se la condizione è soddisfatta vengono saltate un certo numero di righe (''success=N'').
<code>pam_succeed_if.so</code> è un modulo che ha successo unicamente se la condizione è soddisfatta, e chiaramente uid è uguale a zero soltanto per l'utente root, mentre è maggiore per tutti gli altri. Al posto di ''sufficient'' e ''required'' si è impostata una policy più complessa, e per un'analisi più dettagliata si rimanda alla pagina di manuale (<code>man pam.d</code>), nella quale in caso di fallimento del modulo non succede niente (''default=ignore'') ma se la condizione è soddisfatta vengono saltate un certo numero di righe (''success=N'').


Quindi un utente normale soddisferà la prima condizione (''uid > 0'') e salterà una riga (''success=1''), eseguendo direttamente l'ultima che coincide con la ''Alternative mode''. Al contrario root leggerà la seconda riga, corrispondente alla policy per la ''Additional mode''; infatti in caso di successo salterà la terza riga e passerà ai moduli di priorità inferiore (la richiesta di password) mentre in tutti gli altri casi l'autenticazione fallirà (''default=bad''). Impostare ''default=die'' in luogo di ''default=bad'' se si vuole far capire all'utente che il fallimento è dovuto alla mancata autenticazione USB.
Quindi un utente normale soddisferà la prima condizione (''uid > 0'') e salterà una riga (''success=1''), eseguendo direttamente l'ultima che coincide con la '''Alternative mode'''. Al contrario root leggerà la seconda riga, corrispondente alla policy per la '''Additional mode'''; infatti in caso di successo salterà la terza riga e passerà ai moduli di priorità inferiore (la richiesta di password) mentre in tutti gli altri casi l'autenticazione fallirà (''default=bad''). Impostare ''default=die'' in luogo di ''default=bad'' se si vuole far capire all'utente che il fallimento è dovuto alla mancata autenticazione USB.


{{Box | Sudo | È da notare che con sudo verrà usata la policy dipendente dalla password richiesta, di default quella dell'utente e quindi si utilizzerebbe una modalità ''Alternative''.
{{Box | Sudo | È da notare che con <code>sudo</code> verrà usata la policy dipendente dalla password richiesta, di default quella dell'utente e quindi si utilizzerebbe una modalità '''Alternative'''.


Si può però cambiare questo comportamento, sempre che si sia abilitato sudo, aggiungendo ''targetpw'' ai Defaults per mezzo di visudo, in modo che venga richiesta la password dell'amministratore anziché quella dell'utente. Al solito la cosa ha senso solo se a loro corrisponde la stessa persona fisica, altrimenti è meglio dirigersi verso la modalità ''Additional''.
Si può però cambiare questo comportamento, sempre che si sia abilitato <code>sudo</code>, aggiungendo ''targetpw'' ai ''Defaults'' per mezzo di <code>visudo</code>, in modo che venga richiesta la password dell'amministratore anziché quella dell'utente. Al solito la cosa ha senso solo se a loro corrisponde la stessa persona fisica, altrimenti è meglio dirigersi verso la modalità '''Additional'''.


Infine i comandi permessi con il tag ''NOPASSWD:'' saranno eseguibili come sempre senza alcuna forma di autenticazione.}}
Infine i comandi permessi con il tag ''NOPASSWD:'' saranno eseguibili come sempre senza alcuna forma di autenticazione.}}
Riga 167: Riga 183:
<pre># pam-auth-update</pre>
<pre># pam-auth-update</pre>


Se è deselezionata, spuntare la casella di "USB authentication", lasciare le altre come sono e confermare su "Ok". Verranno rigenerati i file con prefisso "''common-''" nella directory ''/etc/pam.d'', richiamati da (quasi) tutti gli altri file di configurazione.
Se è deselezionata, spuntare la casella di "USB authentication", lasciare le altre come sono e confermare su "Ok". Verranno rigenerati i file con prefisso "<code>common-</code>" nella directory <code>/etc/pam.d</code>, richiamati da (quasi) tutti gli altri file di configurazione.




== Test di funzionamento ==
== Test di funzionamento ==


Per controllare se abbiamo fatto giusto, usiamo ''pamusb-check'' e il nome utente da verificare al posto di NOME_UTENTE:
Per controllare se abbiamo fatto giusto, usiamo <code>pamusb-check</code> e il nome utente da verificare al posto di NOME_UTENTE:


<pre># pamusb-check NOME_UTENTE</pre>
<pre># pamusb-check NOME_UTENTE</pre>
Riga 180: Riga 196:
<pre>echo $?</pre>
<pre>echo $?</pre>


Proviamo tutti gli utenti, e in particolare root se utilizziamo una modalità diversa dall'''Alternative''.
Proviamo tutti gli utenti, e in particolare root se utilizziamo una modalità diversa dall\''''Alternative'''.


== Disattivazione ==
== Disattivazione ==


È sufficiente eseguire ''pam-auth-update'':
È sufficiente eseguire '''pam-auth-update''':
<pre># pam-auth-update</pre>
<pre># pam-auth-update</pre>
Deselezionare il modulo "USB authentication" e dare l'Ok.
Deselezionare il modulo "USB authentication" e dare l'Ok.
Riga 190: Riga 206:
== Disinstallazione ==
== Disinstallazione ==


Per eliminare i pacchetti installati dal sistema è prima necessario rimuovere il file ''/usr/share/pam-configs/usb'' che è stato creato in fase di configurazione e aggiornare PAM, in modo che ''pamusb'' non sia più richiamato nelle prossime autenticazioni:
Per eliminare i pacchetti installati dal sistema è prima necessario ripristinare (in '''Debian Wheezy''' e successive contiene il profilo della '''Alternative mode''') o rimuovere il file <code>/usr/share/pam-configs/usb</code>, annullando le modifiche effettuate in fase di configurazione, e aggiornare PAM.
<pre># rm /usr/share/pam-configs/usb && pam-auth-update</pre>
 
Dopo aver riconfigurato o rimosso il file, rendere effettivi i cambiamenti con:
<pre># pam-auth-update</pre>


Soltanto poi sarà possibile disinstallarlo dal sistema. La procedura da seguire per la disinstallazione varia a seconda del metodo utilizzato in fase di installazione.
Soltanto poi sarà possibile disinstallarlo dal sistema. La procedura da seguire per la disinstallazione varia a seconda del metodo utilizzato in fase di installazione.


=== Con APT ===
=== APT con Debian Squeeze ===


<pre># apt-get remove pamlib-usb pamusb-tools</pre>
<pre># apt-get remove pamlib-usb pamusb-tools</pre>
Riga 201: Riga 219:
Per eliminare tutte le configurazioni:
Per eliminare tutte le configurazioni:
<pre># apt-get purge pamlib-usb pamusb-tools</pre>
<pre># apt-get purge pamlib-usb pamusb-tools</pre>
=== APT con Debian Wheezy e Sid ===
<pre># apt-get remove pamlib-usb pamusb-common</pre>
Per eliminare tutte le configurazioni:
<pre># apt-get purge pamlib-usb pamusb-common</pre>


=== Con tarball ===
=== Con tarball ===


In caso di installazione via tarball, basterà riposizionarsi nella cartella in cui abbiamo estratto l'archivio (e in particolare il file ''Makefile''), e impartire il seguente comando:
In caso di installazione via tarball, basterà riposizionarsi nella cartella in cui abbiamo estratto l'archivio (e in particolare il file <code>Makefile</code>), e impartire il seguente comando:


<pre># make deinstall</pre>
<pre># make deinstall</pre>
Riga 210: Riga 235:
=== Pulizia del sistema ===
=== Pulizia del sistema ===


Per completare l'opera di pulizia del sistema si possono eliminare manualmente anche la directory ''.pamusb'' nella home di tutti gli utenti aggiunti a questo modulo.
Per completare l'opera di pulizia del sistema si possono eliminare manualmente anche la directory <code>.pamusb</code> nella home di tutti gli utenti aggiunti a questo modulo.


== Fonti e link aggiuntivi ==
== Fonti e link aggiuntivi ==


* [http://pamusb.org/ Sito ufficiale del modulo pamusb]
* [https://github.com/aluzzardi/pam_usb Sito ufficiale del modulo pamusb]
* [http://e-zine.debianizzati.org/web-zine/numero_4/?page=48 Articolo sull'e-zine n. 4 di debianizzati]
* [http://e-zine.debianizzati.org/web-zine/numero_4/?page=48 Articolo sull'e-zine n. 4 di debianizzati]
* [http://ubuntrucchi.wordpress.com/2010/05/24/usare-una-usb-come-password/ Blog di Muflone]
* [http://ubuntrucchi.wordpress.com/2010/05/24/usare-una-usb-come-password/ Blog di Muflone]

Versione delle 12:59, 21 feb 2012

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

L'autenticazione a un servizio del sistema, che si tratti del login a una console o un display manager oppure di una qualunque operazione per cui siano necessari determinati privilegi (su, sudo, ecc... ), è gestita in maniera centralizzata dalla libreria PAM e solitamente effettuata mediante la richiesta di una password associata all'utente.

PAM presenta tuttavia un'architettura molto flessibile, che può essere estesa da altri moduli software. In particolare libpam-usb consente l'autenticazione via token grazie a una pendrive su porta USB, sulla quale verrà conservata una one-time password aggiornata a ogni nuova autenticazione. Il modulo una volta installato può essere configurato in modo sia da rappresentare un ulteriore requisito per l'autenticazione, sia da sostituire la richiesta di password per una maggiore comodità.

L'uso combinato di due diverse forme di autenticazione è molto diffuso in ambienti professionali dove la sicurezza ricopre un'importanza critica, e l'uso di libpam-usb e di una comune chiavetta USB possono rappresentare una soluzione molto economica e alla portata di tutti.

Per maggiori dettagli riguardo PAM e libpam-usb rimando all'articolo di pmate e Aki uscito nel numero 4 dell'e-zine. In questa guida vedremo solo come cambiare il comportamento di tutto ciò che si appoggia a tale libreria, in modo consistente anche in presenza di aggiornamenti del sistema o uso di altri moduli, senza mai modificare direttamente i file nella directory /etc/pam.d, anche se così si rinuncia a una maggiore possibilità di personalizzazione.

Installazione

Il metodo di installazione varia leggermente tra Debian Squeeze e le successive Wheezy/Sid, infatti è stata rimossa la dipendenza da HAL utilizzando UDisks e inoltre viene fornito un profilo di default.

Usando APT con Debian Squeeze

È sufficiente installare due pacchetti:

# apt-get install libpam-usb pamusb-tools

Finito! Ora bisogna solo associare la memoria USB agli utenti che si desidera e creare un profilo.

Usando APT con Debian Wheezy e Sid

Anche per queste distribuzioni è sufficiente installare due pacchetti, solo che pamusb-common sostituisce il precedente pamusb-tools, che in Wheezy e Sid è solo un metapacchetto presente per permettere un aggiornamento indolore, quindi installiamo direttamente il primo:

# apt-get install libpam-usb pamusb-common

Finito! Ora bisogna solo associare la memoria USB agli utenti che si desidera.

Esiste già un profilo di default in tali distribuzioni, il file /usr/share/pam-configs/usb fornito dal pacchetto pamlib-runtime, corrispondente alla Alternative mode. Pertanto è necessario modificarlo unicamente se si intende scegliere un'altra modalità.

Usando il tarball

Warning.png ATTENZIONE
Tale metodo non è più necessario, in quanto PAM USB è al momento supportato da tutte le distribuzioni. In futuro questa sezione sarà rimossa, ed è attualmente presente solo per agevolare la rimozione dei pacchetti precedentemente installati.

Se si è installato via tarball si consiglia di effettuare la disinstallazione, dopo aver disabilitato la richiesta del modulo se si è usata una modalità diversa dalla Alternative, seguendo la sezione relativa di questa guida. Poi è sufficiente installare nuovamente i pacchetti ora disponibili direttamente dai repository di Debian, per poter usufruire degli aggiornamenti automatici.


Prima di tutto ci procuriamo l'ultima versione dei sorgenti dal sito ufficiale (al momento della stesura di questa guida si tratta del file pam_usb-0.5.0.tar.gz).

Una volta scaricato il pacchetto, lo estraiamo con:

$ tar xvzf pam_usb-*.tar.gz

Poi installiamo o ci assicuriamo siano già presenti i pacchetti base per la compilazione con make (build-essential e pkg-config), i pacchetti dev richiesti per la compilazione del modulo pamusb e quelli necessari per avviare l'eseguibile pamusb-conf. È sufficiente il seguente comando:

# apt-get install build-essential pkg-config \
    libxml2-dev libdbus-1-dev libpam-dev \
    libxml2 udisks pmount python python-gobject python-dbus

Infine ci posizioniamo nella cartella in cui abbiamo estratto il tarball, compiliamo il modulo con make e (con privilegi di amministrazione) lo installiamo; il tutto con:

$ cd pam_usb-*/  &&  make  &&  su -c 'make install'

A questo punto - e se tutto si è concluso con successo - è possibile rimuovere sia il tarball sia la cartella estratta, in quanto non più necessarie. Per semplificare la procedura di rimozione, e non dover riscaricare l'archivio nuovamente, è però consigliabile conservare almeno il file Makefile.

Configurazione di pamusb

L'unico requisito è la disponibilità di una penna USB, nella quale verranno salvate le password richieste per l'autenticazione nella sessione successiva.

Si può utilizzare la stessa per più utenti, anche se la cosa ha senso unicamente se a tali utenti del sistema corrisponde un unico utente fisico, e anche per più utenti di più sistemi, purché con hostname diverso (e per cui ancor più vale la stessa considerazione).

Bulb.png Suggerimento
Non è necessario riservarla a tale utilizzo e può essere impiegata anche per altro, date le limitate esigenze di memoria di libpam-usb, ma non è una buona idea per la sicurezza inserire il token quando non richiesto per l'autenticazione, in particolar modo se si prevede che la sua presenza sia sufficiente per l'esecuzione di comandi con privilegi di amministrazione.


Inserire la pendrive nella porta USB e darle un nome che ci consenta di identificarla, inserendolo al posto di NOME:

# pamusb-conf --add-device="NOME"

Verrà richiesta una conferma e si potrà scegliere una qualunque tra le memorie USB collegate, che sarà aggiunta al file /etc/pamusb.conf.

Aggiungere gli utenti del sistema che si desidera autenticare tramite il dispositivo, ripetendo il seguente comando per ciascuno di loro (con il relativo nome utente al posto di NOME_UTENTE):

# pamusb-conf --add-user="NOME_UTENTE"

Nuovamente verrà richiesta una conferma, e in caso si siano aggiunte più chiavette si potrà scegliere quale associare all'utente scelto. Per una guida passo-passo alla configurazione si veda al solito l'e-zine.

Se si desidera disabilitare l'output, che in caso di autenticazione via console o terminale rende chiaro se il modulo USB è stato autenticato o meno, modificare con privilegi di amministrazione i defaults nel file /etc/pamusb.conf, aggiungendoci la riga con quiet:

<defaults>
    <quiet>true</quiet>
</defaults>

È possibile anche disabilitarlo solo per alcuni utenti e solo per alcuni servizi.

Ora pamusb è configurato, resta da modificare soltanto il comportamento dei file di configurazione di PAM affinché il modulo sia richiamato.

Creazione di un profilo

Se si utilizza Debian Wheezy o una più recente, si possiede già il profilo per la Alternative mode. Non è quindi necessario fare alcunché e si può passare direttamente alla fase di test, salvo si voglia un'altra modalità.

Se la modalità di default non va bene o si utilizza Debian Squeeze, va scelta la policy da adottare tra quelle presentate nelle sottosezioni successive. Si tratta poi di modificare (o di creare con Squeeze) con privilegi di amministrazione e il proprio editor preferito il file /usr/share/pam-configs/usb con il contenuto scelto.

Warning.png ATTENZIONE
Tutti gli utenti per cui è richiesta - e non solo sufficiente - questa forma di autenticazione devono essere aggiunti a una pendrive USB, oppure non potranno più autenticarsi al sistema. Lo stesso root, se abilitato, non fa eccezione.

In caso di problemi per bypassare il modulo l'unico modo sarà durante l'avvio, scegliendo la modalità singolo utente messa a disposizione da grub.


Il file creato costituisce il profilo utilizzato per la generazione automatica dei file di configurazione di default di PAM (/etc/pam.d/common-*), che non modificheremo manualmente. Per una veloce introduzione sul suo funzionamento, si consideri a titolo esemplificativo quanto segue:

Name: USB authentication
Default: yes
Priority: 257
Auth-Type: Primary
Auth:
    sufficient/required     pam_usb.so

dove:

  • la prima riga serve per l'identificazione;
  • Default indica se il modulo di default è abilitato (l'impostazione manuale effettuata con pam-auth-update ha priorità su quella di default, ma se non si cambia nulla verrà mantenuta questa) e lo imposteremo sempre su yes;
  • Priority determina l'ordine in cui verrà caricato il modulo, seguendo un ordinamento decrescente. Considerando che pam_unix.so che si occupa dell'autenticazione locale mediante richiesta di password ha priorità 256, 257 andrà bene se si vuole che venga richiamato prima il modulo pamusb mentre 255 altrimenti. In questa guida verrà usato quasi sempre 257;
  • Auth-Type può essere Primary o Additional. Nel primo caso viene eseguito solo se l'autenticazione non è già stata provvista da un altro modulo (purché sufficiente), nel secondo a prescindere ma non contribuirà all'esito dell'autenticazione. Le priorità tra i due tipi sono risolte separatamente e per i nostri usi andrà sempre bene Primary;
  • infine Auth indica se considerare l'autenticazione del modulo sufficiente (con sufficient) se tutti quelle con priorità maggiore non falliscono, oppure se considerarla un requisito necessario (con required) e richiama il modulo pam_usb.so (eventualmente passandoci anche dei parametri). È la parte più importante e quella che siamo interessati a modificare.

Alternative mode

Modalità di autenticazione che prevede la richiesta di password soltanto se il token USB non è inserito. È possibile permetterla soltanto a un insieme limitato di utenti, visto che il fallimento dell'autenticazione via USB non compromette l'autenticazione, ma porta solo alla richiesta della password.

Questo il profilo da creare:

Name: USB authentication
Default: yes
Priority: 257
Auth-Type: Primary
Auth:
    sufficient      pam_usb.so

Additional mode

Modalità che prevede la richiesta contemporanea di password e l'inserimento della penna USB.

Il profilo sarà:

Name: USB authentication
Default: yes
Priority: 257
Auth:
    required      pam_usb.so

Utilizzare requisite in luogo di required per non chiedere la password in caso di fallimento. Con required tuttavia non si riuscirà a capire quale modulo ha fallito ed è l'impostazione più sicura.

Unique mode

Modalità che prevede soltanto l'autenticazione via token USB.

Il profilo:

Name: USB authentication
Default: yes
Priority: 511
Auth-Type: Primary
Auth:
    [success=done default=die]    pam_usb.so

Si è impostata una priorità molto maggiore, visto che deve sostituire ogni altra forma di autenticazione locale (che devono avere priorità inferiore a 512).

In luogo di sufficient e requisite per le due modalità già viste si è utilizzata una forma intermedia, che salta l'esecuzione delle regole rimanenti tanto in caso di successo (success=done) che di fallimento (default=die), in modo che l'autenticazione dipenda soltanto da questo modulo. Per maggiori dettagli si veda il manuale (man pam.d).

Custom mode

Modalità personalizzata, che consente l'uso di una modalità Alternative o Additional a seconda dell'utente. Quella qui presentata richiede entrambe le forme di autenticazione per root, mentre una qualsiasi per gli altri utenti.

Profilo risultante:

Name: USB authentication
Default: yes
Priority: 257
Auth-Type: Primary
Auth:
    [success=1 default=ignore]  pam_succeed_if.so  uid > 0
    [success=1 default=bad   ]  pam_usb.so
    sufficient    pam_usb.so

pam_succeed_if.so è un modulo che ha successo unicamente se la condizione è soddisfatta, e chiaramente uid è uguale a zero soltanto per l'utente root, mentre è maggiore per tutti gli altri. Al posto di sufficient e required si è impostata una policy più complessa, e per un'analisi più dettagliata si rimanda alla pagina di manuale (man pam.d), nella quale in caso di fallimento del modulo non succede niente (default=ignore) ma se la condizione è soddisfatta vengono saltate un certo numero di righe (success=N).

Quindi un utente normale soddisferà la prima condizione (uid > 0) e salterà una riga (success=1), eseguendo direttamente l'ultima che coincide con la Alternative mode. Al contrario root leggerà la seconda riga, corrispondente alla policy per la Additional mode; infatti in caso di successo salterà la terza riga e passerà ai moduli di priorità inferiore (la richiesta di password) mentre in tutti gli altri casi l'autenticazione fallirà (default=bad). Impostare default=die in luogo di default=bad se si vuole far capire all'utente che il fallimento è dovuto alla mancata autenticazione USB.

Info.png Sudo
È da notare che con sudo verrà usata la policy dipendente dalla password richiesta, di default quella dell'utente e quindi si utilizzerebbe una modalità Alternative.

Si può però cambiare questo comportamento, sempre che si sia abilitato sudo, aggiungendo targetpw ai Defaults per mezzo di visudo, in modo che venga richiesta la password dell'amministratore anziché quella dell'utente. Al solito la cosa ha senso solo se a loro corrisponde la stessa persona fisica, altrimenti è meglio dirigersi verso la modalità Additional.

Infine i comandi permessi con il tag NOPASSWD: saranno eseguibili come sempre senza alcuna forma di autenticazione.


Salvare la configurazione

Per rendere effettive le modifiche, una volta scelta la policy più adatta per le nostre esigenze o creata una personalizzata, sarà sufficiente eseguire il seguente comando:

# pam-auth-update

Se è deselezionata, spuntare la casella di "USB authentication", lasciare le altre come sono e confermare su "Ok". Verranno rigenerati i file con prefisso "common-" nella directory /etc/pam.d, richiamati da (quasi) tutti gli altri file di configurazione.


Test di funzionamento

Per controllare se abbiamo fatto giusto, usiamo pamusb-check e il nome utente da verificare al posto di NOME_UTENTE:

# pamusb-check NOME_UTENTE

Se abbiamo disabilitato l'output non restituirà niente a schermo, controlliamo allora il suo valore di uscita (0 significa tutto ok, qualunque altro valore che il testo è fallito) eseguendo questo comando subito dopo il precedente, dato che restituisce il valore di ritorno dell'ultimo comando eseguito:

echo $?

Proviamo tutti gli utenti, e in particolare root se utilizziamo una modalità diversa dall\'Alternative.

Disattivazione

È sufficiente eseguire pam-auth-update:

# pam-auth-update

Deselezionare il modulo "USB authentication" e dare l'Ok.

Disinstallazione

Per eliminare i pacchetti installati dal sistema è prima necessario ripristinare (in Debian Wheezy e successive contiene il profilo della Alternative mode) o rimuovere il file /usr/share/pam-configs/usb, annullando le modifiche effettuate in fase di configurazione, e aggiornare PAM.

Dopo aver riconfigurato o rimosso il file, rendere effettivi i cambiamenti con:

# pam-auth-update

Soltanto poi sarà possibile disinstallarlo dal sistema. La procedura da seguire per la disinstallazione varia a seconda del metodo utilizzato in fase di installazione.

APT con Debian Squeeze

# apt-get remove pamlib-usb pamusb-tools

Per eliminare tutte le configurazioni:

# apt-get purge pamlib-usb pamusb-tools

APT con Debian Wheezy e Sid

# apt-get remove pamlib-usb pamusb-common

Per eliminare tutte le configurazioni:

# apt-get purge pamlib-usb pamusb-common

Con tarball

In caso di installazione via tarball, basterà riposizionarsi nella cartella in cui abbiamo estratto l'archivio (e in particolare il file Makefile), e impartire il seguente comando:

# make deinstall

Pulizia del sistema

Per completare l'opera di pulizia del sistema si possono eliminare manualmente anche la directory .pamusb nella home di tutti gli utenti aggiunti a questo modulo.

Fonti e link aggiuntivi


HAL 9000