
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:
- Na Rutokenu izvodi se pretraživanje osobnog certifikata korisnika.
- Zahtijeva se PIN kod tokena.
- Potpisuju se nasumični podaci privatnim ključem izravno u čipu Rutokena.
- Dobiveni potpis provjerava se pomoću javnog ključa iz korisničkog certifikata.
- 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.

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
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:
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 . 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 s našeg GitHub-a (u trenutku objavljivanja ovog članka, verzija 0.20 još nije objavljena) ili iz grane master glavnog projekta OpenSC najkasnije
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 .
$ .\/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 .
Na primjer: za ‘--id 3132’ u OpenSSL-u treba navesti "pkcs11:id=12«.
Možete iskoristiti usluge testnog CA, kojih ima mnogo, na primjer, , i , 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:

Ako vaš certifikat izgleda ovako:

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

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

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.

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.

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
