
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:
- Auf dem RuToken wird nach dem persönlichen Benutzerzertifikat gesucht.
- Der PIN-Code des Tokens wird angefordert.
- Es erfolgt eine Unterzeichnung von Zufallsdaten mit dem privaten Schlüssel direkt im Chip des RuTokens.
- Die erhaltene Signatur wird mithilfe des öffentlichen Schlüssels aus dem Benutzerzertifikat überprüft.
- 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.

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
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:
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 . 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 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
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 .
$ ./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. .
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 , и , 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:

Wenn Ihr Zertifikat so aussieht:

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

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

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.

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.

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
