Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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

  1. Na RUTOKENU se hledá osobní certifikát uživatele.
  2. Je požádán o PIN kód tokenu.
  3. Probíhá podpis náhodných dat soukromým klíčem přímo v čipu RUTOKENU.
  4. Získaný podpis se ověřuje pomocí veřejného klíče z certifikátu uživatele.
  5. 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ěť.

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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

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 webovou službu „Centrum registrace Rutoken“. 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 větev pkcs11-tool s podporou GOST-2012 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 přes commita 8cf1e6f

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 online službu pro převod řetězce na ASCII kódy.

$ ./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 Instalace a nastavení OpenSSL.
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 tady je, tady je a tady je, 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:

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

Pokud váš certifikát vypadá takto:

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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í.

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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.

Jak používat modul PAM pro místní autentizaci v Linuxu pomocí klíčů GOST-2012 na RutoKenu.

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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster