Dokumentation / Cloud-init und Maschinen-Images

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:

  1. Sie sperrt den Metadaten-Dienst für alle außer root, bevor der Schlüssel auf die Platte gelangt;
  2. 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.