
Enkle adgangskoder beskytter ikke, og komplekse adgangskoder er svære at huske. Derfor ender de ofte på en seddel under tastaturet eller på skærmen. For at adgangskoder kan huskes af de 'glemsomme' brugere, og for at sikkerheden ikke bliver kompromitteret, er der to-faktor autentifikation (2FA).
Takket være kombinationen af ejerskab af en enhed og kendskab til dens PIN-kode kan selve PIN-koden være enklere og lettere at huske. Mangler i længden eller tilfældigheden af PIN-koden kompenseres af kravet om fysisk ejerskab og begrænsninger i forhold til at prøve PIN-koden.
Desuden kan det i offentlige institutioner være nødvendigt, at alt fungerer i overensstemmelse med danske standarder. Sådan en mulighed for 2FA til login i Linux vil jeg tale om. Lad mig starte fra begyndelsen.
PAM-moduler
Pluggable Authentication Modules (PAM) er moduler med et standard API og implementeringer af forskellige autentifikationsmekanismer i applikationer.
Alle værktøjer og applikationer, der kan arbejde med PAM, kan tilgå dem og bruge dem til brugerautentifikation.
I praksis fungerer det nogenlunde således: login-kommandoen henvender sig til PAM, der udfører alle nødvendige kontroller ved hjælp af de angivne moduler i konfigurationsfilen og returnerer resultatet tilbage til login-kommandoen.
librtpam
Modulet разработан af 'Aktiv' tilføjer to-faktor autentifikation af brugere via smartcards eller USB-tokens ved hjælp af asymmetriske nøgler i henhold til de nyeste standarder for national kryptografi.
Lad os se på, hvordan det fungerer:
- Der er gemt et bruger certifikat og en privat nøgle på tokenet;
- Certifikatet er gemt i brugerens hjemmemappe som betroet.
Autentifikationsprocessen foregår på følgende måde:
- På Rutoken søges der efter brugerens personlige certifikat.
- PIN-koden til tokenet anmodes om.
- Der underskrives tilfældige data med den private nøgle direkte i chippen på Rutoken.
- Den opnåede underskrift kontrolleres med den offentlige nøgle fra brugerens certifikat.
- Modulet returnerer resultatet af signaturkontrollen til den kaldende applikation.
Det er muligt at autentificere sig med nøgler baseret på GOST R 34.10-2012 (længder på 256 eller 512 bit) eller den forældede GOST R 34.10-2001.
Du behøver ikke at bekymre dig om sikkerheden af nøglerne – de genereres direkte i Rutoken og forlader aldrig hukommelsen under kryptografiske operationer.

