So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

Einfache Passwörter sind nicht sicher und komplexe Passwörter kann man sich nicht merken. Deshalb landen sie oft auf einem Zettel unter der Tastatur oder auf dem Monitor. Damit Passwörter „vergesslichen“ Nutzern im Gedächtnis bleiben und die Zuverlässigkeit des Schutzes nicht verloren geht, gibt es die Zwei-Faktor-Authentifizierung (2FA).

Aufgrund der Kombination aus dem Besitz eines Geräts und der Kenntnis seiner PIN kann die PIN selbst einfacher und leichter zu merken sein. Nachteile hinsichtlich der Länge oder Zufälligkeit der PIN werden durch die Anforderung des physischen Besitzes und Einschränkungen bei PIN-Brute-Force ausgeglichen.

Darüber hinaus kommt es in Regierungsbehörden vor, dass alles nach GOST funktionieren soll. Diese 2FA-Option für die Anmeldung bei Linux wird besprochen. Ich fange aus der Ferne an.

PAM-Module

Pluggable Authentication Modules (PAM) sind Module mit einer Standard-API und Implementierungen verschiedener Authentifizierungsmechanismen in Anwendungen.
Alle Dienstprogramme und Anwendungen, die mit PAM arbeiten können, greifen sie auf und können sie zur Benutzerauthentifizierung verwenden.
In der Praxis funktioniert das etwa so: Der Login-Befehl ruft PAM auf, das alle notwendigen Prüfungen anhand der in der Konfigurationsdatei angegebenen Module durchführt und das Ergebnis an den Login-Befehl zurückgibt.

librtpam

Das von der Firma Aktiv entwickelte Modul fügt eine Zwei-Faktor-Authentifizierung von Benutzern mithilfe von Smartcards oder USB-Tokens unter Verwendung asymmetrischer Schlüssel gemäß den neuesten Standards der inländischen Kryptographie hinzu.

Schauen wir uns das Funktionsprinzip an:

  • Der Token speichert das Zertifikat des Benutzers und seinen privaten Schlüssel;
  • Das Zertifikat wird im Home-Verzeichnis des Benutzers als vertrauenswürdig gespeichert.

Der Authentifizierungsprozess läuft wie folgt ab:

  1. Rutoken sucht nach dem persönlichen Zertifikat des Benutzers.
  2. Die Token-PIN wird abgefragt.
  3. Zufällige Daten werden direkt im Rutoken-Chip auf dem privaten Schlüssel signiert.
  4. Die resultierende Signatur wird mithilfe des öffentlichen Schlüssels aus dem Zertifikat des Benutzers überprüft.
  5. Das Modul gibt das Ergebnis der Signaturüberprüfung an die aufrufende Anwendung zurück.

Sie können sich mit GOST R 34.10-2012-Schlüsseln (Länge 256 oder 512 Bit) oder dem veralteten GOST R 34.10-2001 authentifizieren.

Sie müssen sich keine Sorgen um die Sicherheit der Schlüssel machen – sie werden direkt in Rutoken generiert und verlassen während kryptografischer Vorgänge niemals den Speicher.

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

Rutoken EDS 2.0 ist vom FSB und FSTEC gemäß NDV 4 zertifiziert und kann daher in Informationssystemen verwendet werden, die vertrauliche Informationen verarbeiten.

Praktische Anwendung

Fast jedes moderne Linux reicht aus, zum Beispiel verwenden wir xUbuntu 18.10.

1) Installieren Sie die erforderlichen Pakete

sudo apt-get install libccid pcscd opensc
Wenn Sie eine Desktop-Sperre mit Bildschirmschoner hinzufügen möchten, installieren Sie das Paket zusätzlich libpam-pkcs11.

2) Fügen Sie ein PAM-Modul mit GOST-Unterstützung hinzu

Laden der Bibliothek von https://download.rutoken.ru/Rutoken/PAM/
Kopieren Sie den Inhalt des PAM-Ordners librtpam.so.1.0.0 in den Systemordner
/usr/lib/ oder /usr/lib/x86_64-linux-gnu/oder /usr/lib64

3) Installieren Sie das Paket mit librtpkcs11ecp.so

Laden Sie das DEB- oder RPM-Paket über den Link herunter und installieren Sie es: https://www.rutoken.ru/support/download/pkcs/

4) Überprüfen Sie, ob Rutoken EDS 2.0 im System funktioniert

Im Terminal führen wir aus
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Wenn Sie die Linie sehen Rutoken ECP <no label> - es bedeutet, dass alles in Ordnung ist.

