Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

Proste hasła nie zapewniają bezpieczeństwa, a skomplikowane są zbyt trudne do zapamiętania. Dlatego często znajdują się na karteczkach pod klawiaturą lub na monitorze. Aby hasła pozostawały w głowach "zapomnianych" użytkowników, a bezpieczeństwo nie było narażone – istnieje uwierzytelnianie dwuskładnikowe (2FA).

Dzięki połączeniu czynników posiadania urządzenia i znajomości jego kodu PIN, sam kod PIN może być prostszy i łatwiejszy do zapamiętania. Niedobory w długości lub losowości kodu PIN są kompensowane wymaganiem fizycznego posiadania oraz ograniczeniami dotyczącymi odgadywania kodu PIN.

Ponadto w instytucjach publicznych bywa, że wymagają, aby wszystko działało zgodnie z normami. O takim wariancie 2FA do logowania w Linuxie będzie mowa. Zaczynając od podstaw.

Moduły PAM

Moduły uwierzytelniania instalowalne (Pluggable Authentication Modules, PAM) to moduły o standardowym API oraz implementacjach różnych mechanizmów uwierzytelniania w aplikacjach.
Wszystkie narzędzia i aplikacje, które potrafią pracować z PAM, wykorzystują je do uwierzytelnienia użytkownika.
W praktyce działa to mniej więcej tak: polecenie login zwraca się do PAM, które przeprowadza wszystkie niezbędne kontrole za pomocą modułów określonych w pliku konfiguracyjnym i zwraca wynik do polecenia login.

librtpam

Moduł opracowany przez firmę "Aktyw" dodaje uwierzytelnianie dwuskładnikowe dla użytkowników za pomocą kart inteligentnych lub tokenów USB z wykorzystaniem asymetrycznych kluczy zgodnie z najnowszymi standardami krajowej kryptografii.

Rozważmy zasadę jego działania:

  • na tokenie przechowywany jest certyfikat użytkownika oraz jego klucz prywatny;
  • certyfikat jest zapisany w katalogu domowym użytkownika jako zaufany.

Proces uwierzytelnienia przebiega następująco:

  1. Na Rutokenie następuje wyszukiwanie osobistego certyfikatu użytkownika.
  2. Zostaje poproszony o kod PIN tokena.
  3. Następuje podpisanie losowych danych swoim kluczem prywatnym bezpośrednio w chipie Rutokena.
  4. Uzyskany podpis jest weryfikowany przy użyciu klucza publicznego z certyfikatu użytkownika.
  5. Moduł zwraca wynik weryfikacji podpisu do aplikacji, która go wywołała.

Można uwierzytelnić się za pomocą kluczy zgodnych z normą ГОСТ Р 34.10-2012 (o długości 256 lub 512 bitów) lub przestarzałą normą ГОСТ Р 34.10-2001.

Nie musisz się martwić o bezpieczeństwo kluczy – są generowane bezpośrednio w Rutokenie i nigdy nie opuszczają jego pamięci podczas operacji kryptograficznych.

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

Rutoken ECP 2.0 jest certyfikowany przez FSB i FSTEK zgodnie z NDV 4, dlatego może być stosowany w systemach informacyjnych przetwarzających poufne informacje.

Praktyczne zastosowanie

Pasuje praktycznie każdy nowoczesny Linux, jako przykład użyjemy xUbuntu 18.10.

1) Instalujemy niezbędne pakiety

sudo apt-get install libccid pcscd opensc
Jeśli chcesz dodać blokadę ekranu przez wygaszacz ekranu – dodatkowo zainstaluj pakiet libpam-pkcs11.

2) Dodajemy moduł PAM z obsługą GOST

Ładujemy bibliotekę z https://download.rutoken.ru/Rutoken/PAM/
Kopiujemy zawartość folderu PAM librtpam.so.1.0.0 do folderu systemowego
/usr/lib/ lub /usr/lib/x86_64-linux-gnu/lub /usr/lib64

3) Instalujemy pakiet z librtpkcs11ecp.so

Ładujemy i instalujemy pakiet DEB lub RPM pod tym linkiem: https://www.rutoken.ru/support/download/pkcs/

4) Sprawdzamy, czy Rutoken ECP 2.0 działa w systemie

W terminalu wykonujemy
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Jeśli zobaczysz linię Rutoken ECP – oznacza to, że wszystko jest w porządku.

5) Odczytujemy certyfikat

Sprawdzamy, czy na urządzeniu jest certyfikat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Jeśli po linii:
Using slot 0 with a present token (0x0)

  • wyświetla się informacja o kluczach i certyfikatach, należy odczytać certyfikat i zapisać na dysku. W tym celu wykonaj następujące polecenie, gdzie zamiast {id} wstaw ID certyfikatu, który widziałeś w wyniku poprzedniego polecenia:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    W przypadku, gdy plik cert.crt jest utworzony, przechodzimy do punktu 6).
  • nie ma nic, oznacza to, że urządzenie jest puste. Skontaktuj się z administratorem lub stwórz klucze i certyfikat samodzielnie, postępując zgodnie z kolejnym punktem.

5.1) Tworzymy testowy certyfikat

Uwaga! Opisane metody tworzenia kluczy i certyfikatów nadają się do testów i nie są przeznaczone do użycia w trybie produkcyjnym. W tym celu należy używać kluczy i certyfikatów wydanych przez zaufany urząd certyfikacji Twojej organizacji lub akredytowane biuro certyfikacji.
Moduł PAM został stworzony w celu ochrony lokalnych komputerów i zakłada pracę w małych organizacjach. Ponieważ użytkowników jest niewielu, Administrator może samodzielnie monitorować status certyfikatów oraz ręcznie blokować konta, podobnie jak czas ich ważności. Moduł PAM obecnie nie potrafi sprawdzać certyfikatów w oparciu o CRL ani budować łańcuchów zaufania.

Prosta ścieżka (przez przeglądarkę)

Aby uzyskać certyfikat testowy, użyj usługi internetowej „Centrum rejestracji RUTOKEN”. Proces zajmie nie więcej niż 5 minut.

Ścieżka geeków (przez konsolę i być może kompilator)

Sprawdź wersję OpenSC
$ opensc-tool --version
Jeśli wersja jest niższa niż 0.20, zaktualizuj lub skompiluj gałąź pkcs11-tool z obsługą GOST-2012 z naszego GitHub-a (w momencie publikacji tego artykułu wersja 0.20 jeszcze nie została wydana) lub z gałęzi master głównego projektu OpenSC nie później niż commita 8cf1e6f

Generujemy parę kluczy z parametrami:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bit z parametrem A), GOSTR3410-2012-256:A (GOST-2012 256 bit z parametrem A)

--id: identyfikator obiektu (CKA_ID) w postaci dwucyfrowych numerów szesnastkowych z tabeli ASCII. Używaj tylko kodów ASCII znaków drukowanych, ponieważ id musi zostać przekazane OpenSSL w postaci ciągu. Na przykład kod ASCII '3132' odpowiada ciągowi „12”. Dla ułatwienia można skorzystać z usługi online do konwersji ciągu na kody ASCII.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

Następnie stworzymy certyfikat. Poniżej zostaną opisane dwie ścieżki: pierwsza przez UCe (użyjemy testowych UCe), druga – samopodpisany. W tym celu najpierw musisz zainstalować i skonfigurować OpenSSL wersji 1.1 lub nowszej, aby pracować z RUTOKEN za pomocą specjalnego modułu rtengine według instrukcji Instalacja i konfiguracja OpenSSL.
Na przykład: dla ‘--id 3132w OpenSSL należy podać „pkcs11:id=12«.

Możesz skorzystać z usług testowego UCe, których jest wiele, na przykład, oto, oto i oto, w tym celu stwórzmy żądanie certyfikatu

Inna opcja – można się leniwy i stworzyć certyfikat samopodpisany
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Ładujemy certyfikat na urządzenie
$ openssl req -utf8 -x509 -silnik keyform -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Rejestrujemy certyfikat w systemie

Upewnij się, że twój certyfikat wygląda jak plik base64:

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

Jeśli twój certyfikat wygląda tak:

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

to należy przekonwertować certyfikat z formatu DER na format PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Jeszcze raz sprawdzamy, czy teraz wszystko jest w porządku.

Dodajemy certyfikat do listy zaufanych certyfikatów
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Ostatnia linia chroni listę zaufanych certyfikatów przed przypadkowymi lub zamierzonymi zmianami przez innych użytkowników. Wyklucza to sytuację, w której ktoś doda swój certyfikat i mógłby logować się jako Ty.

7) Konfigurujemy uwierzytelnianie

Konfiguracja naszego modułu PAM jest całkowicie standardowa i jest wykonywana tak samo jak konfiguracja innych modułów. Tworzymy w pliku /usr/share/pam-configs/rutoken-gost-pam pełną nazwę modułu, czy jest on domyślnie włączony, priorytet modułu i parametry uwierzytelniania.
W parametrach uwierzytelniania znajdują się wymagania dotyczące pomyślności operacji:

  • required (wymagany): takie moduły muszą zwrócić pozytywną odpowiedź. Jeśli wynik wywołania modułu zawiera odpowiedź negatywną, prowadzi to do błędu uwierzytelniania. Żądanie zostanie odrzucone, ale pozostałe moduły zostaną wywołane.
  • requisite (konieczny): podobny do required, ale od razu prowadzi do awarii uwierzytelniania i ignoruje pozostałe moduły.
  • sufficient (wystarczający): jeśli przed takim modułem żaden z modułów required lub sufficient nie zwrócił negatywnego wyniku, moduł zwraca pozytywną odpowiedź. Pozostałe moduły zostaną zignorowane.
  • optional (dodatkowy): jeśli w stosie brak modułów required i żaden z modułów sufficient nie zwrócił pozytywnego wyniku, to przynajmniej jeden z modułów optional musi zwrócić pozytywną odpowiedź.

Pełna treść pliku /usr/share/pam-configs/rutoken-gost-pam:
Nazwa: Rutoken PAM GOST
Domyślnie: tak
Priorytet: 800
Rodzaj autoryzacji: Podstawowy
Autoryzacja: wystarczająca /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

zapisujemy plik, a następnie wykonujemy
$ sudo pam-auth-update
w pojawiającym się oknie stawiamy gwiazdkę przy Rutoken PAM GOST i klikamy OK

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

8) Sprawdzamy ustawienia

Aby upewnić się, że wszystko jest skonfigurowane, ale nie stracić możliwości logowania, wprowadź polecenie
$ sudo login
Wprowadź nazwę użytkownika. Wszystko jest skonfigurowane poprawnie, jeśli system poprosi o kod PIN urządzenia.

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

9) Konfigurujemy blokowanie komputera przy wyjmowaniu tokena

W skład pakietu libpam-pkcs11 wchodzi narzędzie pkcs11_eventmgr, które pozwala na wykonywanie różnych działań w przypadku wystąpienia zdarzeń PKCS#11.
Aby skonfigurować pkcs11_eventmgr służy plik konfiguracyjny: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Dla różnych dystrybucji Linuksa, komenda, która wywołuje blokadę konta przy wyjmowaniu kart inteligentnych lub tokena, będzie różna. Zob. event card_remove.
Przykład pliku konfiguracyjnego przedstawiony poniżej:

pkcs11_eventmgr
{
    # Uruchom w tle
    daemon = true;
     
    # Ustawienia wiadomości debugowania
    debug = false;
 
    # Czas zapytania w sekundach
    polling_time = 1;
 
    # Ustawienie limitu czasowego na usunięcie karty
    # Domyślnie 0
    expire_time = 0;
 
    # Wybór biblioteki pkcs11 do pracy z RUToken
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Działania z kartą
    # Karta włożona:
    event card_insert {
        # Pozostawiamy wartości domyślne (nic się nie dzieje)
        on_error = ignore;
 
        action = "\/bin\/false";
    }
 
    # Karta wyciągnięta
    event card_remove {
        on_error = ignore;
         
        # Wywołaj funkcję blokady ekranu
        
        # Dla GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver \/org\/gnome\/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Dla XFCE
        # action = "xflock4";
        
        # Dla Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Karta długo nie była wyciągnięta
    event expire_time {
        # Pozostawiamy wartości domyślne (nic się nie dzieje)
        on_error = ignore;
 
        action = "\/bin\/false";
    }
}

Po tym dodaj aplikację pkcs11_eventmgr do autostartu. W tym celu edytuj plik .bash_profile:
$ nano /home//.bash_profile
Dodaj na końcu pliku linię pkcs11_eventmgr i zrestartuj komputer.

Opisane kroki konfiguracji systemu operacyjnego można wykorzystać jako instrukcję w każdym nowoczesnym dystrybucji Linuxa, w tym krajowym.

Jak używać modułów PAM do lokalnej autoryzacji w systemie Linux za pomocą kluczy GOST-2012 na Rutokenie

Podsumowanie

Komputery z Linuxem w rosyjskich instytucjach państwowych stają się coraz popularniejsze, a skonfigurowanie niezawodnej dwuetapowej autoryzacji w tym systemie operacyjnym nie zawsze jest proste. Będziemy zadowoleni, że poprzez ten przewodnik pomożemy rozwiązać "problem haseł" i niezawodnie zabezpieczyć dostęp do komputera, nie poświęcając na to dużo czasu.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster