Passwörter verwalten und via Git synchronisieren

Aus LinuxUser 07/2018

Passwörter verwalten und via Git synchronisieren

© Belchonock, 123RF

Geheimbund

Passwörter kommen an zahlreichen Stellen zum Einsatz. Mit Pass verwalten Sie sie und synchronisieren die Daten via Git.

Der Segen des Internets liegt in der Tatsache, dass sich vieles über das Netz erledigen lässt. Ob Wohnsitzwechsel, neuer Energieversorger oder Bankgeschäfte – die meisten Unternehmen bieten wichtige Dienstleistungen als Online-Service an. Ein Passwort in Kombination mit einem Benutzernamen authentifiziert Sie gegen den Server. Um die steigende Zahl der Zugänge zu verwalten, bietet es sich an, einen Passwortmanager wie Pass [1] einzusetzen.

Es mag zwar verlockend sein, für fast alles dasselbe Passwort zu verwenden. In der Praxis birgt das aber die Gefahr, dass ein einmal geknacktes Geheimnis den Zugang zu vielen, teils sehr privaten Daten ermöglicht. Manche Seiten erzwingen zudem bestimmte Längen, andere verbieten bestimmte Sonderzeichen. Aus diesem Grund ist der konsequente Einsatz eines einzigen Passworts ohnehin in der Praxis kaum möglich.

Eines statt vieler

Passwortmanager versuchen, Ihnen beim Einsatz sicherer Zugangsdaten zu helfen: Sie verwalten, meist durch ein einziges Passwort geschützt, eine Datenbank, in der die Credentials liegen. Das schlanke Tool Pass erledigt diesen Job auf der Kommandozeile, andere Programme bringen eine grafische Oberfläche mit oder stehen als Dienst im Web bereit [2].

Bei Pass handelt es sich im Kern nur um ein Shell-Skript, das verschiedene Aufgaben beim Verwalten der Daten in Funktionen verpackt, sodass sie sich einfach nutzen lassen. Dabei bindet es eine Reihe weiterer Tools ein, die es etwa ermöglichen, die Daten mit starker Kryptografie zu sichern, Passwörter direkt in die Zwischenablage zu kopieren oder den gesamten Datenbestand per Versionskontrollsystem zu verwalten.

Damit setzt Pass auf das KISS-Prinzip, das im Wesentlichen besagt, dass Programme nur eine Aufgabe übernehmen sollten, diese aber richtig machen müssen. Zum Verschlüsseln der Dateien nutzt das Programm etwa GnuPG, den freien Ableger von PGP, zum Verwalten der Dateien Git, und zum Kopieren in die Zwischenablage Xclip.

Haben Sie GnuPG bereits im Einsatz, etwa zum Signieren oder Verschlüsseln von Mails, brauchen Sie an dieser Stelle nichts weiter zu tun. Nutzen Sie die Software noch nicht, ist es jetzt an der Zeit, in die Materie einzusteigen. Bei der Installation von Pass ziehen die meisten Paketmanager die entsprechenden Dateien für GnuPG automatisch nach. Außerdem benötigt das Programm in der Regel neben Xclip ein Tool zum Anzeigen von Verzeichnishierarchien (tree) (Listing 1).

Listing 1

$ pacman -Si pass
Repositorium             : community
Name                     : pass
Version                  : 1.7.1-1
Beschreibung             : Stores, retrieves, generates, and synchronizes passwords securely
Architektur              : any
URL                      : https://www.passwordstore.org/
Lizenzen                 : GPL2
Gruppen                  : Nichts
Stellt bereit            : passmenu
Hängt ab von             : xclip  bash  gnupg  tree
Optionale Abhängigkeiten : git: for Git support
                           dmenu: for passmenu
                           qrencode: for QR code support
In Konflikt mit          : passmenu
Ersetzt                  : passmenu
Größe des Downloads      : 18,33 KiB
Installationsgröße       : 45,00 KiB
Packer                   : Lukas Fleischer <lfleischer@archlinux.org>
Erstellt am              : Fr 14 Apr 2017 10:31:38 CEST
Verifiziert durch        : MD5-Summe  SHA-256-Summe  Signatur

Mit Gnupg erzeugen Sie einen Schlüssel, der sich dazu eignet, Dateien zu signieren oder eben zu verschlüsseln. Genau diese Funktion macht sich Pass zunutze. Es ist immer noch eine etwas komplizierte Angelegenheit, einen Schlüssel korrekt zu erstellen und anschließend sicher zu verwahren. Im Netz finden sich aber verschiedene Seiten, die Ihnen beim Einstieg in die Materie helfen [3].

Einmal initialisieren

Rufen Sie das Tool mit dem Parameter init auf, benötigt es außerdem die ID eines GPG-Schlüssels, den Sie verwenden möchten, um die Dateien zu chiffrieren. Über die Option -p Verzeichnis legen Sie fest, dass der Schlüssel nur für einen Teilbaum der Passwortsammlung gilt. So trennen Sie etwa dienstliche Passwörter von privaten.

Alle Dateien, die Sie mit Pass verwalten, liegen unterhalb von .password-store/ im Home-Verzeichnis. Möchten Sie ein anderes Verzeichnis verwenden, setzen Sie die Umgebungsvariable PASSWORD_STORE_DIR entsprechend (siehe Tabelle “Wichtige Variablen”).

PASSWORD_STORE_DIR

Verzeichnis für die Passwortdateien

PASSWORD_STORE_GENERATED_LENGTH

Standardlänge generierter Passwörter

PASSWORD_STORE_ENABLE_EXTENSIONS

Erweiterungen aktivieren

PASSWORD_STORE_EXTENSIONS_DIR

Verzeichnis für Erweiterungen

Benutzen Sie bereits ein Programm zum Verwalten von Passwörtern, so lohnt sich ein Blick auf die Pass-Homepage: Dort finden Sie eine ganze Reihe von Tools und Skripten, die beim Export von Daten aus anderen Programmen helfen, etwa aus Revelation oder Keepass. Im Test gelang der Export aus Revelation problemlos. In den Dateien fanden sich die zusätzlichen Einträge jeweils in einer Zeile wieder.

Pass wertet grundsätzlich nur die erste Zeile der Datei aus, in die es folglich das Passwort für den jeweiligen Zugang schreibt. Weitere Informationen dienen lediglich dazu, eventuell Nutzernamen oder URLs sowie andere Daten zu notieren.

Starten Sie von Grund auf neu, rufen Sie Pass mit dem Parameter generate, einem Namen für den Zugang sowie einer Zahl für die gewünschte Länge des Passworts auf:

$ pass generate test/zugang 23

Im Beispiel wäre das Passwort 23 Zeichen lang, und die entsprechende Datei landet im Passwortverzeichnis im Unterordner test/ in der Datei zugang. Rufen Sie Pass mit diesem Zugang auf, fragt die Software das Passwort für den Zugriff auf den GnuPG-Schlüssel ab. Geben Sie dieses korrekt ein, öffnet es die Datei und gibt den Inhalt auf der Standardausgabe aus.

Mit der Option -c kopiert es den Inhalt gleich in die Zwischenablage, aus der Sie es mit [Strg]+[V] wieder einfügen. Dazu dient das Programm Xsel. Geben Sie als Parameter für die Option eine Zahl an, versucht das Programm die entsprechende Zeile zu lesen und in die Ablage zu kopieren. Auf diese Weise ließe sich also zusätzlich ein Benutzername aus der entsprechenden Datei auslesen.

Mit der Zeit sammeln sich auf diese Weise etliche Zugangsdaten an. Um diese zu organisieren, legen Sie im Wurzelordner .password-store einfach Unterordner an und verschieben die Dateien mit den Daten entsprechend. Rufen Sie Pass ohne Parameter im Terminal auf, dann zeigt es genau diese Baumstruktur (Abbildung 1). Dabei entsprechen die Namen der Dateien und Verzeichnisse den Einträgen für die Knoten. Dabei spart das Tool allerdings die Endung .gpg aus, sodass es leichter fällt, diese zu lesen.

Abbildung 1: Haben sich zahlreiche Zugangsdaten angesammelt, dann organisieren Sie diese ganz einfach in einer Ordnerstruktur, die Pass beim Aufruf ohne Parameter als Baum ausgibt.

