
Le password semplici non proteggono, mentre quelle complesse sono impossibili da ricordare. Per questo motivo si trovano spesso attaccate sotto la tastiera o sul monitor. Affinché le password rimangano nella memoria degli utenti “dimenticati” e non si perda l'affidabilità della protezione, è disponibile l'autenticazione a due fattori (2FA).
Grazie alla combinazione di fattori di possesso del dispositivo e conoscenza del suo codice PIN, il PIN stesso può essere più semplice e facile da ricordare. Le carenze nella lunghezza o nella casualità del PIN sono compensate dalla richiesta di possesso fisico e dalle limitazioni sulla tentazione del PIN.
Inoltre, nei pubblici uffici a volte si desidera che tutto funzioni secondo le normative ГОСТ. Di questo tipo di 2FA per accedere a Linux discuteremo. Inizierò da lontano.
Moduli PAM
I moduli di autenticazione pluggable (Pluggable Authentication Modules, PAM) sono moduli con un'API standard e implementazioni di vari meccanismi di autenticazione nelle applicazioni.
Tutte le utility e le applicazioni che sanno lavorare con PAM li acquisiscono e possono usarli per l'autenticazione dell'utente.
Nella 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 «Aktiv» 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.
Consideriamo il principio del suo funzionamento:
- sul token è memorizzato il certificato dell'utente e la sua chiave privata;
- il certificato è salvato nella directory principale dell'utente come fidato.
Il processo di autenticazione avviene nel seguente modo:
- Su Rutoken viene cercato il certificato personale dell'utente.
- Viene richiesto il codice PIN del token.
- Si verifica la firma di dati casuali sulla chiave privata direttamente nel chip di Rutoken.
- La firma risultante viene verificata con la chiave pubblica del certificato dell'utente.
- Il modulo restituisce all'applicazione chiamante il risultato della verifica della firma.
È possibile autenticarsi utilizzando le chiavi ГОСТ Р 34.10-2012 (lunghezze 256 o 512 bit) o l'ormai obsoleto ГОСТ Р 34.10-2001.
Non c'è bisogno di preoccuparsi per la sicurezza delle chiavi: vengono generate direttamente nel Rutoken e non lasciano mai la sua memoria durante le operazioni crittografiche.

