Vorweg: Wer noch nicht so richtig davon überzeugt ist, dass er einen Passwortmanager verwenden sollte, schaue sich bitte das wunderbare Video in diesem Tweet an.

Also, mit den Wünschen ist das ja so ein Ding. Man hat so seine Vorstellungen, wie etwas laufen sollte oder ein Programm gebaut seien müsste, damit es einem nützt, aber so richtig klappt das selten. Nach einem Programm zur Passwortverwaltung hatte ich schon vor längerer Zeit mal gesucht, aber war dann doch bei meiner verschlüsselten Datei und den selbstgebastelten Skripten geblieben. Jetzt bin ich aber auf KeePassXC gestoßen und ich muss sagen: »Träume können doch wahr werden« 🙂.

Ich will keine reine Verwaltung von Benutzernamen und Passwörtern, sondern möchte:

KeePassXC kann man nach dem Start einfach aufrufen und das Fenster minimieren. Über die Browser-Schnittstelle ist es für andere Programme möglich, die Passwortdatenbank abzufragen und KeePassXC verlangt eine Freigabe beim Zugriff. Somit sieht man auch mit der Browser-Erweiterung, wann auf die Daten zugegriffen wird. Nützlich ist dabei, dass für die Einträge mit aufgezeichnet wird, wann sie erstellt oder das letzte Mal genutzt wurden.

Für KeePassXC gibt es bei Debian ein Paket, so dass man es mit apt install keepassxc leicht installieren kann und auf der Webseite gibt es auch eine Kurzeinführung.

Passwörter von Firefox zu KeePassXC übertragen

Da ich im Firefox auch einige Passwörter hinterlegt hatte, habe ich diese mit der Erweiterung Password-Exporter in eine CSV-Datei exportiert; in den Firefox-Einstellungen nach Login suchen und dann Import/Export Passwords verwenden. Den Password-Exporter habe ich anschließend gleich wieder deinstalliert.

In KeePassXC kann man über Datenbank, Importieren, CSV diese Datei dann als neue Datenbank importieren. Da es eine neue Datenbank ist, muss man für diese auch ein neues Hauptpasswort vergeben. Im CSV-Dialog muss man dann als Codec Windows-1252 wählen, denn der Export ist nicht in UTF-8, und Erster Eintrag enthält Feldnamen. Für das Spaltenlayout kann man eigentlich nur die entsprechenden Spalten für Username, Password und URL wählen, denn mehr ist im Export nicht enthalten.

Als der Import abgeschlossen war und die Datenbank von KeePassXC gespeichert war, habe ich die Passwörter im Firefox gelöscht und auch die Option Remember logins and passwords for websites entfernt.

KeePassXC für Firefox einrichten

Für Firefox und auch andere Browser gibt es die Erweiterung KeePassXC-Browser, die den Zugriff auf die Passwörter vom Browser aus ermöglicht. Um die Erweiterung nutzen zu können, muss man in KeePassXC unter Werkzeuge, Einstellungen die Browser-Integration und den entsprechenden Browser aktivieren.

Nach der Installation im Browser gibt es ein neues Symbol in der Leiste, über das man die Erweiterung steuern kann. Anfangs muss die Browser-Instanz bei KeePassXC registriert werden, bevor der Zugriff möglich ist. Für Firefox mit Snap unter Ubuntu ist die Einrichtung leider noch etwas komplizierter, die ein Beitrag bei Heise beschreibt.

Für Passwortfelder gibt es fortan einen zusätzlichen Eintrag im Kontextmenü für Eingabefelder und einen grünen Schlüssel als Symbol. Über das Kontextmenü kann man sich Passwörter generieren oder die Formularfelder mit dem Benutzernamen, Passwort oder TOTP füllen lassen.

Anbindung von SSH

KeePassXC kann auch die SSH-Schlüssel verwalten und sie beim Öffnen bzw. Sperren der Datenbank zum SSH-Agent hinzufügen bzw. entfernen. Die Unterstützung hierfür muss in den Einstellungen (im Menü Werkzeuge) aktiviert werden.

Für einen Eintrag kann man dann den privaten Schlüsselteil unter Fortgeschritten als Anhang einfügen und im Anschluss lässt sich unter SSH-Agent dieser Anhang auswählen. Als Kommentar für den öffentlichen Schlüsselteil wird der Benutzername des Eintrags verwendet und das Passwort des Eintrags wird zur Entschlüsselung eines verschlüsselten SSH-Schlüssels verwendet. Die Entschlüsselung ist vor allem interessant, wenn man keinen Anhang, sondern eine (externe) Datei verwendet.

Für häufig genutzte Schlüssel kann man die Optionen Key zum Agenten hinzufügen und Key vom Agenten entfernen aktivieren, so dass mit dem Öffnen der Datenbank der Schlüssel auch gleich zum ssh-agent hinzugefügt wird. Ob dies funktioniert hat, lässt sich mit ssh-add -l prüfen.

Gnome-Keyring (Secret Service) durch KeePassXC ersetzen

Die Programme Gnome-Keyring und Kwallet bieten einen Speicher für geheime Informationen, in dem andere Programme (z. B. Skype, nheko, GnuPG) Passwörter und Anmeldekennungen ablegen können, damit nicht immer danach gefragt werden muss. Auch KeePassXC implementiert diese Secret-Service-API und kann die Anfragen per D-BUS beantworten.

Allerdings ist es in einem Gnome nicht so leicht, Keyring zu deaktivieren, sodass KeePassXC dessen Rolle übernehmen kann, da an verschiedenen Stellen durch unterschiedliche Auslöser gnome-keyring-daemon gestartet wird. Mit den folgenden Schritten konnte ich aber KeePassXC als Secret-Service-Provider einrichten können:

  1. Hilfspakete für Keyring deinstallieren: sudo apt autopurge libpam-gnome-keyring gnome-keyring-pkcs11

  2. KeePassXC bei D-BUS anmelden, indem man die Datei ~/.local/share/dbus-1/services/org.freedesktop.secrets.service mit folgendem Inhalt erstellt:

    [D-BUS Service]
    Name=org.freedesktop.secrets
    Exec=/usr/bin/keepassxc
    
  3. Verhindern, dass gnome-keyring-daemon anhand der Einträge in /etc/xdg/autostart durch gnome-session gestartet wird oder von systemd-xdg-autostart-generator entsprechende Systemd-Units erstellt werden:

    mkdir -p ~/.config/autostart
    for i in /etc/xdg/autostart/gnome-keyring-*.desktop; do
        (cat $i; echo X-GNOME-Autostart-enabled=false; echo Hidden=true) > ~/.config/autostart/$(basename $i);
    done
    
  4. Gnome benötigt für gsd-media-keys weiterhin gnome-keyring-daemon und hängt mit der Meldung Failed to call GetEnvironment on keyring daemon fest, wenn der Dienst nicht läuft. Daher muss man die Service-Datei ~/.local/share/dbus-1/services/org.gnome.keyring.service für D-Bus anpassen, sodass gnome-keyring-daemon ohne Funktionen gestartet wird:

    [D-BUS Service]
    Name=org.gnome.keyring
    Exec=/usr/bin/gnome-keyring-daemon --start --foreground --components=,
    

Danach wird KeePassXC automatisch von D-Bus immer dann gestartet, wenn jemand auf den Secret-Storage zugreifen will.

Secret-Storage für sudo nutzen

Mit dem Programm secret-tool (aus dem Paket libsecret-tools) kann man von der Kommandozeile aus auf den gesicherten Speicher zugreifen. Mit folgendem Programm lassen sich dort auch die Passwörter für sudo hinterlegen und die Abfrage automatisieren:

#!/usr/bin/env -S /bin/bash --norc -uC

prompt=$1
attribute=secret-askpass

if pass=$(secret-tool lookup "$attribute" "$prompt")
then
    echo "$pass"
exit 0
fi

read -r -s -p "$prompt" pass

echo "$pass" | secret-tool store --label="$prompt" "$attribute" "$prompt"
echo "$pass"

Aufgerufen werden kann es dann wie folgt, wobei man die Variablenzuweisung und die Parameter in einem Alias (alias sudo='SUDO_ASKPASS=… sudo -Ak') der Shell-Konfiguration verbergen kann.

SUDO_ASKPASS=~/bin/secret-askpass sudo -Ak echo 123

Übersicht anpassen

Ich habe mir gleich einige Gruppen erstellt, um die Einträge etwas zu ordnen: Web, Logins, Dienste, Mailinglisten, Sonstiges. Man kann sich auch eigene Symbole für die Gruppen wählen und einige Standardeinstellungen für die Gruppe festlegen.

Bei der Tabelle mit den Einträgen kann man über das Kontextmenü des Tabellenkopfs Spalten ein- oder ausblenden und mit Passwörter ausblenden die Anzeige der Passwörter in der Tabelle bestimmen. Die Spalten lassen sich auch durch ziehen der Spaltenköpfe umsortieren bzw. durch einen Klick darauf lässt sich die Tabelle sortieren.

Auto-Type

