
Parolele simple nu protejează, iar cele complexe sunt imposibil de reținut. Din acest motiv, ele ajung adesea pe un autocolant sub tastatură sau pe monitor. Pentru ca parolele să rămână în mințile utilizatorilor „uituți” și fiabilitatea securității să nu fie pierdută, există autentificarea în doi pași (2FA).
Datorită combinației între factorul de deținere a dispozitivului și cunoașterea codului PIN, codul PIN poate fi mai simplu și mai ușor de reținut. Deficiențele în lungimea sau aleatorietatea codului PIN sunt compensate de cerința de deținere fizică și de restricțiile la încercările de ghicire a codului PIN.
În plus, în instituțiile guvernamentale apare uneori dorința ca totul să funcționeze conform standardelor naționale. Despre o astfel de variantă a 2FA pentru a accesa Linux vom discuta. Începem de la distanță.
Module PAM
Modulele de autentificare pluggable (Pluggable Authentication Modules, PAM) sunt module cu o API standard și implementări ale diferitelor mecanisme de autentificare în aplicații.
Toate utilitarele și aplicațiile care pot lucra cu PAM le detectează și le pot folosi pentru autentificarea utilizatorului.
În practică, funcționează cam așa: comanda login se adresează la PAM, care efectuează toate verificările necesare folosind modulele specificate în fișierul de configurare și returnează rezultatul înapoi comenzii login.
librtpam
Modulul dezvoltat de compania „Activ” adaugă autentificarea în doi pași a utilizatorilor prin smartcarduri sau tokenuri USB, folosind chei asimetrice conform celor mai recente standarde de criptografie națională.
Să examinăm principiul de funcționare al acestuia:
- pe token este stocat certificatul utilizatorului și cheia sa privată;
- certificatul este salvat în directorul personal al utilizatorului ca fiind de încredere.
Procesul de autentificare se desfășoară după cum urmează:
- Pe Rutoken se caută certificatul personal al utilizatorului.
- Se solicită codul PIN al tokenului.
- Se efectuează semnătura datelor aleatorii cu cheia privată direct în cipul Rutokenului.
- Semnătura obținută este verificată folosind cheia publică din certificatul utilizatorului.
- Modulul returnează aplicației care a solicitat rezultatul verificării semnăturii.
Se poate autentifica folosind chei conform standardelor GOST R 34.10-2012 (de lungimi de 256 sau 512 biți) sau învechitului GOST R 34.10-2001.
Nu trebuie să ne facem griji cu privire la securitatea cheilor – acestea sunt generate direct în Rutoken și nu părăsesc niciodată memoria sa în timpul operațiunilor criptografice.

