Einfache und sichere Passwortverwaltung in der Shell
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.