
Einfache Passwörter bieten keinen Schutz, während komplexe kaum zu merken sind. Daher landen sie so oft auf einem Zettel unter der Tastatur oder auf dem Monitor. Damit Passwörter im Kopf der „vergesslichen“ Benutzer bleiben und der Sicherheitsgrad nicht leidet, gibt es die Zwei-Faktor-Authentifizierung (2FA).
Durch die Kombination aus dem Besitz des Geräts und dem Wissen um seinen PIN-Code 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 Einschränkungen bei der PIN-Code-Eingabe ausgeglichen.
Außerdem gibt es in staatlichen Institutionen oft den Wunsch, dass alles nach den GOST-Normen funktioniert. Von dieser Variante der 2FA für den Zugang zu Linux wird hier die Rede sein. Ich beginne von weitem.
PAM-Module
Das Pluggable Authentication Modules (PAM) ist ein Modul mit einer standardisierten API und Implementierungen verschiedener Authentifizierungsmechanismen in Anwendungen.
Alle Programme und Anwendungen, die mit PAM arbeiten können, nehmen sie auf und können sie zur Benutzer-Authentifizierung nutzen.
In der Praxis funktioniert das ungefähr so: Der Befehl login ruft PAM auf, der alle erforderlichen Prüfungen mit Hilfe der im Konfigurationsdatei angegebenen Module durchführt und das Ergebnis an den Befehl login zurückgibt.
librtpam
Das von der Firma „Aktiv“ entwickelte Modul fügt die Zwei-Faktor-Authentifizierung für Benutzer über Smartcards oder USB-Tokens mithilfe asymmetrischer Schlüssel nach den neuesten Standards der nationalen Kryptographie hinzu.
Betrachten wir das Funktionsprinzip:
- Das Token speichert das Benutzerzertifikat und seinen privaten Schlüssel;
- das Zertifikat wird im Home-Verzeichnis des Benutzers als vertrauenswürdig gespeichert.
Der Authentifizierungsprozess erfolgt wie folgt:
- Auf dem Ruthoken erfolgt die Suche nach dem persönlichen Benutzerzertifikat.
- Der PIN-Code des Tokens wird verlangt.
- Es erfolgt eine Signatur zufälliger Daten mit dem privaten Schlüssel direkt im Chip des Ruthokens.
- Die erhaltene Signatur wird mit dem öffentlichen Schlüssel aus dem Benutzerzertifikat überprüft.
- Das Modul gibt das Ergebnis der Signaturprü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 dem veralteten GOST R 34.10-2001 authentifizieren.
Um die Sicherheit der Schlüssel braucht man sich keine Sorgen zu machen – sie werden direkt im Rutoken generiert und verlassen während der kryptografischen Operationen niemals dessen Speicher.

Der Rutoken ECP 2.0 ist vom FSB und FSTEK gemäß NDV 4 zertifiziert und kann daher in Informationssystemen verwendet werden, die vertrauliche Informationen verarbeiten.
Praktische Nutzung
Fast jede moderne Linux-Distribution ist geeignet, wir verwenden hier beispielsweise xUbuntu 18.10.
1) Notwendige Pakete installieren
sudo apt-get install libccid pcscd opensc
Wenn Sie eine Sperrung des Desktops mit einem Screensaver hinzufügen möchten, installieren Sie zusätzlich das Paket libpam-pkcs11.
2) PAM-Modul mit Unterstützung für GOSTs hinzufügen
Laden Sie die Bibliothek mit
Kopieren Sie den Inhalt des Ordners PAM librtpam.so.1.0.0 in den Systemordner
/usr/lib/ oder /usr/lib/x86_64-linux-gnu/oder /usr/lib64
3) Paket mit librtpkcs11ecp.so installieren
Laden und installieren Sie das DEB- oder RPM-Paket unter folgendem Link:
4) Überprüfen, 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:
Using slot 0 with a present token (0x0)
- Informationen über Schlüssel und Zertifikate ausgegeben werden, müssen Sie das Zertifikat auslesen und auf der Festplatte speichern. Führen Sie hierzu den folgenden Befehl aus, wobei Sie anstelle von {id} die ID des Zertifikats einfügen 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 Punkt 6 fort.
nichts - , bedeutet das, dass das Gerät leer ist. Wenden Sie sich an den Administrator oder erstellen Sie die Schlüssel und das Zertifikat selbst, indem Sie die nächsten Anweisungen befolgen.5.1) Testzertifikat erstellen
Achtung! Die beschriebenen Methoden zur Erstellung von Schlüsseln und Zertifikaten eignen sich für Tests und sind nicht für den produktiven Einsatz gedacht. Hierfür sollten Sie Schlüssel und Zertifikate verwenden, die von einer vertrauenswürdigen Zertifizierungsstelle Ihrer Organisation oder einem akkreditierten Zertifizierungszentrum ausgestellt wurden.
Achtung! Die beschriebenen Methoden zur Erstellung von Schlüsseln und Zertifikaten sind für Testzwecke geeignet und nicht für den Einsatz im Live-Betrieb gedacht. Hierfür sollten Schlüssel und Zertifikate verwendet werden, die von der vertrauenswürdigen Zertifizierungsstelle Ihrer Organisation oder einer akkreditierten Zertifizierungsstelle ausgestellt wurden.
Das PAM-Modul wurde entwickelt, um lokale Computer zu schützen und richtet sich an kleine Organisationen. Da es nur wenige Benutzer gibt, kann der Administrator die Zertifikatswiderrufung selbst überwachen und Konten manuell sperren, sowie auch die Gültigkeit der Zertifikate prüfen. Das PAM-Modul kann derzeit keine Zertifikate über CRL überprüfen oder Vertrauenskettengestaltungen durchführen.
Ein einfacher Weg (über den Browser)
Um ein Testzertifikat zu erhalten, verwenden Sie . Der Prozess 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 niedriger als 0.20 ist, aktualisieren Sie oder kompilieren Sie von unserem GitHub (zum Zeitpunkt der Veröffentlichung dieses Artikels war die Version 0.20 noch nicht veröffentlicht) oder vom master-Zweig des Hauptprojekts OpenSC nicht später als
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: Objektidentifikator (CKA_ID) als zweizifriges Hex-Zahlenformat aus der ASCII-Tabelle. Verwenden Sie nur ASCII-Codes für druckbare Zeichen, da die id an OpenSSL als Zeichenfolge übergeben werden muss. Zum Beispiel entspricht dem ASCII-Code „3132“ die Zeichenfolge „12“. Zur Vereinfachung können Sie den .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Jetzt werden wir ein Zertifikat erstellen. Es gibt zwei Wege: der erste über die CA (wir werden Test-CAs verwenden), der zweite – selbstsigniert. Zuerst muss OpenSSL Version 1.1 oder neuer installiert und konfiguriert werden, um mit Rutoken über das spezielle Modul rtengine zu arbeiten, gemäß der Anleitung .
Beispielsweise: für „--id 3132“ muss in OpenSSL angegeben werden „pkcs11:id=12«.
Sie können die Dienste einer Test-CA nutzen, von denen es viele gibt, zum Beispiel, , und , dafür erstellen wir eine Zertifikatsanfrage
Eine andere Möglichkeit – man kann der Faulheit nachgeben und ein selbstsigniertes Zertifikat 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:

muss das Zertifikat von der DER- in das PEM-Format (Base64) konvertiert werden.
$ 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 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 unbeabsichtigten oder absichtlichen Änderungen durch andere Benutzer. Dies schließt die Situation aus, in der jemand sein eigenes Zertifikat hier hinzufügt und sich in Ihrem Namen anmelden kann.
7) Authentifizierung einrichten
Die Einrichtung unseres PAM-Moduls ist vollkommen standardmäßig und erfolgt genau wie bei der Konfiguration anderer Module. Wir erstellen in die Datei /usr/share/pam-configs/rutoken-gost-pam den vollständigen Namen des Moduls, ob es standardmäßig aktiviert ist, die Priorität des Moduls und die Authentifizierungsparameter.
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 Modulauswahl einen negativen Rückgabewert enthält, führt dies zu einem Authentifizierungsfehler. Die Anfrage wird verworfen, aber die anderen Module werden trotzdem aufgerufen.
- requisite (notwendig): ähnlich wie required, führt jedoch sofort zu einem Authentifizierungsfehler und ignoriert die anderen Module.
- sufficient (ausreichend): wenn vor einem solchen Modul keins der Module required oder sufficient einen negativen Rückgabewert zurückgibt, wird das Modul eine positive Antwort zurückgeben. Die verbleibenden Module werden ignoriert.
- optional (zusätzlich): wenn im Stapel keine Module required enthalten sind und keins der Module sufficient eine positive Rückmeldung gegeben hat, muss mindestens ein Modul optional eine positive Antwort zurückgeben.
Der vollständige Inhalt der Datei /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

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

8) Überprüfen der Konfiguration
Um sicherzustellen, dass alles eingerichtet ist, aber dabei 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 einen PIN-Code für das Gerät verlangt.

9) Konfigurieren der Computerverriegelung bei Herausnahme des Tokens
Das Paket enthält das Dienstprogramm libpam-pkcs11 pkcs11_eventmgr, das verschiedene Aktionen bei Auftreten von PKCS#11-Ereignissen ermöglicht. pkcs11_eventmgr
Zur Konfiguration dient als Konfigurationsdatei: Für verschiedene Linux-Distributionen wird der Befehl, der die Sperrung des Kontos bei Herausnahme von Smartcards oder Tokens auslöst, unterschiedlich sein. Siehe. /etc/pam_pkcs11/pkcs11_eventmgr.conf
event card_remove Ein Beispiel für die Konfigurationsdatei ist unten aufgeführt:.
Ein Beispiel für eine Konfigurationsdatei ist unten dargestellt:
pkcs11_eventmgr
{
# Hintergrundstart
daemon = true;
# Konfiguration der Debug-Nachrichten
debug = false;
# Umfragezeit in Sekunden
polling_time = 1;
# Timeout für das Entfernen der Karte festlegen
# Standardmäßig 0
expire_time = 0;
# Auswahl der pkcs11-Bibliothek für die Arbeit mit RuToken
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Aktionen mit der Karte
# Karte eingesteckt:
event card_insert {
# Standardwerte beibehalten (nichts passiert)
on_error = ignore;
action = "/bin/false";
}
# Karte entfernt
event card_remove {
on_error = ignore;
# Bildschirm sperren
# 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 anschließend die Anwendung hinzu dient als Konfigurationsdatei: zum Autoload. Dazu bearbeiten Sie 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 jeder modernen Linux-Distribution verwendet werden, einschließlich einheimischer.

Fazit
PCs mit Linux werden in russischen Staatsinstitutionen immer beliebter, und eine zuverlässige Zwei-Faktor-Authentifizierung in diesem Betriebssystem einzurichten, ist nicht immer einfach. Wir hoffen, mit diesem Leitfaden das „Passwortproblem“ zu lösen und den Zugriff auf den PC zuverlässig zu schützen, ohne viel Zeit dafür aufzuwenden.
Quelle: habr.com