Il Rutoken ECP 2.0 è certificato dal FSB e dal FSTEK secondo la NDV 4, quindi può essere utilizzato in sistemi informatici che trattano informazioni riservate.
Utilizzo pratico
Praticamente qualsiasi Linux moderno andrà bene; per esempio, useremo xUbuntu 18.10.
1) Installiamo i pacchetti necessari
sudo apt-get install libccid pcscd opensc
Se desideri aggiungere un blocco del desktop con uno screensaver, installa anche il pacchetto libpam-pkcs11.
2) Aggiungiamo il modulo PAM con supporto per gli standard GOST
Carichiamo la libreria con
Copiamo 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
Scarichiamo e installiamo il pacchetto DEB o RPM dal link:
4) Verifichiamo che il Rutoken ECP 2.0 funzioni nel sistema
Eseguiamo nel terminale
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Se vedi la riga Rutoken ECP – significa che va tutto bene.
5) Leggiamo il certificato
Verifica che ci sia un certificato sul dispositivo
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Se dopo la riga:
Using slot 0 with a present token (0x0)
- viene visualizzata l'informazione sulle chiavi e sui certificati, è necessario leggere il certificato e salvarlo sul disco. Per fare ciò, esegui il seguente comando, sostituendo {id} con 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
Nel caso in cui il file cert.crt venga creato, passiamo al punto 6). - non c'è niente, significa che il dispositivo è vuoto. Contatta l'amministratore o crea le chiavi e il certificato da solo, seguendo il prossimo punto.
5.1) Creiamo un certificato di test
Attenzione! I metodi descritti per la creazione di chiavi e certificati sono adatti per test e non sono destinati all'uso in situazioni di produzione. Per questo, è necessario utilizzare chiavi e certificati emessi da un'autorità di certificazione fidata della tua organizzazione o da un centro di certificazione accreditato.
Il modulo PAM è stato creato per proteggere i computer locali e prevede di lavorare in piccole organizzazioni. Poiché ci sono pochi utenti, l'amministratore può monitorare personalmente la revoca dei certificati e bloccare manualmente gli account, così come gestire la scadenza dei certificati. Attualmente, il modulo PAM non è in grado di verificare i certificati tramite CRL e di costruire catene di fiducia.
Percorso semplice (tramite browser)
Per ottenere un certificato di test utilizza . Il processo richiederà non più di 5 minuti.
Percorso geek (tramite console e, forse, 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 è 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 parametri A), GOSTR3410-2012-256:A (GOST-2012 256 bit con parametri A)
--id: l'identificatore dell'oggetto (CKA_ID) in forma di numeri esadecimali a due cifre dalla tabella ASCII. Utilizza solo i codici ASCII dei caratteri stampabili, poiché l'id deve essere passato a OpenSSL come stringa. Ad esempio, al codice ASCII '3132' corrisponde la stringa '12'. Per comodità, puoi utilizzare .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Successivamente, procederemo a creare il certificato. Di seguito verranno descritti due percorsi: il primo tramite CA (utilizzeremo CA di test), il secondo – autofirmato. Per questo è necessario prima installare e configurare OpenSSL versione 1.1 o superiore per lavorare con RuteToken tramite un modulo speciale rtengine seguendo il manuale .
Ad esempio: per '--id 3132' in OpenSSL devi specificare 'pkcs11:id=12«.
Puoi utilizzare i servizi di test di molte CA, ad esempio, , e , per questo creeremo una richiesta di certificato
Un'altra opzione è lasciarsi andare e creare un certificato autofirmato.
$ openssl req -utf8 -nuovo -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Carica il certificato sul dispositivo
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Registriamo il certificato nel sistema
Assicurati che il tuo certificato abbia l'aspetto di 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 tutto sia a posto.
Aggiungiamo il certificato all'elenco dei certificati affidabili
$ mkdir ~\/ .eid
$ chmod 0755 ~\/ .eid
$ cat cert.pem >> ~\/ .eid/authorized_certificates
$ chmod 0644 ~\/ .eid/authorized_certificates
L'ultima riga protegge l'elenco dei certificati affidabili da modifiche accidentali o intenzionali da parte di altri utenti. Questo esclude la situazione in cui qualcuno aggiunge il proprio certificato qui e può accedere al sistema a tuo nome.
7) Configuriamo l'autenticazione
La configurazione del nostro modulo PAM è del tutto standard e viene eseguita esattamente come le configurazioni 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 i parametri di autenticazione.
Nei parametri di autenticazione ci sono requisiti per il successo dell'operazione:
- required (richiesto): tali moduli devono restituire una risposta positiva. Se il risultato della chiamata al modulo contiene una risposta negativa, ciò porterà a un errore di autenticazione. La richiesta verrà annullata, ma gli altri moduli verranno chiamati.
- requisite (necessario): simile a required, ma porta immediatamente al fallimento dell'autenticazione e ignora gli altri moduli.
- sufficient (sufficiente): se prima di tale modulo nessuno dei moduli required o sufficient ha restituito un risultato negativo, allora il modulo restituirà una risposta positiva. I moduli rimanenti saranno ignorati.
- optional (opzionale): se nello stack non ci sono moduli required e nessuno dei moduli 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 l'asterisco accanto a Rutoken PAM GOST e facciamo clic su OK

8) Controlliamo la configurazione
Per capire che tutto è 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 all'estrazione del token
Il pacchetto libpam-pkcs11 include l'utilità pkcs11_eventmgr, che consente di eseguire varie azioni in caso di eventi PKCS#11.
Per la configurazione pkcs11_eventmgr funge da file di configurazione: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Per diverse distribuzioni Linux, il comando che provoca il blocco dell'account all'estrazione di smart card o token sarà diverso. Vedi. event card_remove.
Un esempio di file di configurazione è riportato di seguito:
pkcs11_eventmgr
{
# Avvio in background
daemon = true;
# Configurazione dei messaggi di debug
debug = false;
# Tempo di polling in secondi
polling_time = 1;
# Imposta il timeout per la rimozione della smart card
# Di default 0
expire_time = 0;
# Selezione della libreria pkcs11 per lavorare con RuToken
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Azioni con la smart card
# Smart card inserita:
event card_insert {
# Lasciamo i valori di default (non succede nulla)
on_error = ignore ;
action = "/bin/false";
}
# Smart card 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";
}
# Smart card rimossa per lungo tempo
event expire_time {
# Lasciamo i valori di default (non succede nulla)
on_error = ignore;
action = "/bin/false";
}
}Dopo ciò, aggiungi l'applicazione pkcs11_eventmgr all'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 passi descritti per la configurazione del sistema operativo possono essere utilizzati come istruzioni in qualsiasi distribuzione Linux moderna, comprese quelle nazionali.

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