
Jednoduchá hesla nechrání, složitá se naopak obtížně pamatují. Proto se tak často ocitají na lístečku pod klávesnicí nebo na monitoru. Aby si je „zapomnětliví“ uživatelé lépe pamatovali a zabezpečení se neztrácelo, existuje dvoufaktorová autentizace (2FA).
Díky kombinaci faktoru vlastnictví zařízení a znalosti jeho PIN kódu může být samotný PIN kód jednodušší a snadněji zapamatovatelný. Nedostatky v délce nebo náhodnosti PIN kódu kompenzují požadavek na fyzické vlastnictví a omezení při jeho procházení.
Kromě toho je v státních institucích často žádáno, aby vše fungovalo podle norem. O tomto variantu 2FA pro přístup do Linuxu si povíme. Začnu z širšího pohledu.
PAM moduly
Moduly pro připojené autentizace (Pluggable Authentication Modules, PAM) jsou moduly se standardním API a implementacemi různých mechanismů autentizace v aplikacích.
Všechny utilit a aplikace, které umí pracovat s PAM, je načítají a mohou je používat k autentizaci uživatele.
V praxi to funguje takto: příkaz login se obrací na PAM, který provádí všechny nezbytné kontroly pomocí modulů uvedených v konfiguračním souboru a vrací výsledek zpět příkazu login.
librtpam
Modul vyvinutý společností Active přidává dvoufaktorovou autentizaci uživatelů pomocí smart karet nebo USB tokenů s využitím asymetrických klíčů podle posledních standardů domácí kryptografie.
Podívejme se na princip jeho fungování:
- na tokenu je uložen certifikát uživatele a jeho soukromý klíč;
- certifikát je uložen v domácím adresáři uživatele jako důvěryhodný.
Proces autentizace probíhá následovně:
- Na RUTOKENU se hledá osobní certifikát uživatele.
- Je požádán o PIN kód tokenu.
- Probíhá podpis náhodných dat soukromým klíčem přímo v čipu RUTOKENU.
- Získaný podpis se ověřuje pomocí veřejného klíče z certifikátu uživatele.
- Modul vrací výsledky ověření podpisu vyvolávající aplikaci.
Je možné se autentizovat pomocí klíčů GOST R 34.10-2012 (délky 256 nebo 512 bitů) nebo zastaralého GOST R 34.10-2001.
O bezpečnost klíčů se není třeba obávat – jsou generovány přímo v Rutokenu a během kryptografických operací nikdy neopouštějí jeho paměť.

Rutoken ECP 2.0 je certifikován FSB a FSTEK podle NDV 4, a proto může být používán v informačních systémech, které zpracovávají důvěrné informace.
Praktické použití
Vyhovuje prakticky jakýkoli moderní Linux, pro příklad budeme používat xUbuntu 18.10.
1) Nainstalujeme potřebné balíčky
sudo apt-get install libccid pcscd opensc
Pokud chcete přidat blokaci pracovní plochy spořičem obrazovky – navíc nainstalujte balíček libpam-pkcs11.
2) Přidáme PAM modul s podporou GOSTů
Načteme knihovnu s
Kopírujeme obsah složky PAM librtpam.so.1.0.0 do systémové složky
/usr/lib/ nebo /usr/lib/x86_64-linux-gnu/nebo /usr/lib64
3) Nainstalujeme balíček s librtpkcs11ecp.so
Načteme a nainstalujeme DEB- nebo RPM-balíček podle odkazu:
4) Ověříme, že Rutoken ECP 2.0 funguje v systému
V terminálu provedeme
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Pokud uvidíte řetězec Rutoken ECP – znamená to, že vše je v pořádku.
5) Načteme certifikát
Ověříme, že zařízení obsahuje certifikát
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Pokud po řádku:
Using slot 0 with a present token (0x0)
- je zobrazena informace o klíčích a certifikátech, je nutné certifikát načíst a uložit na disk. K tomu zadejte následující příkaz, kde místo {id} vložte ID certifikátu, které jste viděli ve výstupu předchozího příkazu:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
V případě, že byl soubor cert.crt vytvořen, přejděte k bodu 6). - není nic, znamená to, že zařízení je prázdné. Obraťte se na administrátora nebo si vytvořte klíče a certifikát sami podle následujícího bodu.
5.1) Vytvoříme testovací certifikát
Pozor! Popisované způsoby vytváření klíčů a certifikátů jsou vhodné pro testování a nejsou určeny k použití v provozním režimu. K tomu je nutné používat klíče a certifikáty vydané důvěryhodným certifikačním střediskem vaší organizace nebo akreditovaným certifikačním střediskem.
Modul PAM je určen na ochranu lokálních počítačů a je určen pro malé organizace. Protože je málo uživatelů, může správce sám sledovat platnost certifikátů a ručně blokovat účty, stejně jako sledovat dobu platnosti certifikátů. Modul PAM zatím neumí kontrolovat certifikáty podle CRL a vytvářet důvěryhodné řetězce.
Jednoduchá cesta (přes prohlížeč)
Pro získání testovacího certifikátu použijte . Proces zabere maximálně 5 minut.
Cesta geeků (přes konzoli a možná kompilátor)
Zkontrolujte verzi OpenSC
$ opensc-tool --version
Pokud je verze menší než 0.20, aktualizujte se nebo sestavte z našeho GitHubu (v době vydání tohoto článku ještě nebylo vydáno verze 0.20) nebo z větve master hlavního projektu OpenSC nejpozději
Generujeme klíčový pár s parametry:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit s parametrem A), GOSTR3410-2012-256:A (GOST-2012 256 bit s parametrem A)
--id: identifikátor objektu (CKA_ID) ve formě dvoumístných hexadecimálních čísel z tabulky ASCII. Používejte pouze ASCII kódy tištěných symbolů, protože id bude třeba předat OpenSSL jako řetězec. Například ASCII kódu „3132“ odpovídá řetězec „12“. Pro pohodlí můžete využít .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Dále budeme vytvářet certifikát. Níže budou popsány dvě cesty: první přes CA (použijeme testovací CA), druhý – self-signed. K tomu je nejprve nutné nainstalovat a nastavit OpenSSL verze 1.1 nebo novější pro práci s Rutoken prostřednictvím speciálního modulu rtengine podle příručky .
Například: pro ‘--id 3132’ v OpenSSL je třeba uvést „pkcs11:id=12«.
Můžete využít služeb testovací CA, kterých je hodně, například , a , k tomu vytvoříme žádost o certifikát
Jinou možností je lenivět a vytvořit self-signed
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Nahráváme certifikát na zařízení
$ openssl req -utf8 -x509 -klíčový engine -klíč "pkcs11:id=12" -motor rtengine -výstup cert.cer
6) Registrujeme certifikát v systému
Ujistěte se, že váš certifikát vypadá jako base64 soubor:

