
Az egyszerű jelszavak nem védenek, míg a bonyolultak nehezen megjegyezhetők. Ezért gyakran a billentyűzet alatt vagy a monitoron végzik. Annak érdekében, hogy a „feledékeny” felhasználók fejében maradjanak a jelszavak, és a védelem megbízhatósága ne csorbuljon, létezik a kétfaktoros hitelesítés (2FA).
A készülék birtoklásának és a PIN-kód ismeretének kombinációja lehetővé teszi, hogy a PIN-kód egyszerűbb és könnyebben megjegyezhető legyen. A PIN-kód hosszának vagy véletlenszerűségének hiányosságait a fizikai birtoklás követelménye és a PIN-kód megadására vonatkozó korlátozások kompenzálják.
Ezen kívül az állami intézményekben előfordul, hogy azt akarják, hogy minden a GOST szerint működjön. Erről a 2FA megoldásról a Linuxba való belépéshez fogok beszélni. Messziről kezdem.
PAM-modulok
Az autentikációs modulok (Pluggable Authentication Modules, PAM) egy szabványos API-val rendelkező modulok, amelyek különféle autentikációs mechanizmusokat valósítanak meg az alkalmazásokban.
Minden olyan segédprogram és alkalmazás, amely képes PAM-mal dolgozni, átveszi őket, és felhasználhatja a felhasználó hitelesítésére.
A gyakorlatban ez körülbelül így működik: a login parancs a PAM-hoz fordul, amely végrehajtja az összes szükséges ellenőrzést a konfigurációs fájlban megadott modulok segítségével, és visszaadja az eredményt a login parancsnak.
librtpam
Az "Aktív" cég által kifejlesztett modul kétfaktoros hitelesítést ad a felhasználók számára okoskártyák vagy USB-tokenek segítségével, aszimmetrikus kulcsokkal, a legújabb belföldi kriptográfiai szabványok szerint.
Vegyük szemügyre a működési elvét:
- a tokenen a felhasználó tanúsítványa és a privát kulcsa található;
- a tanúsítvány a felhasználó otthoni könyvtárában hitelesítettként van mentve.
A hitelesítési folyamat a következőképpen zajlik:
- A Rootokenen a felhasználó személyes tanúsítványát keresik.
- A token PIN-kódját kérik.
- A véletlenszerű adatok aláírása a privát kulccsal közvetlenül a Rootoken chipjén történik.
- Az így kapott aláírást a felhasználó tanúsítványában található nyilvános kulcs segítségével ellenőrzik.
- A modul visszaadja az aláírás ellenőrzésének eredményét a hívó alkalmazásnak.
A GOST R 34.10-2012 (256 vagy 512 bites hosszúságú) vagy elavult GOST R 34.10-2001 szabvány szerint lehet hitelesíteni.
A kulcsok biztonsága miatt nem kell aggódni – azok közvetlenül a Rutokenben generálódnak, és soha nem hagyják el annak memóriáját a kriptográfiai műveletek során.