5) Lesen Sie das Zertifikat

Überprüfen, ob das Gerät über ein Zertifikat verfügt
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Wenn nach der Zeile:
Using slot 0 with a present token (0x0)

  • Informationen werden angezeigt Bei Schlüsseln und Zertifikaten müssen Sie das Zertifikat lesen und auf der Festplatte speichern. Führen Sie dazu den folgenden Befehl aus, wobei Sie anstelle von {id} die Zertifikats-ID ersetzen müssen, die Sie in der Ausgabe des vorherigen Befehls gesehen haben:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Wenn die Datei cert.crt erstellt wurde, fahren Sie mit Schritt 6 fort.
  • Nein nichts, dann ist das Gerät leer. Wenden Sie sich an Ihren Administrator oder erstellen Sie die Schlüssel und das Zertifikat selbst, indem Sie den nächsten Schritt ausführen.

5.1) Erstellen Sie ein Testzertifikat

Aufmerksamkeit! Die beschriebenen Methoden zur Erstellung von Schlüsseln und Zertifikaten eignen sich zum Testen und sind nicht für den Einsatz im Kampfmodus vorgesehen. Dazu müssen Sie Schlüssel und Zertifikate verwenden, die von der vertrauenswürdigen Zertifizierungsstelle Ihrer Organisation oder einer akkreditierten Zertifizierungsstelle ausgestellt wurden.
Das PAM-Modul dient dem Schutz lokaler Computer und ist für den Einsatz in kleinen Organisationen konzipiert. Da nur wenige Benutzer vorhanden sind, kann der Administrator die Sperrung von Zertifikaten überwachen und Konten sowie die Gültigkeitsdauer von Zertifikaten manuell sperren. Das PAM-Modul weiß noch nicht, wie man Zertifikate mithilfe von CRLs überprüft und Vertrauensketten aufbaut.

Der einfache Weg (per Browser)

Um ein Testzertifikat zu erhalten, verwenden Sie Webdienst „Rutoken Registration Center“. Der Vorgang dauert nicht länger als 5 Minuten.

Der Geek-Weg (über die Konsole und möglicherweise den Compiler)

Überprüfen Sie die OpenSC-Version
$ opensc-tool --version
Wenn die Version kleiner als 0.20 ist, aktualisieren oder erstellen Sie pkcs11-tool-Zweig mit GOST-2012-Unterstützung von unserem GitHub (zum Zeitpunkt der Veröffentlichung dieses Artikels war Release 0.20 noch nicht veröffentlicht) oder spätestens vom Master-Zweig des OpenSC-Hauptprojekts Commit 8cf1e6f

Generieren Sie ein Schlüsselpaar mit den folgenden Parametern:
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: Objekt-ID (CKA_ID) als zweistellige Hexadezimalzeichen-Nummern aus der ASCII-Tabelle. Verwenden Sie für druckbare Zeichen nur ASCII-Codes, weil... Die ID muss als Zeichenfolge an OpenSSL übergeben werden. Beispielsweise entspricht der ASCII-Code „3132“ der Zeichenfolge „12“. Der Einfachheit halber können Sie verwenden Onlinedienst zur Konvertierung von Strings in ASCII-Codes.

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

Als nächstes erstellen wir ein Zertifikat. Im Folgenden werden zwei Möglichkeiten beschrieben: Die erste erfolgt über eine Zertifizierungsstelle (wir werden Test-CAs verwenden), die zweite ist selbstsigniert. Dazu müssen Sie zunächst OpenSSL Version 1.1 oder höher installieren und konfigurieren, um mit Rutoken über ein spezielles RTEngine-Modul mithilfe des Handbuchs zu arbeiten OpenSSL installieren und konfigurieren.
Zum Beispiel: für '--id 3132' in OpenSSL müssen Sie angeben:pkcs11:id=12«.

Sie können die Dienste einer Test-CA nutzen, von denen es viele gibt, zum Beispiel hier, hier и hier, hierfür erstellen wir eine Zertifikatsanfrage

Eine andere Möglichkeit besteht darin, der Faulheit nachzugeben und ein Selbstsignatur zu erstellen
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Hochladen des Zertifikats auf das Gerät
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Registrieren Sie das Zertifikat im System

Stellen Sie sicher, dass Ihr Zertifikat wie eine Base64-Datei aussieht:

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

Wenn Ihr Zertifikat so aussieht:

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

Dann müssen Sie das Zertifikat vom DER-Format in das PEM-Format (base64) konvertieren.

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Wir prüfen noch einmal, ob jetzt alles in Ordnung ist.

Fügen Sie das Zertifikat zur Liste der vertrauenswürdigen Zertifikate hinzu
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Die letzte Zeile schützt die Liste der vertrauenswürdigen Zertifikate vor versehentlicher oder absichtlicher Änderung durch andere Benutzer. Dadurch wird verhindert, dass jemand hier sein Zertifikat hinzufügt und sich in Ihrem Namen anmelden kann.

7) Richten Sie die Authentifizierung ein

Die Einrichtung unseres PAM-Moduls ist völlig Standard und erfolgt genauso wie die Einrichtung anderer Module. In Datei erstellen /usr/share/pam-configs/rutoken-gost-pam Enthält den vollständigen Namen des Moduls, ob es standardmäßig aktiviert ist, die Priorität des Moduls und Authentifizierungsparameter.
Die Authentifizierungsparameter enthalten Anforderungen für den Erfolg der Operation:

  • erforderlich: Solche Module müssen eine positive Antwort zurückgeben. Wenn das Ergebnis eines Modulaufrufs eine negative Antwort enthält, führt dies zu einem Authentifizierungsfehler. Die Anfrage wird verworfen, aber die verbleibenden Module werden aufgerufen.
  • Required: Ähnlich wie Required, aber die Authentifizierung schlägt sofort fehl und ignoriert andere Module.
  • ausreichend: Wenn keines der erforderlichen oder ausreichenden Module vor einem solchen Modul ein negatives Ergebnis zurückgegeben hat, gibt das Modul eine positive Antwort zurück. Die restlichen Module werden ignoriert.
  • optional: Wenn keine erforderlichen Module auf dem Stapel vorhanden sind und keines der ausreichenden Module ein positives Ergebnis zurückgibt, muss mindestens eines der optionalen Module ein positives Ergebnis zurückgeben.

Vollständiger Dateiinhalt /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

Speichern Sie die Datei und führen Sie sie dann aus
$ sudo pam-auth-update
Fügen Sie im angezeigten Fenster ein Sternchen daneben ein Rutoken PAM GOST und drücken Sie OK

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

8) Überprüfen Sie die Einstellungen

Um zu verstehen, dass alles konfiguriert ist, aber gleichzeitig die Möglichkeit, sich beim System anzumelden, nicht verloren geht, geben Sie den Befehl ein
$ sudo login
Geben Sie Ihren Benutzernamen ein. Wenn das System einen Geräte-PIN-Code benötigt, ist alles korrekt konfiguriert.

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

9) Konfigurieren Sie den Computer so, dass er beim Extrahieren des Tokens blockiert wird

Im Paket enthalten libpam-pkcs11 Dienstprogramm enthalten pkcs11_eventmgr, Dadurch können Sie verschiedene Aktionen ausführen, wenn PKCS#11-Ereignisse auftreten.
Für Einstellungen pkcs11_eventmgr dient als Konfigurationsdatei: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Bei verschiedenen Linux-Distributionen unterscheidet sich der Befehl, der bewirkt, dass ein Konto gesperrt wird, wenn eine Smartcard oder ein Token entfernt wird. Cm. event card_remove.
Eine Beispielkonfigurationsdatei ist unten dargestellt:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Danach fügen Sie die Anwendung hinzu pkcs11_eventmgr zum Start. Bearbeiten Sie dazu die Datei .bash_profile:
$ nano /home/<имя_пользователя>/.bash_profile
Fügen Sie die Zeile pkcs11_eventmgr am Ende der Datei hinzu und starten Sie neu.

Die beschriebenen Schritte zum Einrichten des Betriebssystems können als Anleitung in jeder modernen Linux-Distribution verwendet werden, auch in inländischen.

So verwenden Sie PAM-Module für die lokale Authentifizierung unter Linux mithilfe von GOST-2012-Schlüsseln auf Rutoken

Abschluss

Linux-PCs werden in russischen Regierungsbehörden immer beliebter und die Einrichtung einer zuverlässigen Zwei-Faktor-Authentifizierung in diesem Betriebssystem ist nicht immer einfach. Gerne helfen wir Ihnen mit dieser Anleitung dabei, das „Passwort-Problem“ zu lösen und den Zugriff auf Ihren PC zuverlässig zu schützen, ohne viel Zeit damit zu verbringen.

Source: habr.com

Kommentar hinzufügen