Rutoken ECDP 2.0 este certificat de FSB și FSTEK conform NDV 4, ceea ce îl face utilizabil în sistemele informaționale care procesează informații confidențiale.
Utilizare practică
Se potrivește practic orice versiune modernă de Linux, de exemplu, vom folosi xUbuntu 18.10.
1) Instalăm pachetele necesare
sudo apt-get install libccid pcscd opensc
Dacă doriți să adăugați blocarea desktopului cu un screensaver – instalați suplimentar pachetul libpam-pkcs11.
2) Adăugăm modul PAM cu suport pentru standardele GOST
Încărcăm biblioteca cu
Copiem conținutul folderului PAM librtpam.so.1.0.0 în folderul sistemului
/usr/lib/ sau /usr/lib/x86_64-linux-gnu/sau /usr/lib64
3) Instalăm pachetul cu librtpkcs11ecp.so
Încărcăm și instalăm pachetul DEB sau RPM de la link-ul:
4) Verificăm dacă Rutoken ECDP 2.0 funcționează în sistem
În terminal executăm
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Dacă vedeți linia Rutoken ECP – atunci totul este bine.
5) Citim certificatul
Verificăm dacă pe dispozitiv există un certificat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Dacă după linia:
Using slot 0 with a present token (0x0)
- apare informația despre chei și certificate, atunci trebuie să citim certificatul și să-l salvăm pe disc. Pentru aceasta, executați următoarea comandă, unde în loc de {id} trebuie să introduceți ID-ul certificatului pe care l-ați văzut în ieșirea comenzii anterioare:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
În cazul în care fișierul cert.crt a fost creat, trecem la punctul 6). - nu există nimic, înseamnă că dispozitivul este gol. Vă rugăm să contactați administratorul sau să creați chei și un certificat singuri, urmând punctul următor.
5.1) Creăm un certificat de test
Atenție! Metodele descrise pentru crearea cheilor și certificatelor sunt destinate testării și nu ar trebui folosite în modul operațional. Pentru aceasta, trebuie să folosiți chei și certificate emise de o autoritate de certificare de încredere a organizației dumneavoastră sau de către un centru de certificare acreditat.
M Modul PAM este creat pentru a proteja computerele locale și preconizează funcționarea în organizații mici. Deoarece utilizatorii sunt puțini, administratorul poate supraveghea singur revocarea certificatelor și poate bloca manual conturile, la fel ca și data de expirare a certificatelor. Modulul PAM în prezent nu poate verifica certificatul prin CRL și construi lanțuri de încredere.
Calea simplă (prin browser)
Pentru a obține un certificat de testare, utilizați . Procesul va dura nu mai mult de 5 minute.
Calea geekului (prin consolă și, posibil, compilator)
Verificați versiunea OpenSC
$ opensc-tool --version
Dacă versiunea este mai mică decât 0.20, actualizați sau construiți din GitHub-ul nostru (la momentul publicării acestui articol, versiunea 0.20 nu fusese încă lansată) sau din ramura master a proiectului OpenSC, nu mai târziu de
Generăm o pereche de chei cu parametrii:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 biți cu setul de parametrii A), GOSTR3410-2012-256:A (GOST-2012 256 biți cu setul de parametrii A)
--id: identificatorul obiectului (CKA_ID) sub formă de numere hexazecimale de două cifre din tabelul ASCII. Utilizați doar coduri ASCII pentru caracterele tipărite, deoarece id-ul va trebui transmis OpenSSL sub formă de șir. De exemplu, codul ASCII „3132” corespunde șirului „12”. Pentru comoditate, puteți folosi .
$ .\/pkcs11-tool --module \/usr\/lib\/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Apoi vom crea un certificat. Mai jos vor fi descrise două căi: prima prin UCA (vom folosi UCA-uri de test), a doua - auto-semnat. Pentru aceasta, mai întâi trebuie să instalați și să configurați OpenSSL versiunea 1.1 sau mai recentă pentru a lucra cu RUTOKEN prin modulul special rtengine folosind ghidul .
De exemplu: pentru ‘--id 3132’ în OpenSSL trebuie să specificați „pkcs11:id=12«.
Puteți folosi serviciile unui UCA de testare, sunt multe, de exemplu, , și , pentru aceasta, vom crea o solicitare pentru certificat
O altă opțiune – puteți ceda tentației și să creați un certificat auto-semnat
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Încărcați certificatul pe dispozitiv
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Înregistrați certificatul în sistem
Asigurați-vă că certificatul dvs. arată ca un fișier base64:

Dacă certificatul dvs. arată astfel:

