
Le password semplici non offrono protezione, mentre quelle complesse sono difficili da ricordare. Questo è il motivo per cui spesso si trovano annotate su un adesivo sotto la tastiera o sul monitor. Per fare in modo che le password rimangano nella memoria degli utenti "dimenticati" e che la sicurezza non venga compromessa, è utile l'autenticazione a due fattori (2FA).
Grazie alla combinazione di fattori che includono il possesso di un dispositivo e la conoscenza del suo codice PIN, il PIN stesso può essere più semplice e facile da ricordare. Le carenze in termini di lunghezza o casualità del PIN vengono compensate dalla necessità di possesso fisico e dai limiti sul tentativo di indovinare il PIN.
Inoltre, negli enti pubblici a volte si richiede che tutto funzioni secondo gli standard nazionali. Questo è il tipo di 2FA che verrà trattato per l'accesso a Linux. Inizierò da lontano.
Moduli PAM
I moduli di autenticazione collegabili (Pluggable Authentication Modules, PAM) sono moduli con un'API standard e implementazioni di vari meccanismi di autenticazione nelle applicazioni.
Tutti gli strumenti e le applicazioni in grado di lavorare con PAM li integrano e possono utilizzarli per l'autenticazione dell'utente.
In pratica, funziona più o meno così: il comando login si rivolge a PAM, che esegue tutti i controlli necessari utilizzando i moduli specificati nel file di configurazione e restituisce il risultato al comando login.
librtpam
Il modulo sviluppato dall'azienda 'Activ' aggiunge l'autenticazione a due fattori per gli utenti tramite smart card o token USB utilizzando chiavi asimmetriche secondo gli ultimi standard della crittografia nazionale.
Esaminiamo il principio di funzionamento:
- sul token è memorizzato il certificato dell'utente e la sua chiave privata;
- il certificato è salvato nella home directory dell'utente come fidato.
Il processo di autenticazione avviene come segue:
- Si cerca il certificato personale dell'utente sul Rutoken.
- Viene richiesto il codice PIN del token.
- Si esegue la firma di dati casuali sulla chiave privata direttamente nel chip del Rutoken.
- La firma ottenuta viene verificata utilizzando la chiave pubblica del certificato dell'utente.
- Il modulo restituisce l'esito della verifica della firma all'applicazione chiamante.
È possibile autenticarsi utilizzando chiavi GOST R 34.10-2012 (di lunghezza 256 o 512 bit) o l'obsoleta GOST R 34.10-2001.
Non c'è bisogno di preoccuparsi per la sicurezza delle chiavi: esse vengono generate direttamente nel Rutoken e non lasciano mai la sua memoria durante le operazioni crittografiche.

Rutoken ECP 2.0 è certificato da FSB e FSTEK secondo il NDV 4, quindi può essere utilizzato in sistemi informativi che trattano informazioni riservate.
Utilizzo pratico
Si adatta praticamente a qualsiasi moderno sistema Linux; per esempio, useremo xUbuntu 18.10.
1) Installiamo i pacchetti necessari
sudo apt-get install libccid pcscd opensc
Se desideri aggiungere il salvaschermo per bloccare il desktop, installa il pacchetto aggiuntivo libpam-pkcs11.
2) Aggiungiamo il modulo PAM con supporto per GOST
Carichiamo la libreria da
Copia il contenuto della cartella PAM librtpam.so.1.0.0 nella cartella di sistema
/usr/lib/ o /usr/lib/x86_64-linux-gnu/o /usr/lib64
3) Installiamo il pacchetto con librtpkcs11ecp.so
Scarica e installa il pacchetto DEB o RPM dal seguente link:
4) Verifichiamo che Rutoken ECP 2.0 funzioni nel sistema
Esegui nel terminale
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se vedi la riga Rutoken ECP — allora va tutto bene.
5) Leggiamo il certificato
Verifichiamo che ci sia un certificato sul dispositivo
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Se dopo la riga:
Utilizzando lo slot 0 con un token presente (0x0)
- viene visualizzata l'informazione sui certificati e le chiavi, è necessario leggere il certificato e salvarlo su disco. Per fare ciò, eseguire il seguente comando, dove al posto di {id} bisogna inserire l'ID del certificato che hai visto nell'output del comando precedente:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Se il file cert.crt è stato creato, passiamo al punto 6). - non c'è niente, significa che il dispositivo è vuoto. Contattare l'amministratore o creare chiavi e un certificato autonomamente, seguendo il punto successivo.
5.1) Creiamo un certificato di prova
Attenzione! I metodi descritti per la creazione di chiavi e certificati sono adatti per test e non sono destinati a un utilizzo in produzione. Per questo è necessario utilizzare chiavi e certificati rilasciati da un'autorità di certificazione affidabile per la tua organizzazione o da un centro di certificazione accreditato.
Il modulo PAM è stato creato per proteggere i computer locali e si propone di operare in piccole organizzazioni. Poiché ci sono pochi utenti, l'Amministratore può controllare personalmente la revoca dei certificati e bloccare manualmente gli account, così come gestire la scadenza dei certificati. Il modulo PAM attualmente non è in grado di verificare i certificati tramite CRL e costruire catene di fiducia.
Un modo semplice (tramite browser)
Per ottenere un certificato di prova, utilizza . Il processo richiederà non più di 5 minuti.
Il modo da geek (tramite console e, possibilmente, compilatore)
Controlla la versione di OpenSC
$ opensc-tool --version
Se la versione è inferiore a 0.20, aggiorna o compila dal nostro GitHub (al momento della pubblicazione di questo articolo, la versione 0.20 non era ancora stata rilasciata) o dal ramo master del progetto principale OpenSC non oltre
Generiamo una coppia di chiavi con i seguenti parametri:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit con parametro A), GOSTR3410-2012-256:A (GOST-2012 256 bit con parametro A)
--id: identificatore dell'oggetto (CKA_ID) come numeri esadecimali a due cifre della tabella ASCII. Utilizzare solo i codici ASCII dei caratteri stampabili, poiché l'id dovrà essere passato a OpenSSL come stringa. Ad esempio, il codice ASCII '3132' corrisponde alla stringa "12". Per comodità, puoi utilizzare .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Dopo procederemo alla creazione del certificato. Di seguito saranno descritti due metodi: il primo tramite CA (utilizzeremo CA di test), il secondo – autoadasignato. Per questo è necessario prima installare e configurare OpenSSL versione 1.1 o superiore per lavorare con RUTOKEN tramite il modulo speciale rtengine utilizzando la guida. .
Ad esempio: per ‘--id 3132’ in OpenSSL bisogna indicare "pkcs11:id=12«.
Puoi avvalerti dei servizi di una CA di test, che sono numerose, ad esempio, , e , per questo creeremo una richiesta di certificato
Un'altra opzione è quella di lasciarsi andare e creare un certificato autoadasignato
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Carichiamo il certificato sul dispositivo
$ openssl req -utf8 -x509 -engine keyform -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Registriamo il certificato nel sistema
Assicurati che il tuo certificato appaia come un file base64:

Se il tuo certificato appare così:

è necessario convertire il certificato dal formato DER al formato PEM (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Controlliamo di nuovo che ora sia tutto a posto.
Aggiungiamo il certificato all'elenco dei certificati attendibili
$ mkdir ~/\.eid
$ chmod 0755 ~/\.eid
$ cat cert.pem >> ~/\.eid/authorized_certificates
$ chmod 0644 ~/\.eid/authorized_certificates
L'ultima riga protegge l'elenco dei certificati attendibili da modifiche accidentali o intenzionali da parte di altri utenti. Ciò esclude la situazione in cui qualcuno può aggiungere il proprio certificato e accedere al sistema a tuo nome.
7) Configuriamo l'autenticazione
La configurazione del nostro modulo PAM è completamente standard e viene effettuata esattamente come le impostazioni di altri moduli. Creiamo nel file /usr/share/pam-configs/rutoken-gost-pam contenente il nome completo del modulo, se è abilitato di default, la priorità del modulo e le impostazioni di autenticazione.
Nelle impostazioni di autenticazione ci sono requisiti per il successo dell'operazione:
- required (richiesto): moduli di questo tipo devono restituire una risposta positiva. Se il risultato della chiamata del modulo contiene una risposta negativa, ciò porterà a un errore di autenticazione. La richiesta sarà annullata, ma gli altri moduli saranno chiamati.
- requisite (necessario): simile a required, ma porta immediatamente a un errore di autenticazione ignorando gli altri moduli.
- sufficiente: se nessun modulo required o sufficient restituisce un risultato negativo, il modulo restituirà una risposta positiva. Gli altri moduli saranno ignorati.
- opzionale: se non ci sono moduli required nello stack e nessun modulo sufficient ha restituito un risultato positivo, almeno uno dei moduli optional deve restituire una risposta positiva.
Contenuto completo del file /usr/share/pam-configs/rutoken-gost-pam:
Nome: Rutoken PAM GOST
Predefinito: sì
Priorità: 800
Tipo di autenticazione: Primario
Autenticazione: sufficiente /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

salviamo il file, dopodiché eseguiamo
$ sudo pam-auth-update
nella finestra che appare, mettiamo un segno di spunta accanto a Rutoken PAM GOST e clicchiamo su OK

8) Verifichiamo la configurazione
Per assicurarti che tutto sia configurato, ma senza perdere la possibilità di accesso al sistema, inserisci il comando
$ sudo login
Inserisci il nome utente. È tutto configurato correttamente se il sistema richiede il PIN del dispositivo.

9) Configuriamo il blocco del computer al momento dell'estrazione del token
Il pacchetto include libpam-pkcs11 l'utilità pkcs11_eventmgr, che consente di eseguire varie azioni al verificarsi di eventi PKCS#11.
Per la configurazione pkcs11_eventmgr serve il file di configurazione: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Per vari distribuzioni Linux, il comando che attiva il blocco dell'account durante l'estrazione delle smart card o del token sarà diverso. Sm. event card_remove.
Ecco un esempio di file di configurazione:
pkcs11_eventmgr
{
# Esecuzione in background
daemon = true;
# Impostazione dei messaggi di debug
debug = false;
# Tempo di polling in secondi
polling_time = 1;
# Impostazione del timeout per la rimozione della carta
# Predefinito 0
expire_time = 0;
# Selezione del modulo pkcs11 da utilizzare con Rutoken
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Azioni con la carta
# Carta inserita:
event card_insert {
# Lasciamo i valori predefiniti (nessuna azione)
on_error = ignore ;
action = "/bin/false";
}
# Carta rimossa
event card_remove {
on_error = ignore;
# Chiamiamo la funzione di blocco dello schermo
# Per GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# Per XFCE
# action = "xflock4";
# Per Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Carta rimossa a lungo
event expire_time {
# Lasciamo i valori predefiniti (nessuna azione)
on_error = ignore;
action = "/bin/false";
}
}Dopo di ciò, aggiungi l'applicazione pkcs11_eventmgr nell'avvio automatico. Per fare ciò, modifica il file .bash_profile:
$ nano /home//.bash_profile
Aggiungi alla fine del file la riga pkcs11_eventmgr e riavviati.
I passaggi descritti per la configurazione del sistema operativo possono essere utilizzati come istruzioni in qualsiasi moderna distribuzione Linux, comprese quelle nazionali.

Conclusione
I PC con Linux stanno diventando sempre più popolari nelle strutture governative russe, ma configurare una robusta autenticazione a due fattori in questo sistema operativo non è sempre semplice. Siamo lieti di aiutarti con questa guida a risolvere il "problema delle password" e a proteggere in modo affidabile l'accesso ai PC, senza spendere troppo tempo.
Fonte: habr.com
