
Einfache Passwörter schützen nicht und komplexe Passwörter können nicht gespeichert werden. Daher sind sie so oft auf einem Aufkleber unter der Tastatur oder auf dem Monitor zu finden. Damit Passwörter in den Köpfen „vergesslicher“ Benutzer bleiben und die Zuverlässigkeit des Schutzes nicht verloren geht, gibt es eine Zwei-Faktor-Authentifizierung (2FA).
Dank einer Kombination aus Eigentumsfaktoren des Geräts und Kenntnis seines PIN-Codes kann der PIN-Code selbst einfacher und leichter zu merken sein. Mängel in der Länge oder Zufälligkeit der PIN werden durch das Erfordernis des physischen Eigentums und Einschränkungen bei der Suche nach der PIN ausgeglichen.
Darüber hinaus kommt es in staatlichen Institutionen vor, dass alles nach GOST funktionieren soll. Über diese Option 2FA zur Eingabe von Linux und wird diskutiert. Ich werde von weitem anfangen.
PAM-Module
Pluggable Authentication Modules (PAMs) sind Module mit einer Standard-API und Implementierungen verschiedener Authentifizierungsmechanismen in Anwendungen.
Alle Dienstprogramme und Anwendungen, die mit PAM arbeiten können, nehmen sie auf und können sie zur Authentifizierung des Benutzers verwenden.
In der Praxis funktioniert dies ungefähr so: Der Anmeldebefehl wird an PAM weitergeleitet, das alle erforderlichen Überprüfungen mit den in der Konfigurationsdatei angegebenen Modulen durchführt und das Ergebnis an den Anmeldebefehl zurückgibt.
librtpam
Das von der Firma Active entwickelte Modul bietet eine Zwei-Faktor-Authentifizierung von Benutzern durch Smartcards oder USB-Token unter Verwendung asymmetrischer Schlüssel gemäß den neuesten Standards der heimischen Kryptographie.
Betrachten Sie das Prinzip seiner Arbeit:
- Das Token speichert das Zertifikat des Benutzers und seinen privaten Schlüssel.
- Das Zertifikat wird als vertrauenswürdig im Home-Verzeichnis des Benutzers gespeichert.
Der Authentifizierungsprozess ist wie folgt:
- Rutoken sucht nach dem persönlichen Zertifikat des Benutzers.
- Eine Token-PIN wird angefordert.
- Die zufälligen Daten werden auf einem privaten Schlüssel direkt im Rutoken-Chip signiert.
- Die empfangene Signatur wird mit dem öffentlichen Schlüssel aus dem Benutzerzertifikat überprüft.
- Das Modul gibt das Ergebnis der Signaturüberprüfung an die aufrufende Anwendung zurück.
Sie können sich mit den Schlüsseln GOST R 34.10-2012 (Länge 256 oder 512 Bit) oder veraltetem GOST R 34.10-2001 authentifizieren.
Sie müssen sich keine Sorgen um die Sicherheit von Schlüsseln machen - sie werden direkt in Rutoken generiert und verlassen während kryptografischer Vorgänge niemals seinen Speicher.

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 ist geeignet, zum Beispiel werden wir xUbuntu 18.10 verwenden.
1) Installieren Sie die erforderlichen Pakete
sudo apt-get install libccid pcscd opensc
Wenn Sie eine Desktopsperre mit einem Bildschirmschoner hinzufügen möchten, installieren
libpam-pkcs11
Paket
libpam-pkcs11
.
2) Fügen Sie ein PAM-Modul mit Unterstützung für GOST hinzu
Laden Sie die Bibliothek von
https://download.rutoken.ru/Rutoken/PAM/ herunter.
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 folgenden Link herunter und installieren Sie es:
https://www.rutoken.ru/support/download/pkcs/4) Wir überprüfen, ob Rutoken EDS 2.0 im System funktioniert
Führen Sie im Terminal aus
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Wenn Sie die Zeile
Rutoken ECP <no label>
ist alles in Ordnung.
5) Lesen Sie das Zertifikat
Überprüfen Sie, 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)
- Wenn Informationen zu Schlüsseln und Zertifikaten angezeigt werden , müssen Sie das Zertifikat lesen und auf der Festplatte speichern. Führen Sie dazu den folgenden Befehl aus, wobei Sie anstelle von {id} das ID-Zertifikat ersetzen müssen, das 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. - gibt es 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
Achtung! Die beschriebenen Methoden zum Erstellen von Schlüsseln und Zertifikaten eignen sich zum Testen und sind nicht für die Verwendung im Kampfmodus vorgesehen. Dazu müssen Sie Schlüssel und Zertifikate verwenden, die von einer vertrauenswürdigen Zertifizierungsstelle Ihrer Organisation oder einer akkreditierten Zertifizierungsstelle ausgestellt wurden.
Das PAM-Modul dient zum Schutz lokaler Computer und umfasst die Arbeit in kleinen Organisationen. Da es nur wenige Benutzer gibt, kann der Administrator selbst den Widerruf von Zertifikaten überwachen und Konten manuell sperren sowie die Gültigkeitsdauer von Zertifikaten. Das PAM-Modul ist noch nicht in der Lage, Zertifikate durch CRL zu überprüfen und Vertrauensketten aufzubauen.
Einfacher Weg (über Browser)
Verwenden Sie den
Webdienst Rootoken Registration Center, um ein
Testzertifikat zu erhalten. Der Vorgang dauert nicht länger als 5 Minuten.
Geek-Pfad (über Konsole und möglicherweise Compiler)
Überprüfen Sie die OpenSC-Version$ opensc-tool --version
Wenn die Version kleiner als 0,20 ist, aktualisieren oder sammeln Sie
den Zweig pkcs11-tool mit GOST-2012-Unterstützung von unserem GitHub (zum Zeitpunkt dieses Artikels war Release 0.20 noch nicht veröffentlicht) oder vom Hauptzweig des OpenSC-Hauptprojekts bis spätestens
8cf1e6f festschreibenWir generieren ein Schlüsselpaar mit Parametern:
--key-type: GOSTR3410-2012-512: (-2012 512 c ), GOSTR3410-2012-256:A (-2012 256 A)
--id:
Objektkennung (CKA_ID) als zweistellige Zeichennummer in hexadezimaler Reihenfolge aus der ASCII-Tabelle. Verwenden Sie nur ASCII-Codes für gedruckte Zeichen, z id muss OpenSSL als Zeichenfolge übergeben. Beispielsweise entsprechen die ASCII-Codes "3132" der Zeichenfolge "12".
Der Einfachheit halber können Sie den Onlinedienst zum Konvertieren von Zeichenfolgen in ASCII-Codes verwenden .
$ ./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 über die Zertifizierungsstelle (wir verwenden Testzertifizierungsstellen), die zweite - selbstsigniert. Dazu müssen Sie zuerst OpenSSL Version 1.1 oder höher installieren und konfigurieren, um mit Rutoken über ein spezielles Rtengine-Modul mithilfe
des OpenSSL-Installations- und Konfigurationshandbuchs arbeiten zu können .
Beispiel: Für '-
-id 3132
' in OpenSSL müssen Sie "
pkcs11:id=12
" angeben.
Sie können die Dienste einer Test-CA nutzen, von denen es viele gibt, zum Beispiel
hier ,
hier und
hier . Dazu erstellen wir eine Zertifikatanforderung
Eine andere Möglichkeit besteht darin, der Faulheit zu erliegen und eine selbstsignierte zu erstellen
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Laden Sie das Zertifikat auf das Gerät herunter
$ 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:

