
Enkla lösenord skyddar inte, och komplexa Ă€r omöjliga att komma ihĂ„g. DĂ€rför hamnar de ofta pĂ„ en lapp under tangentbordet eller pĂ„ skĂ€rmen. För att lösenord ska förbli i minnet hos âglömskaâ anvĂ€ndare och sĂ€kerheten inte Ă€ventyras â finns det tvĂ„faktorsautentisering (2FA).
Genom att kombinera faktorer som Àgande av enhet och kunskap om dess PIN-kod kan sjÀlva PIN-koden vara enklare och lÀttare att komma ihÄg. Brister i lÀngden eller slumpmÀssigheten hos PIN-koden kompenseras av kravet pÄ fysisk Àgande och begrÀnsningar för att gissa PIN-koden.
Dessutom hÀnder det ofta i statliga institutioner att de vill att allt ska fungera enligt GOST-standard. Om detta alternativ för 2FA för Ätkomst till Linux kommer att handla. Jag börjar med en inledning.
PAM-moduler
Pluggable Authentication Modules (PAM) Àr moduler med ett standardiserat API och implementationer av olika autentiseringsmekanismer i applikationer.
Alla verktyg och applikationer som kan arbeta med PAM anvÀnder dem och kan anvÀnda dem för att autentisera anvÀndaren.
I praktiken fungerar det ungefÀr sÄ hÀr: kommandot login vÀnder sig till PAM, som utför alla nödvÀndiga kontroller med hjÀlp av moduler som anges i konfigurationsfilen och returnerar resultatet tillbaka till kommandot login.
librtpam
Modulen utvecklad av företaget âAktivâ lĂ€gger till tvĂ„faktorsautentisering för anvĂ€ndare via smartkort eller USB-token med hjĂ€lp av asymmetriska nycklar enligt de senaste standarderna inom inhemsk kryptografi.
LÄt oss titta pÄ principen för dess funktion:
- i token lagras anvÀndarens certifikat och hans privata nyckel;
- certifikatet sparas i anvÀndarens hemkatalog som betrodd.
Autentiseringsprocessen gÄr till pÄ följande sÀtt:
- PÄ Rutoken görs en sökning efter anvÀndarens personliga certifikat.
- PIN-koden för token begÀrs.
- Det sker en signering av slumpmÀssiga data med den privata nyckeln direkt i Rutokens chip.
- Den erhÄllna signaturen verifieras med hjÀlp av den offentliga nyckeln frÄn anvÀndarens certifikat.
- Modulen returnerar resultatet av signaturkontrollen till den anropande applikationen.
Man kan autentisera sig med GOST R 34.10-2012 nycklar (256 eller 512 bitar) eller den förÄldrade GOST R 34.10-2001.
Du behöver inte oroa dig för sĂ€kerheten hos nycklarna â de genereras direkt i Rutoken och lĂ€mnar aldrig dess minne under kryptografiska operationer.

Rutoken ECP 2.0 Àr certifierad av FSB och FSTEC enligt NDV 4, sÄ den kan anvÀndas i informationssystem som hanterar konfidentiell information.
Praktisk anvÀndning
NÀstan vilken modern Linux som helst fungerar, för exempel anvÀnder vi xUbuntu 18.10.
1) Installera nödvÀndiga paket
sudo apt-get install libccid pcscd opensc
Om du vill lĂ€gga till en skĂ€rmslĂ€ckare som blockerar skrivbordet â installera dessutom paketet libpam-pkcs11.
2) LÀgg till PAM-modul med GOST-stöd
Ladda biblioteken med
Kopiera innehÄllet i mappen PAM librtpam.so.1.0.0 till systemmappen
/usr/lib/ eller /usr/lib/x86_64-linux-gnu/eller /usr/lib64
3) Installera paketet med librtpkcs11ecp.so
Ladda ner och installera DEB- eller RPM-paketet via lÀnken:
4) Kontrollera att Rutoken ECP 2.0 fungerar i systemet
I terminalen kör följande
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Om du ser raden Rutoken ECP â betyder det att allt Ă€r okej.
5) LĂ€s certifikatet
Kontrollera att det finns ett certifikat pÄ enheten
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Om efter raden:
Using slot 0 with a present token (0x0)
- visas information om nycklar och certifikat, mÄste du lÀsa certifikatet och spara det pÄ disk. Kör följande kommando dÀr du istÀllet för {id} anger ID för certifikatet som du sÄg i utdata frÄn det föregÄende kommandot:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Om filen cert.crt har skapats gÄr vi vidare till punkt 6). - finns inget, betyder det att enheten Àr tom. Kontakta administratören eller skapa nycklar och certifikat sjÀlv genom att följa nÀsta punkt.
5.1) Skapa ett testcertifikat
Obs! De beskrivna metoderna för att skapa nycklar och certifikat Àr avsedda för testning och Àr inte avsedda för anvÀndning i skarpa lÀgen. För detta ska du anvÀnda nycklar och certifikat utfÀrdade av ett pÄlitligt certifikatutfÀrdande center frÄn din organisation eller ett ackrediterat certifikatutfÀrdande center.
PAM-modulen Àr skapad för att skydda lokala datorer och Àr avsedd för smÄ organisationer. Eftersom det finns fÄ anvÀndare kan administratören sjÀlv hÄlla koll pÄ certifikatens Äterkallelse och manuellt blockera konton, liksom att hantera certifikatens giltighetstid. PAM-modulen kan Ànnu inte kontrollera certifikat via CRL eller bygga förtroendekedjor.
Enkel vÀg (via webblÀsare)
För att fÄ ett testcertifikat, anvÀnd . Processen tar högst 5 minuter.
Nerdens vÀg (via konsol och kanske kompilator)
Kontrollera versionen av OpenSC
$ opensc-tool --version
Om versionen Àr mindre Àn 0.20, uppdatera eller bygg frÄn vÄrt GitHub (vid publiceringen av denna artikel var version 0.20 Ànnu inte slÀppt) eller frÄn master-grenen av huvudprojektet OpenSC senast
Genererar ett nyckelpar med följande parametrar:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bitar med parametern A), GOSTR3410-2012-256:A (GOST-2012 256 bitar med parametern A)
--id: objektidentifieraren (CKA_ID) i form av tvÄsiffriga hex-numer frÄn ASCII-tabellen. AnvÀnd endast ASCII-koder för tryckta tecken, eftersom id mÄste överföras till OpenSSL som en strÀng. Till exempel motsvarar ASCII-koden "3132" strÀngen "12". För enkelhetens skull kan du anvÀnda .
$ .\/pkcs11-tool --module \/usr\/lib\/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Vidare kommer vi att skapa ett certifikat. Nedan beskrivs tvĂ„ vĂ€gar: den första genom en CA (vi kommer att anvĂ€nda test-CA:er), den andra â ett sjĂ€lvsignerat certifikat. För detta mĂ„ste du först installera och konfigurera OpenSSL version 1.1 eller senare för att arbeta med Rutoken genom den speciella modulen rtengine enligt instruktionerna. .
Till exempel: för â--id 3132â i OpenSSL mĂ„ste du ange "pkcs11:id=12«.
Du kan anvÀnda tjÀnsterna frÄn test-CA:er, av vilka det finns mÄnga, till exempel, , och , för att skapa en certifikatförfrÄgan
Ett annat alternativ Àr att ge efter för lathet och skapa ett sjÀlvsignerat certifikat.
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Ladda upp certifikatet till enheten
$ openssl req -utf8 -x509 -keyform motor -key "pkcs11:id=12" -motor rtengine -ut cert.cer
6) Registrera certifikatet i systemet
Se till att ditt certifikat ser ut som en base64-fil:

Om ditt certifikat ser ut sÄ hÀr:

mÄste certifikatet konverteras frÄn DER-format till PEM-format (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Kontrollera igen att allt nu Àr i ordning.
LÀgg till certifikatet i listan över betrodda certifikat
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
Den sista raden skyddar listan över betrodda certifikat frÄn oavsiktlig eller avsiktlig Àndring av andra anvÀndare. Detta utesluter situationen dÀr nÄgon lÀgger till sitt certifikat hÀr och kan logga in i systemet i ditt namn.
7) StÀll in autentisering
InstÀllningen av vÄr PAM-modul Àr helt standard och görs precis som instÀllningarna för andra moduler. Skapa en fil /usr/share/pam-configs/rutoken-gost-pam som innehÄller modulens fullstÀndiga namn, om den Àr aktiverad som standard, modulens prioritet och autentiseringsparametrar.
I autentiseringsparametrarna finns det krav pÄ operationens framgÄng:
- required (obligatorisk): sÄdana moduler mÄste returnera ett positivt svar. Om resultatet av modulens anrop innehÄller ett negativt svar leder det till autentiseringsfel. FörfrÄgan kommer att avbrytas, men övriga moduler kommer att kallas.
- requisite (nödvÀndig): liknande som required, men leder omedelbart till autentiseringsfel och ignorerar övriga moduler.
- sufficient (tillrĂ€cklig): om ingen av modulerna required eller sufficient i stacken returnerar ett negativt resultat, ger modulen ett positivt svar. Ăvriga moduler kommer att ignoreras.
- optional (tillval): om det inte finns nÄgra required-moduler i stacken och ingen av modulerna sufficient returnerade ett positivt resultat, mÄste minst en av de optional-modulerna ge ett positivt svar.
InnehÄllet i filen /usr/share/pam-configs/rutoken-gost-pam:
Namn: Rutoken PAM GOST
Standard: ja
Prioritet: 800
Auth-Type: PrimÀr
Auth: tillrÀcklig /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

spara filen, dÀrefter kör
$ sudo pam-auth-update
i det framtrÀdande fönstret sÀtter vi en stjÀrna runt Rutoken PAM GOST och klickar pÄ OK

8) Kontrollera instÀllningen
För att förstÄ att allt Àr instÀllt korrekt, men utan att förlora möjligheten att logga in, skriv kommandot
$ sudo login
Ange anvÀndarnamn. Allt Àr korrekt instÀllt om systemet ber om en PIN-kod för enheten.

9) StÀll in lÄsning av datorn vid uttagning av token
Paketet libpam-pkcs11 innehÄller verktyget pkcs11_eventmgr, som gör det möjligt att utföra olika ÄtgÀrder vid PKCS#11-hÀndelser.
För konfiguration pkcs11_eventmgr fungerar som konfigurationsfil: /etc/pam_pkcs11/pkcs11_eventmgr.conf
För olika Linux-distributioner kommer kommandot som anropar lÄsning av kontot vid uttag av smartkort eller token att variera. Se. event card_remove.
Ett exempel pÄ konfigurationsfilen visas nedan:
pkcs11_eventmgr
{
# Startar i bakgrunden
daemon = true;
# InstÀllning av felmeddelanden
debug = false;
# Pollingtid i sekunder
polling_time = 1;
# Timeout för att ta bort kortet
# Standard Àr 0
expire_time = 0;
# VÀlj pkcs11-bibliotek för att arbeta med RUTOKEN
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Ă
tgÀrder med kortet
# Kortet Àr insatt:
event card_insert {
# LÀmna standardvÀrden (ingenting hÀnder)
on_error = ignore ;
action = "/bin/false";
}
# Kortet Àr uttaget
event card_remove {
on_error = ignore;
# Anropa funktionen för att lÄsa skÀrmen
# För GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# För XFCE
# action = "xflock4";
# För Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Kortet har varit uttaget under lÄng tid
event expire_time {
# LÀmna standardvÀrden (ingenting hÀnder)
on_error = ignore;
action = "/bin/false";
}
}Efter detta lÀgger du till programmet pkcs11_eventmgr till autostart. Gör detta genom att redigera filen .bash_profile:
$ nano /home//.bash_profile
LĂ€gg till raden pkcs11_eventmgr i slutet av filen och starta om.
De beskrivna stegen för att konfigurera operativsystemet kan anvÀndas som en instruktion i vilken modern Linux-distribution som helst, inklusive inhemska.

Slutsats
Datorer med Linux i ryska statliga strukturer blir allt mer populÀra, och att stÀlla in en tillförlitlig tvÄfaktorsautentisering i detta OS Àr inte alltid enkelt. Vi hoppas att denna vÀgledning hjÀlper till att lösa "lösenordsproblemet" och sÀkert skydda Ätkomsten till datorn utan att spendera mycket tid.
KĂ€lla: habr.com