A Rutoken ECP 2.0 tanúsítva van az FSB és az FSTEK által az NDV 4 szerint, ezért használható olyan információs rendszerekben, amelyek bizalmas információkat dolgoznak fel.
Gyakorlati használat
Gyakorlatilag bármilyen modern Linux megfelelő, például a xUbuntu 18.10-et fogjuk használni.
1) Telepítjük a szükséges csomagokat
sudo apt-get install libccid pcscd opensc
Ha szeretnék a képernyővédővel letiltani a munkafelületet, akkor további csomagot kell telepíteni libpam-pkcs11.
2) Hozzáadjuk a PAM modult a GOST támogatással
Betöltjük a könyvtárat a
A PAM librtpam.so.1.0.0 mappájának tartalmát átmásoljuk a rendszer mappájába
/usr/lib/ vagy /usr/lib/x86_64-linux-gnu/vagy /usr/lib64
3) Telepítjük a librtpkcs11ecp.so csomagot
Letöltjük és telepítjük a DEB- vagy RPM-csomagot a következő linken:
4) Ellenőrizzük, hogy a Rutoken ECP 2.0 működik-e a rendszerben
A terminálban végrehajtjuk
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Ha a következő sort látja: Rutoken ECP – akkor minden jól van.
5) Kiolvassuk a tanúsítványt
Ellenőrizzük, hogy a készüléken van-e tanúsítvány
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Ha a következő sor után:
Using slot 0 with a present token (0x0)
- információ jelenik meg a kulcsokról és a tanúsítványokról, akkor szükséges a tanúsítványt kiolvasni és a lemezre menteni. Ehhez hajtsa végre a következő parancsot, ahol a {id} helyére a korábbi parancs kimenetében látott tanúsítvány azonosítót kell behelyettesíteni:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Ha a cert.crt fájl létrejött, lépjen a 6. pontra. - nincs semmi, akkor a készülék üres. Kérjük, lépjen kapcsolatba a rendszeradminisztrátorral, vagy hozzon létre kulcsokat és tanúsítványt önállóan a következő lépés szerint.
5.1) Létrehozunk egy teszt tanúsítványt
Figyelem! A kulcsok és tanúsítványok létrehozásának leírt módjai tesztelésre alkalmasak, és nem a valós üzemmódban való alkalmazásra. Ehhez megbízható tanúsítványkiadó központ által kiadott kulcsokat és tanúsítványokat kell használni, vagy akkreditált hitelesítő központot.
A PAM-modul célja a helyi számítógépek védelme és a kis szervezetekben való működés. Mivel a felhasználók száma csekély, az adminisztrátor magának is ellenőrizheti a tanúsítványok visszavonását, és manuálisan blokkolhatja a fiókokat, akárcsak a tanúsítványok érvényességi idejét. A PAM-modul jelenleg nem tud tanúsítványokat ellenőrizni a CRL-en és nem tudja felépíteni a bizalmi láncokat.
Egyszerű út (böngészőn keresztül)
A teszt tanúsítvány megszerzéséhez használja . A folyamat legfeljebb 5 percet vesz igénybe.
Geek út (terminálon és lehet, hogy fordítón keresztül)
Ellenőrizze az OpenSC verzióját
$ opensc-tool --version
Ha a verzió kisebb mint 0.20, frissítse vagy fordítsa le a GitHub-unkból (cikkünk megjelenésekor a 0.20-as kiadás még nem jelent meg) vagy a fő OpenSC projekt master ága felől legkésőbb
Kulcs pár generálása a következő paraméterekkel:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit A paraméterekkel), GOSTR3410-2012-256:A (GOST-2012 256 bit A paraméterekkel)
--id: a CKA_ID objektum azonosító, hex-formátumban két karakter számjegy. Csak nyomtatható karakterek ASCII kódjait használja, mivel az id-t az OpenSSL-nek stringként kell átadni. Például az ASCII számkódok “3132” felel meg a «12» stringnek. A kényelem érdekében használható .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Ezután tanúsítványt fogunk létrehozni. Két utat fogunk leírni: az első az Ügyfélkapu (teszt Ügyfélkapuval fogunk dolgozni), a második – az önaláírt tanúsítvány. Ehhez először telepítenie és be kell állítania az OpenSSL 1.1 vagy újabb verziót a RUTOKEN használatához a rtengine külön modulján keresztül, az útmutató használatával. .
Például: az '--id 3132' megadásához az OpenSSL-ben «pkcs11:id=12«.
Használhatja a sok teszt Ügyfélkapu egyikét, például , és , ehhez tanúsítványkérelmet fogunk benyújtani
A másik lehetőség – lehet lazítani és létrehozni egy önaláírt tanúsítványt.
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Töltsük fel a tanúsítványt az eszközre.
$ openssl req -utf8 -x509 -keyform motor -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Regisztrálja a tanúsítványt a rendszerben.
Győződjön meg arról, hogy tanúsítványa base64 fájl formátumú:

Ha a tanúsítványa így néz ki:

akkor a tanúsítványt át kell konvertálni DER formátumból PEM formátumba (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Ismét ellenőrizzük, hogy most minden rendben van.
Hozzáadunk egy tanúsítványt a megbízható tanúsítványok listájához
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
Az utolsó sor megvédi a megbízható tanúsítványok listáját a véletlenszerű vagy szándékos módosításoktól más felhasználók által. Ez kizárja annak lehetőségét, hogy valaki ide beillesztse a saját tanúsítványát, és így a nevünkben belépjen a rendszerbe.
7) Hitelesítés beállítása
A PAM modulunk beállítása teljesen standard, és pontosan úgy történik, mint a többi modul beállítása. Készítsük el a fájlt /usr/share/pam-configs/rutoken-gost-pam , amely tartalmazza a modul teljes nevét, hogy alapértelmezettként engedélyezve van-e, a modul prioritását és a hitelesítési paramétereket.
A hitelesítési paraméterek tartalmazzák a művelet sikerességéhez szükséges követelményeket:
- required (kötelező): az ilyen moduloknak pozitív választ kell adniuk. Ha a modul hívásának eredménye negatív választ tartalmaz, akkor az hitelesítési hibához vezet. A kérés törlésre kerül, de a többi modul hívva lesz.
- requisite (szükséges): hasonló a required-hoz, de azonnal hitelesítési hibához vezet, és figyelmen kívül hagyja a többi modult.
- sufficient (megfelelő): ha ilyen modul előtt egyik required vagy sufficient modul sem adott negatív eredményt, akkor a modul pozitív választ fog adni. A többi modult figyelmen kívül hagyják.
- optional (opcionális): ha a veremben nincsenek required modulok, és egyik sufficient modul sem adott pozitív eredményt, akkor legalább egy optional modulnak pozitív választ kell adnia.
A fájl teljes tartalma /usr/share/pam-configs/rutoken-gost-pam:
Név: Rutoken PAM GOST
Alapértelmezett: igen
Prioritás: 800
Auth-Típus: Elsődleges
Auth: elegendő /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

mentjük a fájlt, majd végrehajtjuk
$ sudo pam-auth-update
a megjelenő ablakban helyezzünk csillagot a Rutoken PAM GOST mellett, majd kattintsunk OK

8) A beállítás ellenőrzése
A beállítás ellenőrzéséhez, de anélkül, hogy elveszítenénk a belépés lehetőségét, írjuk be a parancsot
$ sudo login
Adja meg a felhasználónevet. Ha a rendszer kérni fogja az eszköz PIN-kódját, a beállítás helyes.

9) A számítógép letiltása a token eltávolításakor
A csomag tartalmazza a libpam-pkcs11 eszközt, pkcs11_eventmgr, amely lehetővé teszi különféle műveletek végrehajtását PKCS#11 események bekövetkeztekor.
A beállításhoz A pkcs11_eventmgr konfigurációs fájlja: /etc/pam_pkcs11/pkcs11_eventmgr.conf
A különböző Linux disztribúciók esetében a parancs, amely letiltja a fiókot a smart card vagy token eltávolításakor, eltérő lesz. Lásd: event card_remove.
Az alábbi példaként szolgáló konfigurációs fájl:
pkcs11_eventmgr
{
# Háttérben való futtatás
daemon = true;
# Hibaüzenetek beállítása
debug = false;
# Lekérdezési idő másodpercekben
polling_time = 1;
# Kártya törlési időtúllépés beállítása
# Alapértelmezett 0
expire_time = 0;
# A pkcs11 könyvtár kiválasztása a Rütoken kezeléséhez
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Akciók a kártyával
# Kártya behelyezve:
event card_insert {
# Alapértelmezett értékek megőrzése (nincs tevékenység)
on_error = ignore;
action = "/bin/false";
}
# Kártya eltávolítva
event card_remove {
on_error = ignore;
# A képernyőzár funkció hívása
# GNOME esetén
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# XFCE esetén
# action = "xflock4";
# Astra Linux esetén (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Kártya hosszú ideig eltávolítva
event expire_time {
# Alapértelmezett értékek megőrzése (nincs tevékenység)
on_error = ignore;
action = "/bin/false";
}
}Ezután adja hozzá az alkalmazást A pkcs11_eventmgr az automatikus indításhoz. Ehhez szerkessze a .bash_profile fájlt:
$ nano /home/<felhasználónév>/.bash_profile
Adjon hozzá a fájl végéhez egy pkcs11_eventmgr sort, majd indítsa újra a gépet.
A leírt lépések a működési rendszer beállításához bármely modern Linux disztribúcióban alkalmazhatóak, beleértve a hazai megoldásokat is.

Zárás
A Linux PC-k a orosz állami intézményekben egyre népszerűbbek, és nem mindig könnyű megbízható kétfaktoros hitelesítést beállítani ebben az operációs rendszerben. Ezzel az útmutatóval örömmel segítünk megoldani a "jelszavak problémáját" és biztonságosan védjük a PC-hez való hozzáférést, nem költve rá sok időt.
Forrás: habr.com