Abbildung 1: Haben sich zahlreiche Zugangsdaten angesammelt, dann organisieren Sie diese ganz einfach in einer Ordnerstruktur, die Pass beim Aufruf ohne Parameter als Baum ausgibt.

Richtig verwaltet

Wer mehr als einen Rechner verwendet, der legt eventuell die Zugangsdaten nicht immer auf demselben Rechner ab. Es kommt unter Umständen vor, dass ein neuer Account erst im Laufe einer Reise nötig wird. Die passenden Daten liegen dann auf der Festplatte des Laptops, während Sie die Arbeit später am heimischen PC fortsetzen wollen.

Um einen synchronen Datenbestand auf allen Systemen zu erreichen, bieten sich nun eine ganze Reihe von Ansätzen an, denn immerhin arbeitet Pass ja mit einfachen Dateien. Tools wie Rsync arbeiten auf diese Weise: Sie kopieren in einem Schritt entweder vom mobilen Rechner zum stationären PC oder umgekehrt. Der Abgleich in Gegenrichtung erfordert immer einen zweiten Schritt. In einem Rutsch ließe sich das etwa mit Unison [3] erledigen, es geht aber noch eleganter.

An dieser Stelle kommt Git [4] ins Spiel. Dahinter verbirgt sich ein populäres Versionskontrollsystem (VCS, siehe Kasten “Alles unter Kontrolle”). Dessen eigentlicher Zweck liegt darin, den Quellcode und oft zusätzlich die Dokumentation sowie weitere Dateien von Programmen zu verwalten. Die Software ist aber so konzipiert, dass es eigentlich keine Rolle spielt, welche Art von Daten Sie damit verwalten.

Alles unter Kontrolle

Das Versionskontrollsystem Git entstand aus Frust heraus: Linux-Vater Linus Torvalds hatte lange Zeit den Quellcode des Kernels im proprietären VCS Bitkeeper verwaltet. Das ging gut, solange die Software kostenlos bereitstand. Als sich das änderte, begann Torvalds 2005 mit der Arbeit an einem neuen System – bis dahin gab es keines, das seinen Anforderungen entsprach.

Git verwaltet die Daten in einer Verzeichnisstruktur, deren Namen sich aus dem Hash-Wert der jeweiligen Dateien ergibt. Es enthält so eine automatische Integritätsprüfung. Es unterscheidet sich im Wesentlichen dadurch von ähnlichen Programmen, dass es das Erstellen und Verwerfen von Zweigen sehr einfach macht. Auf diese Weise lädt es dazu ein, mit Code zu experimentieren, zwingt Entwickler aber zugleich, den Hauptentwicklungszweig in Ordnung zu halten.

Pass erlaubt es, die Funktionen von Git direkt in den eigenen Befehlen zu nutzen. So haben Sie die Möglichkeit, Dateien zu synchronisieren und außerdem, falls gewünscht, auf einem zentralen Host zu speichern. Letzteres bietet den Vorteil, sich sehr einfach in eine Backup-Lösung zu integrieren.

Zentrale Sammelstelle

Um die Zugangsdaten mittels Git auf einem zentralen Host im lokalen Netzwerk zu speichern, muss das VCS dort installiert sein. Nutzen Sie ein vorkonfektioniertes NAS, suchen Sie in dessen Paketverwaltung nach der Software. Eine Alternative bietet der Einsatz eines stromsparenden Raspberry Pi für diese Aufgabe. Mit einem minimalen System, etwa auf Basis von Raspbian Lite, haben Sie einen idealen Rechner als Gegenstelle.

Der Host sollte vorzugsweise ein Login via Secure Shell erlauben. Wie Sie ein solches Login aufsetzen und anschließend SSH so konfigurieren, dass es sich im täglichen Einsatz möglichst effektiv in die Arbeit einfügt, erläutert ein separater Artikel in diesem Heft.

Für das folgende Beispiel nehmen wir an, Sie betreiben einen Raspberry Pi als NAS im lokalen Netzwerk unter dem Hostnamen storage. Auf ihm legen Sie nun im Home-Verzeichnis des Users pi das Repository an. Dazu wechseln Sie – etwa via SSH – auf den Rechner und legen als Erstes ein neues Repository an. Mit dem ersten Befehl aus Listing 2 erzeugen Sie ein einfaches Verzeichnis, mit dem zweiten initialisieren Sie dann das Repository.