Pokud váš certifikát vypadá takto:

musíte konvertovat certifikát z formátu DER do PEM formátu (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Opět zkontrolujte, že je nyní vše v pořádku.
Přidáváme certifikát do seznamu důvěryhodných certifikátů
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
Poslední řádek chrání seznam důvěryhodných certifikátů před náhodnými nebo úmyslnými změnami jinými uživateli. To vylučuje situaci, kdy by sem někdo přidal svůj certifikát a mohl by se přihlásit vaším jménem.
7) Nastavujeme autentizaci
Nastavení našeho modulu PAM je zcela standardní a provádí se přesně tak, jak se nastavují ostatní moduly. Vytvoříme soubor /usr/share/pam-configs/rutoken-gost-pam který obsahuje úplný název modulu, zda je povolen ve výchozím nastavení, prioritu modulu a parametry autentizace.
V parametrech autentizace jsou požadavky na úspěšnost operace:
- required (požadováno): takové moduly musí vrátit kladnou odpověď. Pokud výsledek volání modulu obsahuje zápornou odpověď, dojde k chybě autentizace. Žádost bude zamítnuta, ale ostatní moduly budou zavolány.
- requisite (nezbytné): podobné jako required, ale okamžitě vede k selhání autentizace a ignoruje ostatní moduly.
- sufficient (dostačující): pokud před takovým modulem žádný z modulů required nebo sufficient nevrátil záporný výsledek, modul vrátí kladnou odpověď. Zbývající moduly budou ignorovány.
- optional (volitelné): pokud v zásobníku nejsou moduly required a žádný z modulů sufficient nevrátil kladný výsledek, alespoň jeden z modulů optional musí vrátit kladnou odpověď.
Úplný obsah souboru /usr/share/pam-configs/rutoken-gost-pam:
Název: Rutoken PAM GOST
Výchozí: ano
Priorita: 800
Typ ověřování: Primární
Ověření: dostatečné /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

uložíme soubor, poté provedeme
$ sudo pam-auth-update
v zobrazeném okně umístíme hvězdičku vedle Rutoken PAM GOST a klikneme na OK

8) Kontrolujeme nastavení
Abychom pochopili, že je všechno nastaveno správně, ale přitom neztratili možnost přihlášení, zadejte příkaz
$ sudo login
Zadejte uživatelské jméno. Všechno je nastaveno správně, pokud systém požaduje PIN kód zařízení.

9) Nastavujeme blokaci počítače při vyjmutí tokenu
Součástí balíčku libpam-pkcs11 je utilita pkcs11_eventmgr, která umožňuje provádět různé akce při výskytu událostí PKCS#11.
Pro konfiguraci pkcs11_eventmgr slouží jako konfigurační soubor: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Pro různé distribuce Linuxu se příkaz, který vyvolá blokaci účtu při vyjmutí chytrých karet nebo tokenu, liší. Viz. event card_remove.
Příklad konfiguračního souboru je uveden níže:
pkcs11_eventmgr
{
# Spuštění na pozadí
daemon = true;
# Nastavení ladicích zpráv
debug = false;
# Časový interval pro dotazování v sekundách
polling_time = 1;
# Nastavení časového limitu pro odstranění karty
# Výchozí je 0
expire_time = 0;
# Výběr pkcs11 knihovny pro práci s RUTOKENEM
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Akce s kartou
# Karta vložena:
event card_insert {
# Necháváme výchozí hodnoty (nic se neděje)
on_error = ignore;
action = "/bin/false";
}
# Karta vyjmuta
event card_remove {
on_error = ignore;
# Voláme funkci pro uzamčení obrazovky
# Pro GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# Pro XFCE
# action = "xflock4";
# Pro Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Karta byla vyjmuta dlouhou dobu
event expire_time {
# Necháváme výchozí hodnoty (nic se neděje)
on_error = ignore;
action = "/bin/false";
}
}Po tomto přidejte aplikaci pkcs11_eventmgr do automatického spouštění. K tomu upravte soubor .bash_profile:
$ nano /home//.bash_profile
Na konec souboru přidejte řádek pkcs11_eventmgr a restartujte se.
Popisované kroky pro nastavení operačního systému lze použít jako návod v jakémkoli moderním distribuci Linuxu, včetně domácích.

Závěr
PC s Linuxem v ruských státních institucích se stávají stále populárnějšími, a nastavit spolehlivou dvoufaktorovou autentizaci v této OS není vždy jednoduché. Rádi tímto průvodcem pomůžeme vyřešit "problém s hesly" a spolehlivě chránit přístup k PC, aniž bychom na to strávili příliš mnoho času.
Zdroj: habr.com
