Der Einsatz einer sicheren Passwortverwaltung ist besonders im Unternehmensumfeld absolut notwendig, um Industriespionen und Hobbyhackern nicht alle Tore offen zu lassen. Neben der Wahl eines unsicheren und leicht zu erratenden Passwortes für mehrere – möglicherweise alle – Dienste stellt das „Verwalten“ von Passwörtern auf Papierzetteln oder in Textdateien ein besonders verbreitetes und gravierendes Risiko dar. Die Ursache für fahrlässigen Umgang mit den Zugangsdaten liegt oftmals in der Bequemlichkeit der Nutzer/innen. Wir zeigen, wie sich mit überschaubarem Aufwand eine simple und sichere Passwortverwaltung einrichten lässt, die direkt aus der Shell genutzt werden kann.

Motivation

Das Ziel dieses Artikels ist es, einen Workflow für eine sichere und zeitsparende Passwortverwaltung in einer Linux-Umgebung zu beschreiben, die sowohl auf der Kommandozeile, als auch auf einer grafischen Benutzeroberfläche funktioniert. Der Artikel richtet sich vorwiegend an Nutzer, die in der Linux-Shell heimisch sind oder es werden möchten. Für Desktop-Nutzer, die rein grafische Lösungen bevorzugen, gibt es gute Alternativen, wie z. B. Keepass für Linux und Windows.

Der Zugriff über die Kommandozeile ist besonders praktisch, wenn man diese mit anderen Kommandos kombinieren möchte. Es ermöglicht auch die Arbeit über einen SSH-Terminal, wo der Zielrechner nur eine Kommandozeile ohne grafische Benutzeroberfläche anbietet.

Grundsätzlich soll dieser Workflow eine schnelle Auswahl des gewünschten Passworts aus dem eigenen Passwortspeicher ermöglichen. Alle Passwörter sind mit einem GPG-Schlüssel verschlüsselt, damit man sich für den Zugriff auf die Passwörter nur das Kennwort für diesen Schlüssel merken muss. Alle Passwörter müssen einmalig in den Passwortspeicher eingetragen werden. Der Passwortspeicher besteht aus einer einfachen Verzeichnisstruktur, die sich im Home-Verzeichnis des Benutzers befindet. Alte Passworteinträge können dank Versionsverwaltung über ein Git-Repository wiederhergestellt werden.

Vorteile der Passwortverwaltung in der Shell

  • Lange, komplexe und damit sichere Passwörter sind möglich, weil man sich diese nicht merken oder abtippen muss.
  • Verschlüsselung der Passwörter.
  • Schneller Zugriff.
  • Große Passwortlisten können in einer simplen Struktur verwaltet werden.
  • Man muss sich nur ein sicheres Kennwort merken.
  • Keine unverschlüsselten Passwortlisten in Dateien, die man sich aus Gemütlichkeit mal kurz anlegt.
  • Keine Papierzettel, die man vernichten muss, sobald man sich das Passwort eingeprägt hat.
  • Passwörter können mit dem öffentlichen GPG-Schlüssel der Zielperson verschlüsselt und sicher per Mail oder anderweitig übertragen werden
  • Ein Passwortspeicher, der an einer zentralen Stelle gesichert ist und sicher an mehrere Arbeitsumgebungen verteilt werden kann.

Nachteile

  • Hat eine zweite Person Zugriff auf den privaten GPG-Schlüssel und das Kennwort dafür, kann sie sämtliche damit verschlüsselten Passwörter einsehen.
  • Die benötigten Werkzeuge müssen auf allen Arbeitsumgebungen für den Passwortzugriff einmalig eingerichtet werden. Eine recht sichere Möglichkeit das Problem zu lösen wäre es, eine Arbeitsumgebung einzurichten, die einen SSH-Server betreibt, um von anderen Orten aus per SSH-Terminal auf die Shell-Umgebung zuzugreifen.
  • Ein geringes Sicherheitsrisiko besteht, wenn man den GPG-Agent nutzt, der den privaten GPG-Schlüssel zwischenspeichert.

Voraussetzungen

Das Betriebssystem sollte eine beliebige Linux-Distribution sein. Es gibt die erforderlichen Werkzeuge auch für BSD, MacOS X oder andere UNIX-Derivate, sodass der Workflow auch auf diesen funktioniert. Dieser Artikel geht jedoch von einer Linux-Umgebung aus.