Wenn Ihr Zertifikat so aussieht:

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
Wieder überprüfen wir, ob jetzt alles in Ordnung ist.
Fügen Sie der Liste der vertrauenswürdigen Zertifikate ein Zertifikat 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 versehentlichen oder absichtlichen Änderungen durch andere Benutzer. Dies beseitigt die Situation, wenn jemand hier sein Zertifikat hinzufügt und sich in Ihrem Namen anmelden kann.
7) Konfigurieren Sie die Authentifizierung
Die Konfiguration unseres PAM-Moduls ist völlig Standard und erfolgt genauso wie die Einstellungen anderer Module. Wir erstellen in der Datei
/usr/share/pam-configs/rutoken-gost-pam
den vollständigen Namen des Moduls, unabhängig davon, ob es standardmäßig aktiviert ist,
/usr/share/pam-configs/rutoken-gost-pam
und Authentifizierungsparameter.
In den Authentifizierungsparametern gibt es Anforderungen für den Erfolg des Vorgangs:
- Erforderlich: Solche Module sollten eine positive Antwort zurückgeben. Wenn das Ergebnis des Modulaufrufs eine negative Antwort enthält, führt dies zu einem Authentifizierungsfehler. Die Anforderung wird zurückgesetzt, aber der Rest der Module wird aufgerufen.
- Erforderlich (erforderlich): Ähnlich wie erforderlich, führt jedoch sofort zu einem Authentifizierungsfehler und ignoriert den Rest der Module.
- ausreichend: Wenn vor einem solchen Modul keines der erforderlichen oder ausreichenden Module ein negatives Ergebnis zurückgibt, gibt das Modul eine positive Antwort zurück. Die restlichen Module werden ignoriert.
- optional (optional): Wenn der Stapel keine erforderlichen Module enthält und keines der ausreichenden Module ein positives Ergebnis liefert, sollte mindestens eines der optionalen Module eine positive Antwort zurückgeben.
Der vollständige Inhalt der Datei
/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

Speichern Sie die Datei und führen Sie sie aus
$ sudo pam-auth-update
Setzen Sie im angezeigten Fenster ein Sternchen in die Nähe von
Rutoken PAM GOST und klicken Sie auf
OK
8) Überprüfen Sie die Einstellung
Geben Sie den Befehl ein, um zu verstehen, dass alles konfiguriert ist, ohne die Anmeldefähigkeit zu verlieren
$ sudo login
Geben Sie Ihren Benutzernamen ein. Alles ist korrekt konfiguriert, wenn das System eine Geräte-PIN benötigt.

9) Konfigurieren Sie die Computersperre beim Extrahieren des Tokens
Das Paket
libpam-pkcs11
enthält das Dienstprogramm
pkcs11_eventmgr,
dem Sie verschiedene Aktionen ausführen können, wenn PKCS # 11-Ereignisse auftreten.
pkcs11_eventmgr
zum Konfigurieren von
pkcs11_eventmgr
die Konfigurationsdatei:
/etc/pam_pkcs11/pkcs11_eventmgr.conf
Bei verschiedenen Linux-Distributionen ist der Befehl, mit dem das Konto beim Entfernen von Smartcards oder Token gesperrt wird, unterschiedlich. Siehe 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"; } }
pkcs11_eventmgr
Anwendung
pkcs11_eventmgr
zum
pkcs11_eventmgr
. 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 den Computer neu.
Die beschriebenen Schritte zum Konfigurieren des Betriebssystems können als Anweisungen in jeder modernen Linux-Distribution verwendet werden, einschließlich inländischer.
Fazit
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. Wir werden mit diesem Handbuch zufrieden sein, um das "Passwortproblem" zu lösen und den Zugriff auf Ihren PC zuverlässig zu schützen, ohne viel Zeit damit zu verbringen.