In meinen Puppet Installationen habe ich mir angewöhnt alles in Git zu Versionieren, sowohl die kleinsten Module, als auch die Site Konfiguration der einzelnen Nodes.
Das stellte mich vor das Problem, wie hinterlege ich hier Passwörter ohne sie in die Manifeste zu schreiben und später mit in der Versionskontrolle gespeichert zu haben – was unter Umständen ein Sicherheitsrisiko wäre, selbst bei der Verwendung von Hashes.
Was ich als Lösung für mich gefunden habe war trocla. Es handelt sich dabei um ein Ruby Gem und ein Puppetmodul, das die einfache Möglichkeit bereitstellt die Passwörter in einer eigenen Datei zu speichern, abseits der Manifeste. Um ein Passwort zu verwenden muss nur die Parser-Funktion trocla() im jeweiligen Manifest verwendet werden.
Funktionen
- Speichert Passwörter in einer YAML Datei, als einfache Key-Values
- Kann mehrere Hash-Typen und Plaintext speichern
- Passwörter können bei Bedarf automatisch erstellt werden
- Das Plaintext Passwort muss nicht gespeichert bleiben
- Muss nur auf dem Puppetmaster installiert sein
Wie funktioniert das?
Grundsätzlich muss man nur das Ruby Gem installieren, Abhängigkeiten werden dadurch eigentlich automatisch installiert. Es ist allerdings hilfreich soweit möglich Betriebssystem Pakete zu benutzen, vor allem für ruby-bcrypt.
gem install trocla
Nach der Installation stellt das CLI commando „trocla“ bereit um direkt mit den gespeicherten Daten zu arbeiten.
Wichtig: Solange nichts konfiguriert ist werden die Daten in ‚/tmp/trocla.yaml‘ gespeichert!
create
Mit create wird ein Passwort mit einem bestimmten Typen erstellt, oder einfach ausgegeben wenn schon vorhanden.
trocla create myadminuser plain trocla create global_root sha512crypt trocla create mysql_root mysql
get
Liefert ein Passwort des bestimmten Typs zurück, setzt aber voraus dass der Wert schon vorhanden ist.
trocla get mysql_root mysql
set
Setzt ein bestimmtes Passwort mit einem selbst festgelegten Wert.
trocla set user1 plain # (interaktive eingabe) trocla set --password supersicher123 user1 plain
reset
Setzt einen Passwort-Hash zurück und erzeugt einen neuen aus dem Plain Passwort.
trocla reset global_root sha512crypt
delete
Löscht ein Passwort aus dem Speicher, auch praktisch dafür um Plaintext Passwort zu löschen wenn man nur noch die Hashes braucht.
trocla delete global_root plain
Konfiguration mit Puppet
Als Konfigurationsdatei dient eine weitere YAML Datei, die Standardwerte sind unter default_config.yaml zu finden.
Das Puppetmodul sorgt dafür dass die Konfiguration und die Dateien auf dem Master automatisch angelegt und geschützt werden. Dazu muss noch die Puppetklasse trocla::config für den Puppetmaster included werden.
Folgende Dateien werden erzeugt:
/etc/puppet/trocla_data.yaml /etc/puppet/troclarc.yaml /etc/troclarc.yaml -> /etc/puppet/troclarc.yaml
Durch die letzte Datei kann man mit dem CLI Tool auch mit den Passwörtern arbeiten.
Verwendung in Puppet
Die Verwendung in Puppet ist dabei relativ simpel.
user { 'myadmin': password => trocla("$name", 'sha512crypt'), ... } /* oder wenn das Passwort nicht erzeugt werden soll */ user { 'root': password => trocla_get('root', 'sha512crypt'), ... }
Links
Hier noch ein paar Links zum Thema trocla:
- https://github.com/duritong/trocla (README lesen)
- https://github.com/duritong/puppet-trocla (README lesen)
- https://tech.immerda.ch/2011/12/trocla-get-hashed-passwords-out-of-puppet-manifests/
Ein geniales Modul finde ich, Danke an @duritong!
Das Titelbild stammt von Paul O’Rear auf Flickr (CC BY-SA 2.0).
0 Kommentare