Zu allen hier verwendeten Werkzeugen gibt es nützliche Installationsanweisungen und Referenzen auf dem ArchLinux-Wiki.

Folgende Werkzeuge sind Teil des Workflows:

pass

Das Kommandozeilenwerkzeug pass enthält die zentrale Logik zur Verwaltung des Passwortspeichers und den Zugriff darauf.

GnuPG

GnuPG stellt die Kommandozeilenwerkzeuge für die Verschlüsselung des Passwortspeichers über OpenPGP bereit.

dmenu (optional)

Das Kommendozeilenwerkzeug dmenu bietet eine schnelle Auswahlmöglichkeit aus einer beliebigen Liste über ein Suchfeld an und nutzt dabei ein X Window System. Mit der Installation von pass wird auch ein Kommandozeilenwerkzeug passmenu bereitgestellt, das dmenu für die Auflistung der einzelnen Einträge im Passwortspeicher nutzt. Eventuell muss der Pfad zu passmenu manuell in die PATH-Umgebungsvariable ergänzt werden, damit es als Kommando ohne vorangestellten Pfad aufgerufen werden kann. Das ist z. B. in der Linux-Distribution „Debian“ der Fall.

git (optional)

Das Kommandozeilenwerkzeug git ist ein populäres Distributed Version Control System (DVCS) für Softwareprojekte, das verteilte Arbeit aus mehreren Arbeitsumgebungen ermöglicht. Das Projekt befindet sich dabei auf einem zentralen Server (Repository). Der Passwortspeicher wird hier als ein Git-Projekt gepflegt, um den Zugriff auch auf andere Geräte oder Benutzerkonten zu ermöglichen. Es ermöglicht auch das Zurücksetzen älterer Zustände des Passwortspeichers, sodass z. B. versehentlich überschriebene oder gelöschte Passworteinträge wiederhergestellt werden können.

Setup

Alle erforderlichen Werkzeuge lassen sich über den Paketmanager der jeweiligen Linux-Distribution installieren und einrichten. Diese Setupanweisungen gehen davon aus, dass die erforderlichen Werkzeuge auf dem System bereits installiert und funktionsfähig sind.

Passwortspeicher anlegen

    pass init "somebody@example.com"

Legt einen neuen Passwortspeicher an und nutzt das GPG-Schlüsselpaar mit der ID somebody@example.com für die Ver- und Entschlüsselung der Passwörter.

Falls noch kein GPG-Schlüsselpaar angelegt wurde, kann das mit folgendem Befehl gemacht werden:

    gpg --gen-key

Falls der neue private GPG-Schlüssel mit einem Kennwort versehen wurde, wird dieses beim Abrufen der Passwörter abgefragt. Hinweis: Vergesst nicht, dieses GPG-Schlüsselpaar an einem geeigneten Ort zu sichern. Geht der Schlüssel verloren, ist auch der ganze Passwortspeicher unbrauchbar.

Git-Repository anlegen

    pass git init
    pass git remote add origin "https://github.com/somebody/password-store.git"
    pass git push

Legt ein neues lokales Git-Projekt für den Passwortspeicher an und setzt den Pfad zum Git-Projekt auf dem entfernten Rechner, wohin der Passwortspeicher gesichert wird. Nun wird für jede über das pass Kommando vorgenommenen Änderung am Passwortspeicher automatisch ein Git-Commit mit entsprechender Nachricht angelegt.

Hinweis: Hierbei ist zu beachten, dass man bei der Namenswahl der Passworteinträge nicht zu viel verrät, da diese als einfache Dateien mit der Endung .gpg vorliegen. Vorzugsweise liegt das Git-Repository an einem gesicherten Ort, wie z. B. im lokalen Netzwerk, auf einem privaten Server oder einem privaten Repository auf github.com.

GPG-Agent

Der GPG-Agent ist ein GnuPG-Programm, das im Hintergrund läuft und private GPG-Schlüssel zwischenspeichert, damit diese nicht bei jeder Passwortabfrage mit pass ausgelesen und das Kennwort dafür eingegeben werden muss.

Die Datei ~/.gnupg/gpg-agent.conf enthält alle Optionen für den Agent. Hier sind einige nützliche Beispieloptionen:

    # Setzt eine Lebenszeit von fünf Stunden für die letzte Passwortabfrage.
    # Nach Überschreiten dieser Zeit wird der private GPG-Schlüssel erneut ausgelesen.
    default-cache-ttl 18000

    # Setzt eine maximale Lebenszeit von 24 Stunden für den zwischengespeicherten
    # privaten GPG-Schlüssel. 24 Stunden nach der letzten Abfrage des privaten
    # GPG-Schlüssels wird dieser erneut abgefragt.
    max-cache-ttl 86400

Workflow

Passwörter eintragen

    pass insert email/somebody@example.com/smtp

Fügt einen neuen Eintrag smtp im Verzeichnis email/somebody@example.com ein. email ist hier das Verzeichnis, wo sich alle E-Mail-Konten befinden. smtp ist der Name für den Zugang. Dabei wird eine Datei smtp.pgp im entsprechenden Verzeichnis angelegt.

Bietet eine Eingabemöglichkeit für das Passwort an. Gegebenenfalls wird das Kennwort für den Zugriff auf den privaten GPG-Schlüssel abgefragt, um das neue Passwort damit zu verschlüsseln.

    pass insert email/somebody@example.com/smtp < password.txt

Liest den Inhalt aus der Datei password.txt und trägt ihn als neues Passwort ein.

Passwörter abrufen

    pass email/somebody@example.com/smtp

Schreibt das abgefragte Passwort in die Standardausgabe.

    pass -c email/somebody@example.com/smtp

Schreibt das abgefragte Passwort in die Zwischenablage und leert diese nach 45 Sekunden.

    passmenu -l 20

Zeigt eine Auswahlliste von maximal 20 Einträgen mit Suchbox an. Das Kommando kann mit einem globalen Tastenkürzel versehen werden.

Passwörter verschieben

    pass mv email/somebody@example.com/smtp email/somebody@example.com

Der Passwortspeicher befindet sich unter .password-store im Home-Verzeichnis des angemeldeten Benutzers.

Passwörter generieren

    pass generate email/somebody@example.com/smtp 12

Generiert ein neues zwölf Zeichen langes Passwort. Der Passwortgenerator bietet einige Optionen an. Eine nützliche Option wäre z. B. --no-symbols, die dafür sorgt, dass keine Sonderzeichen und nur alphanumerische Zeichen im Passwort vorkommen.

Passwörter verschicken

Als erstes wird der öffentliche GPG-Schlüssel des Empfängers (recipient.key) benötigt. Falls noch nicht geschehen, kann dieser mit folgendem Befehl importiert werden:

    gpg --import recipient.key

Dieser Schlüssel befindet sich nun im Schlüsselbund und muss für weitere Nutzung nicht mehr importiert werden. Anschließend kann das Passwort fuer den Versand verschlüsselt werden. Dazu wird z. B. das Passwort unter email/somebody@example.com/smtp aus dem Punkt Passwörter eintragen verwendet. Hier identifiziert die E-Mail-Adresse somebody@example.com den privaten GPG-Schlüssel des Absenders, mit dem wir auch den Passwortspeicher angelegt haben und recipient@example.com den öffentliche GPG-Schlüssel des Empfängers, den wir soeben importiert haben.

    pass email/somebody@example.com/smtp | gpg -e -a -u "somebody@example.com" -r "recipient@example.com" > password.txt

Die Datei passwort.txt enthält das verschlüsselte Passwort. Der Inhalt dieser Datei kann nun z. B. per E-Mail verschickt werden. Der Empfänger kann diese Nachricht mit seinem privaten GPG-Schlüssel entschlüsseln:

   gpg -d passwort.txt

Der richtige private GPG-Schlüssel wird automatisch ausgewählt und muss nicht explizit angegeben werden. Das entschlüsselte Passwort wird in die Standardausgabe geschrieben.

Passwortspeicher sichern

    pass git pull
    pass git push

Übernimmt eventuelle Änderungen am entfernten Passwortspeicher auf den lokalen Passwortspeicher. Sichert anschließend alle lokalen Änderungen am Passwortspeicher auf dem entfernten Rechner.

    pass git log

Zeigt alle am Passwortspeicher vorgenommen Änderungen in Form von Commit Messages an.