Die Warnung zu mehreren Skripten klingt wie eine Beschwerde über die Reihenfolge, also ist die naheliegende Lösung, die Zeilen umzusortieren, bis sie verschwindet. Sie ist keine Beschwerde über die Reihenfolge. Eine spätere --up-Definition ersetzt das bereits für diese Stufe gespeicherte Kommando, und der Parser sagt es, was bedeutet, dass von Ihren zwei Skripten genau eines jemals gelaufen ist. Das andere steht nicht dahinter in der Warteschlange; es ist weg.

Deshalb verdient die Warnung Aufmerksamkeit, auch wenn sie nicht fatal ist: Sie kündigt eine DNS-Aktualisierung oder eine Routenänderung an, die stillschweigend aufgehört hat zu geschehen.

Die Warnung dreht sich nicht um die Reihenfolge

OpenVPN speichert ein einziges Benutzerskript-Kommando für die up-Stufe. Trifft der Parser auf eine andere Definition, aus dem Profil, einer eingebundenen Datei oder der Kommandozeile, ersetzt er das bereits Gehaltene und gibt die Warnung aus. Nichts wird verkettet, nichts läuft zweimal, und es gibt keine Reihenfolgefrage. Es überlebt das Kommando, das der Parser zuletzt gesehen hat, weshalb das Verschieben einer Zeile den Gewinner ändern kann, während das andere Skript tot bleibt.

Dasselbe Muster gilt für die übrigen Skriptstufen: je ein Kommando. Müssen beide Arbeiten geschehen, brauchen sie einen einzigen Einstiegspunkt, nicht zwei Anweisungen, die wie eine Liste aussehen.

Finden Sie beide Definitionen im tatsächlichen Start

Beginnen Sie bei dem, was der Daemon tatsächlich erhalten hat, nicht bei dem Profil, das Sie bearbeitet haben. ps -ef und die ExecStart der Unit zeigen die Kommandozeile, die --up aus einem Container-Einstiegspunkt oder einem Wrapper hinzufügen kann; eine Init-Datei der Distribution kann dasselbe tun. systemctl cat openvpn-server@server zeigt, was der Dienst selbst beiträgt, und ein rekursives grep über das Konfigurationsverzeichnis findet die Definitionen auf Dateiebene. Duplikate stammen meist aus verschiedenen Schichten, und genau deshalb ändert das Bearbeiten einer Datei nichts.

Ein Skript in ein anderes Verzeichnis zu kopieren oder umzubenennen entfernt ebenfalls keine Anweisung. Der Parser zählt Definitionen, nicht Dateien.

Lassen Sie einen Hook die Arbeit übernehmen

Die dauerhafte Lösung ist ein einziger Dispatcher, der beide Aktionen in bewusster Reihenfolge ausführt. Ein kurzes Shell-Skript mit set -eu, das die erforderliche Integration und danach die lokale Aktion aufruft und "$@" weiterreicht, damit Argumentgrenzen erhalten bleiben, hält das Verhalten an einer prüfbaren Stelle. Argumente weiterzureichen bewahrt sie nur; es belegt nicht, dass beide Helfer dieselbe Schnittstelle erwarten, also lesen Sie den Vertrag jedes einzelnen. Entscheiden Sie, was ein Fehler tun soll und ob Teiländerungen rückgängig gemacht werden müssen.

Bietet der Starter einen unterstützten Erweiterungs-Hook, ziehen Sie ihn handgebauter Verkettung vor. Ein Container-Image oder ein Herstellerpaket hat oft einen dokumentierten Platz für Zusatzarbeit, und seine Nutzung verhindert, dass ein Upgrade Ihren Dispatcher überschreibt.

Aufräumen gehört in die passende down-Stufe. Eine up-Aktion, die DNS umschreibt oder Routen hinzufügt, braucht eine dokumentierte Rücknahme, und ein Dispatcher, der nur den Start behandelt, ist ein halbes Design.

Bestätigen Sie die Integration, nicht nur die Stille

Die doppelte Warnung zu beseitigen ist der leichte Teil; die Integration muss trotzdem funktionieren. Prüfen Sie den Resolver-Zustand nach dem Verbinden mit resolvectl status oder indem Sie /etc/resolv.conf lesen, und bestätigen Sie die Routen mit ip route. Trennen Sie dann die Verbindung und verbinden Sie erneut, denn ein hastig verketteter Hook lässt gern etwas aus der vorigen Sitzung zurück. journalctl -u openvpn-server@server -b zeigt, ob Ihr Dispatcher lief und was er ausgegeben hat.

Halten Sie die Rechte des Hooks dort, wo sie hingehören. script-security zu erhöhen oder den Daemon mit mehr Rechten laufen zu lassen ist keine Lösung für einen ersetzten Hook; es erweitert, was jedes künftige Skript tun kann, auch eines, das ein Angreifer benennen darf.

Das Zeichen für eine echte Lösung ist nicht Stille im Log. Es sind die DNS-Antwort, der Routeneintrag und das Aufräumen, die nach zwei Wiederverbindungen stimmen.

Ähnliche Artikel