Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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ă:

  1. Pe Rutoken se caută certificatul personal al utilizatorului.
  2. Se solicită codul PIN al tokenului.
  3. Se efectuează semnătura datelor aleatorii cu cheia privată direct în cipul Rutokenului.
  4. Semnătura obținută este verificată folosind cheia publică din certificatul utilizatorului.
  5. 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.

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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 https://download.rutoken.ru/Rutoken/PAM/
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: https://www.rutoken.ru/support/download/pkcs/

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 serviciul web „Centrul de Înregistrare RUTOKEN”. 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 ramura pkcs11-tool cu suport pentru GOST-2012 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 commit-ul 8cf1e6f

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 un serviciu online de conversie a șirului în coduri ASCII.

$ .\/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 Instalarea și configurarea OpenSSL.
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, iată, iată și iată, 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:

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

Dacă certificatul dvs. arată astfel:

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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.

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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.

Cum să folosești modulele PAM pentru autentificarea locală în Linux cu chei GOST-2012 pe Rutoken.

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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster