Cloud-init und Maschinen-Images
Zwei Wege, die manuelle Installation zu überspringen: eine cloud-init-Vorlage einfügen, wenn Sie einen VPS erstellen, oder ein Maschinen-Image bauen, auf dem bereits alles installiert ist.
Cloud-init (ein Server nach dem anderen)
panel/deploy/cloud-init.yaml ist eine User-Data-Vorlage. Bearbeiten Sie die wenigen Einstellungen
oben, fügen Sie sie in das „user data"-Feld Ihres Anbieters beim Erstellen des Servers ein, und das
Panel ist oben, sobald der Server das Booten abgeschlossen hat. Fortschritt und etwaige Fehler landen in
/var/log/nimbopanel-provision.log.
Behandeln Sie User Data nicht als Geheimnisspeicher
Das ist der Teil, den man zweimal lesen sollte. Bei jedem großen Anbieter bleibt User Data von
innerhalb der laufenden Instanz über HTTP unter 169.254.169.254 abrufbar — und diese Adresse ist von
jedem Prozess auf der Maschine erreichbar, einschließlich des PHP-Skripts eines Hosting-Kunden.
Ein in User Data eingefügter Lizenzschlüssel ist also von jedem Kunden lesbar, den Sie hosten, sofern nichts es verhindert. Die Vorlage verhindert es in zwei Schritten, in dieser Reihenfolge:
- Sie sperrt den Metadaten-Dienst für alle außer root, bevor der Schlüssel auf die Platte gelangt;
- nachdem der Installer den Schlüssel in einer nur für root zugänglichen Konfiguration gespeichert hat, vernichtet sie die auf der Platte liegende Kopie der User Data.
Wenn Sie den Schlüssel lieber gar nicht dort ablegen möchten, lassen Sie ihn leer und geben Sie ihn danach aus dem Panel ein. Der Server läuft unlizenziert, bis Sie das tun, was ein unterstützter Zustand ist.
Maschinen-Images (viele Server aus einem Build)
panel/deploy/packer/nimbopanel.pkr.hcl baut ein Image mit dem gesamten installierten Stack. Dort
gehen die Minuten hin — Pakete, PHP, Mail, DNS, die Datenbank —, und nichts davon unterscheidet sich
zwischen den Servern.
Der Fehler, der jeden Klon zum selben Server macht
Ein Image darf keine Identität enthalten. Wenn doch, teilt sich jeder daraus gebaute Server diese Identität:
| Versehentlich eingebacken | Was auf jedem Klon passiert |
|---|---|
| SSH-Host-Schlüssel | Sie präsentieren alle denselben Schlüssel. Wer sich zwischen einen Kunden und seinen Server positioniert, kann ihn auf allen imitieren, ohne dass eine Warnung angezeigt wird |
| Die Nimbopanel-instance-id | Der Lizenz-Fingerabdruck leitet sich daraus ab, und der Installer sät eine bereits vorhandene id nie neu — sodass tausend Server wie eine Aktivierung aussehen |
/etc/machine-id |
systemd, DHCP-Leases und journald-Identität kollidieren |
| Die Panel-Datenbank und -Konfiguration | Admin-Passwort, Lizenzschlüssel und jedes Konto stecken in einer Datei, die Fremde herunterladen |
| DKIM-Schlüssel, TLS-Zertifikate | Für die Build-Maschine ausgestellt; auf einem Klon bedeutungslos und an jeden geleakt, der das Image hat |
Keines davon macht sich bemerkbar. Sie werden später gefunden, von jemand anderem.
panel/deploy/image-deidentify.sh entfernt all das, und der Packer-Build führt es als letzten
Schritt aus und führt es dann mit --check erneut aus, sodass ein Build scheitert, statt einen
Snapshot zu erzeugen, der nur sauber aussieht. Alles Entfernte wird beim ersten Boot des Klons neu
erzeugt: sshd generiert neue Host-Schlüssel, systemd schreibt eine neue machine-id, der Installer sät
eine frische instance-id.
/etc/machine-id wird leer gelassen, nicht gelöscht — systemd liest eine leere Datei als „beim Boot
eine erzeugen", während eine fehlende Datei manche Images gar nicht booten lässt.
Vor der Veröffentlichung überprüfen
sudo ./image-deidentify.sh # remove
sudo ./image-deidentify.sh --check # confirm, exits non-zero if anything survives
Führen Sie die Prüfung auch auf einem gebooteten Klon aus, nicht nur zur Build-Zeit. Meldet sie etwas, veröffentlichen Sie das Image nicht.
Marketplace-Einträge
Die „1-click app"-Programme der Anbieter (Vultr, DigitalOcean, Linode, Contabo) haben jeweils ihr eigenes Einreichungsformat und ihre eigene Prüfung. Das obige Image ist das Artefakt, das sie verlangen; der Papierkram ist pro Anbieter und nichts, was dieses Werkzeug für Sie erledigen kann.