atunci trebuie să convertiți certificatul din format DER în format PEM (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Verificați din nou că acum totul este în regulă.
Adăugăm certificatul în lista certificatelor de încredere
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
Ultima linie protejează lista certificatelor de încredere împotriva modificării accidentale sau intenționate de către alți utilizatori. Acest lucru exclude situația în care cineva ar adăuga propriul certificat aici și ar putea accesa sistemul în numele dumneavoastră.
7) Configurăm autentificarea
Configurarea modulului nostru PAM este complet standard și se face exact la fel ca și configurările altor module. Creăm un fișier /usr/share/pam-configs/rutoken-gost-pam care conține numele complet al modulului, dacă este activat implicit, prioritatea modulului și parametrii de autentificare.
În parametrii de autentificare există cerințe pentru succesul operației:
- required (necesar): aceste module trebuie să returneze un răspuns pozitiv. Dacă rezultatul apelului modulului conține un răspuns negativ, acest lucru va duce la o eroare de autentificare. Cererea va fi anulată, dar celelalte module vor fi apelate.
- requisite (necesar): similar cu required, dar duce imediat la eșecul autentificării și ignoră celelalte module.
- sufficient (suficient): dacă înainte de un astfel de modul niciunul dintre modulele required sau sufficient nu a returnat un rezultat negativ, atunci modulul va returna un răspuns pozitiv. Modulele rămase vor fi ignorate.
- optional (opțional): dacă în stivă nu sunt module required și niciunul dintre modulele sufficient nu a returnat un răspuns pozitiv, atunci cel puțin unul dintre modulele optional trebuie să returneze un răspuns pozitiv.
Conținutul complet al fișierului /usr/share/pam-configs/rutoken-gost-pam:
Nume: Rutoken PAM GOST
Implicit: da
Prioritate: 800
Tip-Autentificare: Primar
Autentificare: suficientă /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

salvăm fișierul, apoi executăm
$ sudo pam-auth-update
în fereastra care apare, punem o stea lângă Rutoken PAM GOST și apăsăm OK

8) Verificăm configurarea
Pentru a verifica că totul este configurat, dar fără a pierde posibilitatea de a accesa sistemul, introduceți comanda
$ sudo login
Introduceți numele utilizatorului. Totul este configurat corect dacă sistemul cere codul PIN al dispozitivului.

9) Configurăm blocarea computerului la extragerea token-ului
În pachet este inclusă utilitarul libpam-pkcs11 pkcs11_eventmgr, care permite executarea diferitelor acțiuni la apariția evenimentelor PKCS#11. pkcs11_eventmgr
Pentru configurare servește ca fișier de configurare: Pentru diferite distribuții Linux, comanda care invocă blocarea contului la extragerea cardurilor inteligente sau a token-ului va fi diferită. Vezi. /etc/pam_pkcs11/pkcs11_eventmgr.conf
event card_remove Exemplul fișierului de configurare este prezentat mai jos:.
Пример файла конфигурации представлен ниже:
pkcs11_eventmgr
{
# Rulare în background
daemon = true;
# Configurarea mesajelor de depanare
debug = false;
# Timpul de polling în secunde
polling_time = 1;
# Setarea timeout-ului pentru eliminarea cardului
# Implicit 0
expire_time = 0;
# Selectarea bibliotecii pkcs11 pentru lucrul cu Rutoken
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Acțiuni cu cardul
# Card inserat:
event card_insert {
# Lăsăm valorile implicite (nimic nu se întâmplă)
on_error = ignore ;
action = "/bin/false";
}
# Card extras
event card_remove {
on_error = ignore;
# Apelăm funcția de blocare a ecranului
# Pentru GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# Pentru XFCE
# action = "xflock4";
# Pentru Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Cardul a fost extras mult timp
event expire_time {
# Lăsăm valorile implicite (nimic nu se întâmplă)
on_error = ignore;
action = "/bin/false";
}
}După aceasta, adăugați aplicația servește ca fișier de configurare: în autostart. Pentru aceasta, editați fișierul .bash_profile:
$ nano /home//.bash_profile
Adăugați la sfârșitul fișierului linia pkcs11_eventmgr și reporniți.
Pașii descriși pentru configurarea sistemului de operare pot fi folosiți ca instrucțiune în orice distribuție modernă de Linux, inclusiv cele autohtone.

Concluzie
PC-urile cu Linux în structurile de stat rusești devin din ce în ce mai populare, iar configurarea unei autentificări în doi pași fiabile în acest sistem de operare nu este întotdeauna simplă. Ne bucurăm că acest ghid poate ajuta la rezolvarea "problemei parolelor" și la protejarea fiabilă a accesului la PC, fără a cheltui mult timp pe asta.
Sursa: habr.com
