Bereitstellung eines OpenVPN-Clients mit Stufen, die bei Fehlern anhalten
Fünf Stufen hindern ein Bereitstellungsskript daran, eine halbe Installation zu hinterlassen: Eingaben prüfen, Satz vorbereiten, atomar tauschen, einen Eigentümer aktivieren, Rückbau planen.
Bereitstellungsskripte, die einen Fehler melden und weiterlaufen, sind schlimmer als Skripte, die nie ausgeführt werden. Die Client-Einrichtung berührt geschützte Schlüssel, eine Identität am Gateway und einen Dienst, der möglicherweise bereits Datenverkehr bedient. Jedes davon braucht eine Abbruchbedingung, und das Skript muss wissen, welche Stufe es erreicht hat, als es anhielt.
Behandle das Ganze als eine Transaktion mit fünf Prüfpunkten, und lass jeden Prüfpunkt von sich aus die Fortsetzung verweigern.
Korrigiere die Eingaben, bevor du das Dateisystem berührst
Beginne mit einem ausdrücklichen Vertrag: eine Identität, eine Profilquelle, ein vorgesehener Dienst-Eigentümer. Prüfe, dass das Profil existiert, dass das referenzierte Zertifikat und der Schlüssel lesbar sind und dass das Zielverzeichnis zum erwarteten Paket gehört. Ein Pfad, der sich auflöst, ist kein Beweis dafür, dass das Material dahinter vollständig ist.
Weise leere Variablen früh zurück. Eine nicht gesetzte $DEVICE, die sich zu nichts expandiert, macht aus install -m 400 $KEY /etc/openvpn/client/ eine Kopie, die auf ein Verzeichnis zielt, und der Fehler kommt später als Dienst, der seinen Schlüssel nicht lesen kann.
Stelle den Profilsatz in einem Zwischenverzeichnis zusammen
Baue den vollständigen Satz zuerst an einem privaten Ort auf: Profil, CA, Client-Zertifikat, Schlüssel und jeden Helfer, den das Profil aufruft. Kopiere mit install -m 400 -o root -g root, damit die Rechte bei der Erstellung und nicht danach gesetzt werden. Prüfe dann die Verweise im Profil, denn eine relative ca- oder key-Zeile wird gegen das Arbeitsverzeichnis der Unit aufgelöst, sobald der Dienst startet. In das produktive Verzeichnis darf nichts geschrieben werden, bis der ganze Satz validiert.
Zeichne einen nicht geheimen Fingerabdruck dessen auf, was dieser Lauf erzeugt hat, zum Beispiel sha256sum office.conf neben einer Versionsmarkierung gespeichert. Genau dieser eine Wert erlaubt es einem erneuten Lauf, eine Aktualisierung von einem Leerlauf zu unterscheiden.
Tausche atomar und behalte den vorherigen Satz
Verschiebe den vorbereiteten Satz in einem Vorgang an seinen Platz, wo das Dateisystem es erlaubt, und behalte den geprüften vorherigen Satz unter einem zeitgestempelten Namen. Eine Teilkopie, die ein neues Profil neben einem alten Schlüssel hinterlässt, erzeugt einen Dienst, der sich mit der falschen Identität authentifiziert und nichts Nützliches über den Grund protokolliert. Wenn der Tausch nicht atomar sein kann, ordne die Verschiebungen so, dass das Profil zuletzt ankommt.
Wenn das Ziel bereits existiert, entscheide ausdrücklich, ob dieser Lauf eine Aktualisierung, ein identischer erneuter Lauf oder ein Konflikt mit dem Profil eines anderen Geräts ist. Ein Profil stillschweigend zu überschreiben, das zu einer anderen Identität gehört, ist der Weg, auf dem zwei Maschinen am Ende ein Zertifikat teilen. Lehne den Lauf stattdessen ab und nenne den konfliktierenden Eigentümer.
Aktiviere einen Eigentümer und weise es nach
Wähle einen Aktivierungspfad, entweder die systemd-Instanz oder NetworkManager, und verwende ihn durchgängig. Der Start eines unverwalteten openvpn-Prozesses neben einer aktivierten Unit ergibt zwei Tunnel, konkurrierende DNS-Aktualisierungen und keine klare Antwort darauf, welchen ein Stoppbefehl trifft. Prüfe nach der Aktivierung systemctl is-active openvpn-client@office, dann die Route zum entfernten Präfix, dann resolvectl status für den Resolver, den der Tunnel installiert hat. Schließe ab, indem du eine Ressource erreichst, für die der Tunnel existiert.
Ein laufender Prozess und ein grünes Tray-Symbol sind Prozessfakten, kein Beweis dafür, dass die Identität und die Verkehrsrichtlinie die Übergabe überlebt haben.
Erneuter Lauf und Rückbau sind getrennte Arbeitsabläufe
Ein zweiter Lauf sollte auf denselben geprüften Dateien und demselben Eigentümer konvergieren, nicht ein zweites Konto oder einen zweiten Daemon anlegen. Der Rückbau ist ein eigenes Verfahren: stoppe den genauen Eigentümer, archiviere oder lösche das lokale Profil gemäß Richtlinie und widerrufe die Identität am Gateway. Das Löschen einer lokalen Schlüsseldatei widerruft keine Kopie, die die Maschine bereits verlassen hat.
Halte einen Wiederherstellungsweg bereit, der nicht vom Tunnel abhängt, etwa Konsolenzugang oder eine zweite Verwaltungsroute. Eine Bereitstellungsänderung, die dich aus der Maschine aussperrt, ist eine gescheiterte Änderung, selbst wenn jede Stufe Erfolg gemeldet hat.
Das Skript, das es zu behalten lohnt, ist eine Transaktion um Eigentum und Nachweise. Eine kurze Liste privilegierter Kopierbefehle ist nicht dasselbe.