Eine absolut praktische Funktion ist die Eingabe des Passworts durch KeePassXC. Für einen Eintrag kann man die Aktion Auto-Type ausführen aufrufen, woraufhin sich das Fenster von KeePassXC schließt und im Tastaturpuffer eine Eingabefolge hinterlegt wird. Das Fenster, welchen danach den Fokus bekommt, wird diese Eingabefolge auslesen und dementsprechend handeln.

Ich habe für die Gruppe Login die Standard-Eingabefolge angepasst und lasse nur {PASSWORD}{ENTER} senden. Am Häufigsten arbeite ich mit sudo oder su, die ich starte. Danach lasse ich von KeePassXC »das Passwort eintippen«, womit dieses beliebig lang und komplex seien kann. Außerdem hat diese Form der Passwortübermittlung den Vorteil, dass sie auch für sudo innerhalb von ssh funktioniert.

Es gibt auch noch ein globales Auto-Type, das in den Einstellungen von KeePassXC aktiviert werden muss. Damit kann man für einen Eintrag einen Fenstertitel festlegen, bei dem der Eintrag vorgeschlagen wird. In dem Fenstertitel lassen sich variierende Stücke mit einem Stern * als Platzhalter beschreiben. Da ich meine Zsh so angepasst habe, dass im Fenstertitel der Rechnername und das Programm anzeigt wird, kann KeePassXC auch das richtige Passwort auswählen und ich brauche nur noch die Eingabe bestätigen.

Theoretisch könnte man auch die qemu-Console und sendkey verwenden, um Passwörter an eine VM zu senden. Aber dies habe ich noch nicht getestet.

Magische URLs

Die Adressen eines Eintrag können auch in der Form cmd://… sein, mit KeePassXC beim Klick darauf den Befehl ausführt. Damit kann zum Beispiel ein anderer Browser als der übliche aufgerufen werden oder ein ganz anderes Programm.

Mit der Adresse file://… kann man auch eine weitere Datenbank in KeePassXC öffnen. Wenn der Eintrag dann in der Gruppe AutoOpen liegt, wird die Datenbank automatisch mit der Hauptdatenbank geöffnet.

TOTP/Zwei-Faktor-Authentisierung (2FA)

Das Prinzip der Zwei-Faktor-Authentisierung ist bereits von Listen mit bzw. Generatoren für Transaktionsnummern (TAN) bei Online-Banken bekannt. Im Kern geht es darum, die Anmeldung eines Benutzers durch mindestens zwei Merkmalen abzusichern, wobei günstiger Weise eines der Merkmale veränderlich bzw. vorab nicht bekannt ist – TAN-Listen erfüllen daher nicht ganz die Anforderungen.

Sollte ein Eingreifer bei einer Anmeldung die Leitung abhören, so kann er die gewonnenen Daten Benutzername, Passwort und 2FA-Geheimnis nicht nutzen, da sich das 2FA-Geheimnis regelmäßig ändert. Eine Variante ist ein zusätzliches Geräte (z. B. Smartphone) über das der Dienstleister das 2FA-Geheimnis kommuniziert. Wer Zugriff auf beide Informationen (Passwort und 2FA-Geheimnis) hat, ist sehr wahrscheinlich die richtige Person.

Eine andere Variante ist ein Verfahren, auf das sich beide Seiten (Nutzer und Anbieter) vorab verständigen und das für die Erstellung des 2FA-Geheimnisses genutzt wird. KeePassXC hat hierfür den zeitbasierten Algorithmus für Einmalpasswörter (Time-based One-time Password Algorithmus; TOTP) nach RFC 6238 implementiert.

Für einen Eintrag gibt es im Menü Einträge das Untermenü TOTP, über das man das Verfahren einrichten kann. Hierfür teilt der Anbieter einen Schlüssel mit, der für die Generierung des Geheimnisses verwendet wird. Für den Algorithmus gibt es auch noch weitere Parameter, aber ich habe noch keinen Dienst gefunden, der abweichende Einstellungen benötigt.

Wenn TOTP eingerichtet ist, kann man mit Strg+t sich das aktuelle 2FA-Geheimnis in die Zwischenablage kopieren oder über die Browsererweiterung lässt sich das 2FA-Geheimnis auch bequem in das entsprechende Formularfeld eintragen.

Während der Einrichtung teilt einem der Anbieter auch eine Liste von Notfallschlüsseln mit, die man einsetzen muss, wenn die 2FA nicht funktioniert. Diese kann man sich direkt in KeePassXC als zusätzlichen Eintrag unter Fortgeschritten ablegen. Dabei ist es ratsam, den Haken Schützen zu setzen, damit die Liste wie ein Passwort behandelt und nur nach mehreren Klicks angezeigt wird.

Bei folgenden Diensten konnte ich die Zwei-Faktor-Authentisierung mit KeePassXC einrichten:

Sichere Passwörter