Rutoken ECP 2.0 er certificeret af FSB og FSTEK i henhold til NDU 4, og kan derfor bruges i informationssystemer, der behandler fortrolige oplysninger.
Praktisk anvendelse
Næsten enhver moderne Linux vil fungere, til illustration vil vi bruge xUbuntu 18.10.
1) Installer de nødvendige pakker
sudo apt-get install libccid pcscd opensc
Hvis du vil tilføje en skærmbloker med skærmskånsler – installér desuden pakken libpam-pkcs11.
2) Tilføj PAM-modul med støtte for GOSTs
Indlæs biblioteket fra
Kopier indholdet af mappen PAM librtpam.so.1.0.0 til systemmappen
/usr/lib/ eller /usr/lib/x86_64-linux-gnu/eller /usr/lib64
3) Installer pakken med librtpkcs11ecp.so
Hent og installer DEB- eller RPM-pakken fra følgende link:
4) Tjek, at Rutoken ECP 2.0 fungerer i systemet
Kør i terminalen
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Hvis du ser linjen Rutoken ECP – så er alt i orden.
5) Læs certifikatet
Kontroller, at der er et certifikat på enheden
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Hvis der efter linjen:
Using slot 0 with a present token (0x0)
- vises oplysninger om nøgler og certifikater, skal du hente certifikatet og gemme det på disken. Udfør følgende kommando, hvor du skal indtaste ID'et, som du så i output fra den foregående kommando:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Hvis filen cert.crt er oprettet, går vi videre til punkt 6). - der er intet, betyder det, at enheden er tom. Kontakt administratoren, eller opret nøgler og certifikat selv ved at følge næste punkt.
5.1) Opret et testcertifikat
Advarsel! De beskrevne metoder til at oprette nøgler og certifikater er velegnede til testformål og ikke beregnet til brug i produktionsmiljøer. Til dette skal du bruge nøgler og certifikater udstedt af et betroet certifikationscenter fra din organisation eller et akkrediteret godkendelsescenter.
PAM-modulet er designet til at beskytte lokale computere og indebærer arbejde i små organisationer. Da der er få brugere, kan Administrator selv overvåge certifikatets tilbagemeldinger og manuelt blokere brugerkonti samt styre certifikatets udløbstid. PAM-modulet kan endnu ikke kontrollere certifikater via CRL og opbygge tillidskæder.
Den nemme vej (gennem browseren)
For at få et testcertifikat, brug . Processen tager ikke mere end 5 minutter.
Nørdvejen (gennem konsollen og muligvis compileren)
Tjek versionen af OpenSC
$ opensc-tool --version
Hvis versionen er mindre end 0.20, så opdater eller byg fra vores GitHub (på tidspunktet for denne artikels udgivelse, var version 0.20 endnu ikke udgivet) eller fra master-grenen af hovedprojektet OpenSC senest
Generer en nøglepar med følgende parametre:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit med parameter A), GOSTR3410-2012-256:A (GOST-2012 256 bit med parameter A)
--id: objektidentifikatoren (CKA_ID) i form af to cifre i hex fra ASCII-tabellen. Brug kun ASCII-koder for trykte tegn, da id skal gives til OpenSSL som en streng. For eksempel, svarer ASCII-koden "3132" til strengen "12". For nemhedens skyld kan du bruge .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Dernæst vil vi oprette et certifikat. Nedenfor vil der blive beskrevet to veje: den første gennem CA (vi vil bruge test-CA'er), den anden – selvsigneret. For dette skal du først installere og konfigurere OpenSSL version 1.1 eller nyere for at arbejde med RUTOKEN gennem den specielle modul rtengine ved hjælp af vejledningen .
For eksempel: til ‘--id 3132' i OpenSSL skal det angives som "pkcs11:id=12«.
Du kan bruge tjenesterne fra test-CA'er, der er mange af, for eksempel, , og , for at gøre dette vil vi oprette en certifikatanmodning
Et andet alternativ er at give efter for dovenskab og oprette en selvsigneret
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Uploader certifikatet til enheden
$ openssl req -utf8 -x509 -keyform motor -key "pkcs11:id=12" -motor rtengine -ud cert.cer
6) Registrer certifikatet i systemet
Sørg for, at dit certifikat ser ud som en base64-fil:

Hvis dit certifikat ser sådan ud:

skal certifikatet konverteres fra DER-format til PEM-format (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Tjek igen, at alt nu er i orden.
Tilføj certifikatet til listen over betroede certifikater
$ mkdir ~/\.eid
$ chmod 0755 ~/\.eid
$ cat cert.pem >> ~/\.eid/authorized_certificates
$ chmod 0644 ~/\.eid/authorized_certificates
Den sidste linje beskytter listen over betroede certifikater mod utilsigtede eller intentionale ændringer fra andre brugere. Dette forhindrer situationen, hvor nogen tilføjer deres eget certifikat og får adgang til systemet i dit navn.
7) Konfigurerer autentificeringen
Konfigurationen af vores PAM-modul er helt standard og udføres på samme måde som konfigurationen af andre moduler. Opret i filen /usr/share/pam-configs/rutoken-gost-pam som indeholder det fulde navn på modulet, om det er aktiveret som standard, modulens prioritet og autentificeringsparametre.
I autentificeringsparametrene er der krav til operationens succes:
- required (påkrævet): sådanne moduler skal returnere et positivt svar. Hvis resultatet af modulets kald indeholder et negativt svar, fører det til en autentificeringsfejl. Anmodningen vil blive afvist, men de resterende moduler vil blive kaldt.
- requisite (nødvendigt): ligner required, men fører straks til autentificeringsfejl og ignorerer de øvrige moduler.
- sufficient (tilstrækkeligt): hvis der ikke er nogen required eller sufficient moduler før dette modul, der returnerer et negativt resultat, vil modulet returnere et positivt svar. De resterende moduler vil blive ignoreret.
- optional (valgfrit): hvis der ikke findes required moduler i stakken, og ingen sufficient moduler returnerede et positivt resultat, skal mindst ét af de optional moduler returnere et positivt svar.
Filens fulde indhold /usr/share/pam-configs/rutoken-gost-pam:
Navn: Rutoken PAM GOST
Standard: ja
Prioritet: 800
Auth-Type: Primær
Auth: tilstrækkelig /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

gem filen, hvorefter vi udfører
$ sudo pam-auth-update
i det fremkomne vindue sætter vi et stjernetegn ved Rutoken PAM GOST og klikker på OK

8) Kontrollerer opsætningen
For at forstå, at alt er korrekt konfigureret, men stadig ikke miste muligheden for at logge ind på systemet, indtast kommandoen
$ sudo login
Indtast brugernavnet. Alt er korrekt konfigureret, hvis systemet beder om en enheds PIN-kode.

9) Konfigurerer låsning af computeren ved udtagning af token
Pakken indeholder værktøjet libpam-pkcs11 pkcs11_eventmgr, som muliggør forskellige handlinger ved opståen af PKCS#11-hændelser. For at konfigurere
pkcs11_eventmgr tjener konfigurationsfilen: For forskellige Linux-distributioner vil kommandoen, der udløser låsning af kontoen ved udtagning af smartkort eller tokens, variere. Se. /etc/pam_pkcs11/pkcs11_eventmgr.conf
event card_remove Eksempel på konfigurationsfilen er angivet nedenfor:.
Et eksempel på konfigurationsfilen vises nedenfor:
pkcs11_eventmgr
{
# Kørsel i baggrunden
daemon = true;
# Indstilling af fejlmeddelelser
debug = false;
# Spørgetid i sekunder
polling_time = 1;
# Indstilling af timeout for kortfjerning
# Som standard 0
expire_time = 0;
# Valg af pkcs11-bibliotek til arbejde med RUTOKEN
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Handlinger med kortet
# Kortet indsættes:
event card_insert {
# Behold standardværdierne (intet sker)
on_error = ignore ;
action = "/bin/false";
}
# Kortet tages ud
event card_remove {
on_error = ignore;
# Kald funktionen til at låse skærmen
# For GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# For XFCE
# action = "xflock4";
# For Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Kortet har været udtaget i lang tid
event expire_time {
# Behold standardværdierne (intet sker)
on_error = ignore;
action = "/bin/false";
}
}Efter dette skal du tilføje applikationen tjener konfigurationsfilen: til opstart. For at gøre dette skal du redigere filen .bash_profile:
$ nano /home//.bash_profile
Tilføj linjen pkcs11_eventmgr til slutningen af filen og genstart.
De beskrevne trin til opsætning af operativsystemet kan bruges som en vejledning i enhver moderne Linux-distribution, inklusive indenlandske.

Konklusion
PC'er med Linux bliver stadig mere populære i russiske statslige institutioner, og det er ikke altid nemt at konfigurere en pålidelig to-faktor autentificering i dette OS. Vi håber, at denne vejledning vil hjælpe med at løse "kodeordproblemet" og sikre adgang til PC'en uden at bruge meget tid.
Kilde: habr.com