Listing 2

$ mkdir -p repos/password-store
$ git --bare init repos/password-store

Über die Option --bare teilen Sie Git dabei mit, dass es sich hier nicht um ein Arbeitsverzeichnis handelt, sondern um eines, in das Sie Commits hineinschieben oder aus dem Sie Änderungen abrufen. Das hat die praktische Auswirkung, dass die Dateien, die Git zum Verwalten benötigt, direkt im Ordner liegen, statt in einem versteckten Verzeichnis .git unterhalb davon.

Um das neue, zentrale Repository nun aus dem Passwortmanager heraus zu nutzen, sorgen Sie als Erstes dafür, dass die Daten in .password-store/ unter der Kontrolle von Git stehen. Das erledigen Sie mit einem pass git init in einem Terminal. Das Versionskontrollsystem gibt die typischen Statusmeldungen aus.

TIPP

Achten Sie darauf, dass Sie den Parameter git nicht vergessen: Sonst versucht Pass, den Speicher für die Passwörter neu zu initialisieren.

Die Struktur der Befehle ist im Grund genommen immer dieselbe: Sie verwenden die reguläre Syntax für Git, stellen dieser aber immer den Programmnamen pass voran. So dürfen Sie den vollen Umfang der Funktionen von Git ausschöpfen, ohne dass dazu viel weitere Konfiguration erforderlich wäre.

Haben Sie das lokale Repository einmal initialisiert, gehen Sie nun daran, ein sogenanntes Remote hinzuzufügen, also ein entferntes Repository, mit dem Sie Daten austauschen. Das erledigen Sie über die Befehle aus Listing 3.

Listing 3

$ pass git init
$ pass git remote add origin pi@storage:repos/password-store
$ pass git push

Bei Hinzufügen eines externen Repositorys vergeben Sie als Erstes einen Namen, im Beispiel origin, und hängen daran die passende URL an. Den Namen dürfen Sie frei vergeben, origin hat sich als Konvention durchgesetzt. Mit dem letzten Befehl aus Listing 3 synchronisieren Sie abschließend das entfernte Ziel mit dem Bestand aus dem lokalen Repository.

Haben Sie die lokalen Beständen auf anderen Rechnern ebenfalls unter die Kontrolle von Git gestellt, so genügt es, den zentralen Rechner als Host zu konfigurieren, um die jeweiligen Dateien ebenfalls zu integrieren. Wollen Sie die Daten vom zentralen Rechner erst einmal abrufen, tippen Sie schlicht pass git pull.

Danach liegen auf dem entsprechenden Host dieselben verschlüsselten Dateien vor wie auf der zentralen Instanz. Möchten Sie also mit den Dateien von verschiedenen Rechnern arbeiten, macht dieses System den Abgleich leicht. Es bleibt aber trotzdem in Ihrer Verantwortung, die GPG-Schlüssel auf allen Hosts konsistent zu halten.

Fazit

Obwohl die Technik des zentralen Tools Pass vergleichsweise einfach ist – schließlich handelt es sich lediglich um ein Shell-Skript – macht die Kombination der ausgereiften Komponenten den Charme des Ganzen aus. Sie speichern auf diese Weise beliebig viele verschiedene Passwörter für unterschiedliche Accounts und benötigen doch nur ein Passwort, um alle zu entschlüsseln.

Das Synchronisieren via Git erlaubt es, über ein geteiltes Repository verschiedene Hosts abzugleichen. Dass sich dazu kein öffentliches Repository eignet, versteht sich eigentlich von selbst: Die Dateien sind zwar in der Regel durch GPG gut gesichert, aber eine Kopie der Daten lässt sich in Sekundenbruchteilen ziehen.

Infos

  1. Pass: https://www.passwordstore.org
  2. Passwortmanager im Vergleich: Martin Steigerwald, “Passwort-Speicher”, LU 01/2011, S. 60, https://www.linux-community.de/22388
  3. Unison: Erik Bärwaldt, “Datentransfer”, LU 07/2010, S. 64, https://www.linux-community.de/21142
  4. Git: http://http//www.git-scm.org
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 07/2018 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben