Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

Jednostavne lozinke ne pružaju zaštitu, a složene je teško zapamtiti. Stoga se često nalaze na podlošku ispod tipkovnice ili na ekranu. Kako bi lozinke ostale u glavama "zaboravnih" korisnika i pouzdanost zaštite ostala netaknuta – tu je dvostruka provjera identiteta (2FA).

Zahvaljujući kombinaciji čimbenika posjedovanja uređaja i poznavanja njegovog PIN-a, sam PIN može biti jednostavniji i lakši za zapamtiti. Nedostaci u dužini ili nasumičnosti PIN-a nadoknađuju se zahtjevom za fizičkim posjedovanjem i ograničenjima na pokušaje unosa PIN-a.

Osim toga, u državnim institucijama postoji potreba da sve funkcionira u skladu s hrvatskim standardima. O tome će biti riječ u ovom primjeru 2FA za prijavu na Linux. Počet ću odmaknuto.

PAM-moduli

Povezivi moduli za provjeru autentičnosti (Pluggable Authentication Modules, PAM) su moduli sa standardnim API-jem i implementacijama različitih mehanizama provjere autentičnosti u aplikacijama.
Sve utilite i aplikacije koje mogu raditi s PAM-om preuzimaju ih i mogu koristiti za autentifikaciju korisnika.
U praksi to otprilike funkcionira ovako: ekipa za prijavu poziva PAM, koji provodi sve potrebne provjere pomoću modula navedenih u konfiguracijskoj datoteci i vraća rezultat natrag timu za prijavu.

librtpam

Modul razvijen od strane tvrtke 'Aktiv' dodaje dvostruku provjeru identiteta korisnika putem pametnih kartica ili USB tokena koristeći asimetrične ključeve prema najnovijim standardima domaće kriptografije.

Razmotrite princip rada:

  • na tokenu je pohranjen korisnički certifikat i njegov privatni ključ;
  • certifikat je pohranjen u korisničkom home direktoriju kao pouzdan.

Proces provjere autentičnosti odvija se na sljedeći način:

  1. Na Rutokenu izvodi se pretraživanje osobnog certifikata korisnika.
  2. Zahtijeva se PIN kod tokena.
  3. Potpisuju se nasumični podaci privatnim ključem izravno u čipu Rutokena.
  4. Dobiveni potpis provjerava se pomoću javnog ključa iz korisničkog certifikata.
  5. Modul vraća ulozi pozivatelju rezultat provjere potpisa.

Može se provesti autentifikacija prema kljucevima GOST R 34.10-2012 (dužine 256 ili 512 bitova) ili zastarjelom GOST R 34.10-2001.

Za sigurnost ključeva ne morate brinuti – oni se generiraju izravno u Rutokenu i nikada ne napuštaju njegovu memoriju tijekom kriptografskih operacija.

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

Rutoken ECP 2.0 certificiran je od strane FSB-a i FSTEK-a prema NDV 4, stoga se može koristiti u informacijskim sustavima koji obrađuju povjerljive informacije.

Praktična primjena

Praktički svaka moderna verzija Linuxa odgovara, a kao primjer koristit ćemo xUbuntu 18.10.

1) Instalirajte potrebne pakete

sudo apt-get install libccid pcscd opensc
Ako želite dodati blokiranje radne površine s screensaverom – dodatno instalirajte paket libpam-pkcs11.

2) Dodajte PAM modul koji podržava GOST-ove

Učitajte biblioteku s https://download.rutoken.ru/Rutoken/PAM/
Kopirajte sadržaj mape PAM librtpam.so.1.0.0 u sustavnu mapu
/usr/lib/ ili /usr/lib/x86_64-linux-gnu/ili /usr/lib64

3) Instalirajte paket s librtpkcs11ecp.so

Preuzmite i instalirajte DEB ili RPM paket putem veze: https://www.rutoken.ru/support/download/pkcs/

4) Provjerite radi li Rutoken ECP 2.0 u sustavu

U terminalu izvršite
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Ako vidite redak Rutoken ECP – to znači da je sve u redu.

5) Pročitajte certifikat

Provjerite ima li uređaj certifikat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Ako nakon retka:
Using slot 0 with a present token (0x0)

  • prikazuje se informacija o ključevima i certifikatima, potrebno je pročitati certifikat i pohraniti ga na disk. Za to izvršite sljedeću naredbu, gdje umjesto {id} trebate unijeti ID certifikata koji ste vidjeli u prethodnom ispisu:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Ako je datoteka cert.crt stvorena, prelazimo na točku 6).
  • nema ništa, to znači da je uređaj prazan. Obratite se administratoru ili stvorite ključeve i certifikat sami, slijedeći sljedeću točku.

5.1) Kreirajte testni certifikat

Pažnja! Opisani načini stvaranja ključeva i certifikata prikladni su za testiranje i nisu namijenjeni za korištenje u stvarnim situacijama. Za to se trebaju koristiti ključevi i certifikati koje izdaje povjereni certifikacijski centar vaše organizacije ili akreditirani autorizirani centar.
PAM modul je stvoren za zaštitu lokalnih računala i podrazumijeva rad u manjim organizacijama. S obzirom na to da je broj korisnika mali, administrator može sam pratiti povlačenje certifikata i ručno blokirati račune, kao i pratiti rok valjanosti certifikata. PAM modul za sada ne može provjeravati certifikate prema CRL-u i graditi lance povjerenja.

Jednostavan put (kroz preglednik)

Za dobivanje testnog certifikata koristite web servis "Centar registracije Rutoken". Proces neće trajati duže od 5 minuta.

Geek put (kroz konzolu i, možda, kompajler)

Provjerite verziju OpenSC
$ opensc-tool --version
Ako je verzija manja od 0.20, nadogradite ili izradite granu pkcs11-tool s podrškom za GOST-2012 s našeg GitHub-a (u trenutku objavljivanja ovog članka, verzija 0.20 još nije objavljena) ili iz grane master glavnog projekta OpenSC najkasnije commit-a 8cf1e6f

Generiramo par ključeva s parametrima:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit s parametrom A), GOSTR3410-2012-256:A (GOST-2012 256 bit s parametrima A)

--id: identifikator objekta (CKA_ID) u obliku dvoznamenkaste hex vrijednosti iz ASCII tablice. Koristite samo ASCII kodove tiskovnih znakova, jer će se id morati proslijediti OpenSSL-u kao string. Na primjer, ASCII kodovima "3132" odgovara string "12". Za udobnost, možete iskoristiti online servis za konverziju stringa u ASCII kodove.

$ .\/pkcs11-tool --module \/usr\/lib\/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

Nakon toga ćemo izraditi certifikat. Ovdje će biti opisane dvije metode: prva kroz CA (koristit ćemo testne CA-e), druga – samopotpisana. Za to prvo treba instalirati i postaviti OpenSSL verzije 1.1 ili novije za rad s Rutokenom putem specijalnog modula rtengine koristeći upute Instalacija i postavljanje OpenSSL-a.
Na primjer: za ‘--id 3132’ u OpenSSL-u treba navesti "pkcs11:id=12«.

Možete iskoristiti usluge testnog CA, kojih ima mnogo, na primjer, evo, evo i evo, za to ćemo kreirati zahtjev za certifikat

Druga opcija – možete se prepustiti lijenosti i stvoriti samopotpisani
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Učitavamo certifikat na uređaj
$ openssl req -utf8 -x509 -keyform motor -key "pkcs11:id=12" -motor rtengine -out cert.cer

6) Registrirajte certifikat u sustavu

Provjerite da vaš certifikat izgleda kao base64 datoteka:

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

Ako vaš certifikat izgleda ovako:

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

onda treba konvertirati certifikat iz DER formata u PEM format (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Ponovno provjeravamo da li je sada sve u redu.

Dodavanje certifikata na listu pouzdanih certifikata
$ mkdir ~/\.eid
$ chmod 0755 ~/\.eid
$ cat cert.pem >> ~/\.eid/authorized_certificates
$ chmod 0644 ~/\.eid/authorized_certificates

Posljednji redak štiti listu pouzdanih certifikata od slučajne ili namjerne promjene od strane drugih korisnika. To isključuje situaciju u kojoj netko može dodati svoj certifikat i moći će se prijaviti u vaše ime.

7) Postavljamo autentifikaciju

Postavka našeg PAM modula je potpuno standardna i radi se na isti način kao i postavke drugih modula. Kreiramo u datoteku /usr/share/pam-configs/rutoken-gost-pam koja sadrži puno ime modula, je li omogućen prema zadanim postavkama, prioritet modula i parametre autentifikacije.
U parametrima autentifikacije postoje zahtjevi za uspješnost operacije:

  • required (obavezno): takvi moduli moraju vratiti pozitivnu odgovor. Ako rezultat poziva modula sadrži negativan odgovor, to će dovesti do pogreške prilikom autentifikacije. Zahtjev će biti otkazan, ali će se ostali moduli pozvati.
  • requisite (neophodno): slično je required, ali odmah dovodi do pogreške autentifikacije i zanemaruje ostale module.
  • sufficient (dovoljno): ako nijedan od modula required ili sufficient nisu vratili negativan rezultat, modul će vratiti pozitivnu odgovor. Preostali moduli će biti ignorirani.
  • optional (dodatno): ako u stogu nema modula required i nijedan od modula sufficient nije vratio pozitivan rezultat, barem jedan od modula optional mora vratiti pozitivan odgovor.

Cjeloviti sadržaj datoteke /usr/share/pam-configs/rutoken-gost-pam:
Naziv: Rutoken PAM GOST
Zadano: da
Prioritet: 800
Vrsta autentifikacije: Primarna
Autentifikacija: dovoljna /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

spremamo datoteku, nakon toga izvršavamo
$ sudo pam-auth-update
u prozoru koji se pojavi stavite zvjezdicu pored Rutoken PAM GOST i pritisnemo OK

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

8) Provjeravamo podešavanje

Kako bismo bili sigurni da je sve ispravno postavljeno, ali ne gubeći mogućnost prijave u sustav, unesite naredbu
$ sudo login
Unesite korisničko ime. Sve je ispravno postavljeno ako sustav zahtijeva PIN kod uređaja.

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

9) Postavljamo zaključavanje računala prilikom vađenja tokena

U paketu libpam-pkcs11 dolazi alat pkcs11_eventmgr, koji omogućuje izvođenje različitih radnji kada se dogode PKCS#11 događaji.
Za postavljanje pkcs11_eventmgr koristi se konfiguracijska datoteka: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Za različite Linux distribucije, naredba koja poziva zaključavanje računa prilikom vađenja pametnih kartica ili tokena će se razlikovati. Poglede. event card_remove.
Primjer konfiguracijske datoteke prikazan je u nastavku:

pkcs11_eventmgr
{
    # Pokretanje u pozadini
    daemon = true;
     
    # Postavke dijagnostičkih poruka
    debug = false;
 
    # Vrijeme ispitivanja u sekundama
    polling_time = 1;
 
    # Postavljanje tajmauta za uklanjanje kartice
    # Zadano 0
    expire_time = 0;
 
    # Odabir pkcs11 biblioteke za rad s Rутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Radnje s karticom
    # Kartica umetnuta:
    event card_insert {
        # Ostavite zadane vrijednosti (ništa se ne događa)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Kartica uklonjena
    event card_remove {
        on_error = ignore;
         
        # Pozivamo funkciju zaključavanja ekrana
        
        # Za GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Za XFCE
        # action = "xflock4";
        
        # Za Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Kartica je dugo vremena bila uklonjena
    event expire_time {
        # Ostavite zadane vrijednosti (ništa se ne događa)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Nakon toga dodajte aplikaciju pkcs11_eventmgr u pokretanje. Za to uredite datoteku .bash_profile:
$ nano /home//.bash_profile
Dodajte na kraj datoteke redak pkcs11_eventmgr i ponovo pokrenite.

Opišani koraci za postavljanje operativnog sustava mogu se koristiti kao upute u bilo kojem modernom Linux distribuciji, uključujući domaće.

Kako koristiti PAM module za lokalnu autentifikaciju u Linuxu prema ključevima GOST-2012 na Rutokenu

Zaključak

Računalnici s Linuxom u ruskim državnim strukturama postaju sve popularniji, a postaviti pouzdanu dvofaktorsku autentifikaciju u ovom OS-u nije uvijek jednostavno. Ovim vodičem ćemo pomoći da se riješi problem s "lozinkama" i pouzdano zaštiti pristup računalniku, a da pritom ne utrošite mnogo vremena.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster