Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

Einfach Passwörter bieten keinen Schutz, während komplexe Passwörter schwer zu merken sind. Daher landen sie oft auf einem Aufkleber unter der Tastatur oder am Monitor. Um sicherzustellen, dass Passwörter bei „vergesslichen“ Nutzern im Gedächtnis bleiben und die Sicherheit nicht leidet, gibt es die Zwei-Faktor-Authentifizierung (2FA).

Durch die Kombination aus dem Besitz eines Geräts und der Kenntnis seines PIN-Codes kann der PIN-Code einfacher und leichter zu merken sein. Mängel in der Länge oder Zufälligkeit des PIN-Codes werden durch die Anforderung des physischen Besitzes und Beschränkungen beim Ausprobieren des PIN-Codes ausgeglichen.

Außerdem möchten staatliche Einrichtungen manchmal, dass alles nach den geltenden Standards funktioniert. Hierbei handelt es sich um eine Variante von 2FA für den Zugang zu Linux, um die es hier gehen wird. Ich beginne mit einer allgemeinen Einführung.

PAM-Module

Pluggable Authentication Modules (PAM) sind Module mit einer standardisierten API und Implementierungen verschiedener Authentifizierungsmethoden in Anwendungen.
Alle Dienstprogramme und Anwendungen, die mit PAM arbeiten können, greifen darauf zu und können es zur Authentifizierung von Benutzern nutzen.
In der Praxis funktioniert das etwa so: Das Login-Team greift auf PAM zu, das alle erforderlichen Überprüfungen mithilfe der im Konfigurationsfile angegebenen Module durchführt und das Ergebnis an das Login-Team zurückgibt.

librtpam

Das von der Firma „Aktiv“ entwickelte Modul fügt eine Zwei-Faktor-Authentifizierung für Benutzer über Smartcards oder USB-Token mit asymmetrischen Schlüsseln nach den neuesten Standards der heimischen Kryptografie hinzu.

Betrachten wir das Funktionsprinzip:

  • Auf dem Token wird das Benutzerzertifikat und der private Schlüssel gespeichert;
  • Das Zertifikat ist im Home-Verzeichnis des Benutzers als vertrauenswürdig gespeichert.

Der Authentifizierungsprozess verläuft wie folgt:

  1. Auf dem RuToken wird nach dem persönlichen Benutzerzertifikat gesucht.
  2. Der PIN-Code des Tokens wird angefordert.
  3. Es erfolgt eine Unterzeichnung von Zufallsdaten mit dem privaten Schlüssel direkt im Chip des RuTokens.
  4. Die erhaltene Signatur wird mithilfe des öffentlichen Schlüssels aus dem Benutzerzertifikat überprüft.
  5. Das Modul gibt das Ergebnis der Signaturüberprüfung an die aufrufende Anwendung zurück.

Es kann sich mit den Schlüsseln GOST R 34.10-2012 (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 im Rutoken generiert und verlassen während der kryptografischen Operationen niemals dessen Speicher.

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

Der Rutoken ECP 2.0 ist von der FSB und FSTEK gemäß NDF 4 zertifiziert und kann daher in Informationssystemen verwendet werden, die vertrauliche Informationen verarbeiten.

Praktische Anwendung

Fast jede moderne Linux-Distribution ist geeignet, wir verwenden als Beispiel xUbuntu 18.10.

1) Benötigte Pakete installieren

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

2) PAM-Modul mit Unterstützung für GOST hinzufügen

Laden Sie die Bibliothek mit https://download.rutoken.ru/Rutoken/PAM/
Kopieren Sie den Inhalt des Ordners PAM librtpam.so.1.0.0 in das Systemverzeichnis
/usr/lib/ или /usr/lib/x86_64-linux-gnu/или /usr/lib64

3) Paket mit librtpkcs11ecp.so installieren

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

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

Führen Sie im Terminal aus
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Wenn Sie die Zeile sehen Rutoken ECP – dann ist alles in Ordnung.

5) Zertifikat auslesen

Überprüfen Sie, ob auf dem Gerät ein Zertifikat vorhanden ist
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Wenn nach der Zeile:
Verwendung von Slot 0 mit einem vorhandenen Token (0x0)

  • zeigt Informationen zu Schlüsseln und Zertifikaten an, daher muss das Zertifikat gelesen und auf die Festplatte gespeichert werden. Führen Sie dazu den folgenden Befehl aus, wobei Sie {id} durch die ID des Zertifikats ersetzen, das Sie im vorherigen Befehl 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, gehen Sie zu Punkt 6).
  • es gibt nichts, bedeutet, dass das Gerät leer ist. Wenden Sie sich an den Administrator oder erstellen Sie die Schlüssel und Zertifikate selbst, indem Sie dem folgenden Punkt folgen.

5.1) Erstellen eines Testzertifikats

Achtung! Die beschriebenen Methoden zur Erstellung von Schlüsseln und Zertifikaten sind für Testzwecke geeignet und nicht für den Einsatz im Produktionsmodus gedacht. Dafür sollten Schlüssel und Zertifikate von einer vertrauenswürdigen Zertifizierungsstelle Ihrer Organisation oder einem akkreditierten Zertifizierungszentrum verwendet werden.
Das PAM-Modul wurde entwickelt, um lokale Computer zu schützen und ist für den Einsatz in kleinen Unternehmen gedacht. Da es nur wenige Benutzer gibt, kann der Administrator selbst das Zertifikat-Review überwachen und Konten manuell sperren, ebenso wie die Gültigkeit der Zertifikate überprüfen. Das PAM-Modul kann derzeit keine Zertifikate über CRLs prüfen und keine Vertrauensketten aufbauen.

Einfacher Weg (über den Browser)

Um ein Testzertifikat zu erhalten, nutzen Sie den Webservice „Registrierungszentrum RUTOKEN“. Der Prozess dauert nicht länger als 5 Minuten.

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

Überprüfen Sie die OpenSC-Version
$ opensc-tool --version
Wenn die Version kleiner als 0.20 ist, aktualisieren Sie oder bauen Sie den pkcs11-tool-Zweig mit Unterstützung für GOST-2012 von unserem GitHub (zum Zeitpunkt des Verfassens dieses Artikels war die Version 0.20 noch nicht veröffentlicht) oder aus dem Master-Zweig des Hauptprojekts OpenSC bis spätestens Commit 8cf1e6f

Generieren Sie ein Schlüsselpaar mit den Parametern:
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 Bit mit Parameter A), GOSTR3410-2012-256:A (GOST-2012 256 Bit mit Parameter A)

--id: Die Objektkennung (CKA_ID) besteht aus zweistelligen Hexadezimal-Zahlen aus der ASCII-Tabelle. Verwenden Sie nur die ASCII-Codes von druckbaren Zeichen, da die ID an OpenSSL als Zeichenfolge übergeben werden muss. Zum Beispiel entspricht der ASCII-Code '3132' der Zeichenfolge '12'. Zur Vereinfachung können Sie einen Online-Konverter für die Umwandlung von Zeichenfolgen in ASCII-Codes nutzen..

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

Als Nächstes werden wir ein Zertifikat erstellen. Es gibt zwei Wege: den ersten über eine Zertifizierungsstelle (wir werden Test-Zertifizierungsstellen verwenden), den zweiten über ein selbstsigniertes Zertifikat. Zuerst müssen Sie OpenSSL Version 1.1 oder neuer installieren und konfigurieren, um mit Rutoken über das spezielle Modul rtengine zu arbeiten. Nutzen Sie die Anleitung. Installation und Konfiguration von OpenSSL.
Beispiel: für '--id 3132' muss in OpenSSL 'pkcs11:id=12«.

Sie können die Dienste einer Test-Zertifizierungsstelle in Anspruch nehmen, von denen es viele gibt, zum Beispiel hier ist, hier ist и hier ist, dafür erstellen wir einen Zertifikatsantrag.

Eine andere Möglichkeit ist, faul zu sein und ein selbstsigniertes Zertifikat zu erstellen.
$ openssl req -utf8 -neu -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Laden Sie das Zertifikat auf das Gerät hoch.
$ 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:

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

Wenn Ihr Zertifikat so aussieht:

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

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

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Überprüfen Sie erneut, ob jetzt alles in Ordnung ist.

Fügen Sie das Zertifikat der 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. Dies verhindert, dass jemand sein eigenes Zertifikat hinzufügt und sich in Ihr System einloggt.

7) Authentifizierung einrichten

Die Konfiguration unseres PAM-Moduls ist ganz standardmäßig und erfolgt genau wie die Konfiguration anderer Module. Erstellen Sie die Datei, /usr/share/pam-configs/rutoken-gost-pam die den vollständigen Namen des Moduls, ob es standardmäßig aktiviert ist, die Priorität des Moduls und die Authentifizierungsparameter enthält.
In den Authentifizierungsparametern gibt es Anforderungen an den Erfolg der Operation:

  • required (erforderlich): Solche Module müssen eine positive Antwort zurückgeben. Wenn das Ergebnis des Modulaufrufs eine negative Antwort enthält, führt dies zu einem Authentifizierungsfehler. Die Anfrage wird verworfen, aber die anderen Module werden weiterhin aufgerufen.
  • requisite (notwendig): Ähnlich wie required, führt jedoch sofort zu einem Authentifizierungsfehler und ignoriert die anderen Module.
  • ausreichend: Wenn kein Modul im Stack, das als required oder sufficient bezeichnet wird, ein negatives Ergebnis zurückgibt, wird das Modul eine positive Antwort zurückgeben. Die verbleibenden Module werden ignoriert.
  • optional: Wenn im Stack keine Modules als required vorhanden sind und keines der sufficient Module eine positive Antwort zurückgibt, muss mindestens eines der optionalen Module eine positive Antwort zurückgeben.

Vollständiger Dateiinhalte /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Standard: ja
Priorität: 800
Auth-Typ: Primär
Auth: ausreichend /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

wir speichern die Datei, danach führen wir aus
$ sudo pam-auth-update
im erscheinenden Fenster setzen wir ein Sternchen neben Rutoken PAM GOST und klicken auf OK

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

8) Überprüfen der Konfiguration

Um sicherzustellen, dass alles korrekt konfiguriert ist, aber gleichzeitig die Möglichkeit des Systemzugriffs nicht zu verlieren, geben Sie den Befehl ein
$ sudo login
Geben Sie den Benutzernamen ein. Alles ist richtig konfiguriert, wenn das System nach der PIN des Geräts fragt.

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

9) Konfigurieren der Sperrung des Computers beim Entfernen des Tokens

Das Paket enthält libpam-pkcs11 das Dienstprogramm pkcs11_eventmgr, das verschiedene Aktionen bei PKCS#11-Ereignissen ausführen kann.
Zur Konfiguration pkcs11_eventmgr dient als Konfigurationsdatei: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Für verschiedene Linux-Distributionen wird das Kommando, das das Kontosperren beim Entfernen von Smartcards oder Tokens auslöst, unterschiedlich sein. Siehe. event card_remove.
Ein Beispiel für die Konfigurationsdatei ist unten dargestellt:

pkcs11_eventmgr
{
    # Im Hintergrund ausführen
    daemon = true;
     
    # Debug-Nachrichteneinstellungen
    debug = false;
 
    # Abfragezeit in Sekunden
    polling_time = 1;
 
    # Timeout für das Entfernen der Karte festlegen
    # Standardmäßig 0
    expire_time = 0;
 
    # Wahl der pkcs11-Bibliothek für den Rootoken
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Aktionen mit der Karte
    # Karte eingelegt:
    event card_insert {
        # Standardwerte beibehalten (nichts passiert)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Karte entfernt
    event card_remove {
        on_error = ignore;
         
        # Funktion für das Sperren des Bildschirms aufrufen
        
        # 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";
    }
 
    # Karte lange Zeit entfernt
    event expire_time {
        # Standardwerte beibehalten (nichts passiert)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Fügen Sie danach die Anwendung hinzu pkcs11_eventmgr in den Autostart. Bearbeiten Sie dazu die Datei .bash_profile:
$ nano /home//.bash_profile
Fügen Sie am Ende der Datei die Zeile pkcs11_eventmgr hinzu und starten Sie neu.

Die beschriebenen Schritte zur Konfiguration des Betriebssystems können als Anleitung in jedem modernen Linux-Distribution verwendet werden, einschließlich einheimischer.

Wie man PAM-Module für die lokale Authentifizierung in Linux mit GOST-2012-Schlüsseln auf einem Rutoken verwendet.

Fazit

Linux-PCs werden in russischen Regierungsinstitutionen immer beliebter, und es ist nicht immer einfach, eine zuverlässige Zwei-Faktor-Authentifizierung in diesem Betriebssystem einzurichten. Wir hoffen, dass dieses Handbuch Ihnen hilft, das "Passwortproblem" zu lösen und den Zugang zu PCs zuverlässig zu schützen, ohne viel Zeit dafür aufzuwenden.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster