Blog

So führen Sie Startskripte auf gehärteten VMs aus

Laurens Knoll

Laurens Knoll

Aktualisiert Oktober 16, 2025
3 Minuten

Startskripten werden zur Konfiguration oder Initialisierung einer virtuellen Maschine beim Booten oder bei der Bereitstellung verwendet. Auf gehärteten Rechnern - mit schreibgeschützten Dateisystemen - können Ihre Skripte nicht ausgeführt werden. In diesem Blog erfahren Sie, warum das so ist und wie Sie das Problem lösen können.

Fehlerhafte Startskripte erkennen

Startup-Skripte schlagen lautlos fehl. Daher stellen Sie zunächst fest, dass die Zustandsprüfung der VM fehlschlägt, nur um festzustellen, dass das Startskript einfach nicht bereitgestellt oder ausgeführt werden konnte.

Im nächsten Beispiel kann ein Startskript aufgrund ungültiger Dateisystemberechtigungen nicht ausgeführt werden. Das -Dateisystem ist mit gemountet - wie in CCEID 1.1.9 oder CIS CSCv7 14.6 empfohlen - daher können ausführbare Dateien nicht ausgeführt werden. Interessanterweise wird google-startup-script.service jedoch als erfolgreich eingestuft.

...
Jun 14 10:24:31 laurens-vm google_metadata_script_runner[1690]: startup-script: /bin/bash: /tmp/metadata-scripts052481810/startup-script: Permission denied
Jun 14 10:24:31 laurens-vm google_metadata_script_runner[1690]: startup-script exit status 126
Jun 14 10:24:31 laurens-vm google_metadata_script_runner[1690]: Finished running startup scripts.
Jun 14 10:24:31 laurens-vm systemd[1]: google-startup-scripts.service: Succeeded.
...

Ablauf der Skriptausführung beim Start

Der Guest Agent für Google Compute Engine führt Ihre Startskripte aus. Genauer gesagt, holt sich die google-metadata-script-runner-Komponente das startup-script-Metadaten-Attribut, speichert das Inline-Skript im run_dir-Ordner und führt die temporäre Skriptdatei aus.

Bei Startskripten, die im Cloud-Speicher gesichert sind, startup-script-url-metadata-Attribut, lädt der Prozess das Skript in die temporäre Skriptdatei herunter.

Die Ausführung des Startskripts besteht aus zwei Phasen: Bereitstellung der Skriptdatei und Ausführung der Skriptdatei. Die Skriptbereitstellung schlägt fehl, wenn Sie auf einem schreibgeschützten Dateisystem bereitstellen. Die Ausführung des Skripts schlägt fehl, wenn Sie es auf einem noexec Dateisystem ausführen.

Es ist nicht möglich, den Ablauf der Skriptausführung zu ändern - obwohl ich Sie ermutige, auf GitHub einen Beitrag zu leisten. Lassen Sie uns daher einen Weg finden, den Speicherort der Startskriptdatei zu konfigurieren. Wenn wir einen beschreibbaren, ausführbaren Speicherort konfigurieren können, ist alles gut.

Speicherort der Startskriptdatei konfigurieren

Konfigurieren Sie den Speicherort der Startskriptdatei in der Konfigurationsdatei des Guest Agent. Genauer gesagt, setzen Sie die run_dir-Einstellung auf ein beschreibbares und ausführbares Dateisystem in Ihrem Image-Erstellungsprozess.

Das nächste Beispiel setzt die run_dir-Einstellung auf /var/lib/google, wobei davon ausgegangen wird, dass sie beschreibbar und ausführbar ist.

mkdir -p /var/lib/google

sed -i 's|run_dir =|run_dir = /var/lib/google|g' /etc/default/instance_configs.cfg

Booten Sie Ihr aktualisiertes Image, um zu überprüfen, ob das Startskript läuft.

...
Jun 14 10:24:31 laurens-vm google_metadata_script_runner[1690]: startup-script: Hello World!
Jun 14 10:24:31 laurens-vm google_metadata_script_runner[1690]: startup-script exit status 0
Jun 14 10:24:31 laurens-vm google_metadata_script_runner[1690]: Finished running startup scripts.
Jun 14 10:24:31 laurens-vm systemd[1]: google-startup-scripts.service: Succeeded.
...

Wenn Sie den Speicherort der Startdatei nicht ändern können

Ihr Image ist unveränderlich, großartig! Höchstwahrscheinlich brauchen Sie kein Startskript auszuführen. Für die Zwecke dieses Artikels sollten Sie jedoch in Erwägung ziehen, das Startskript als Dienst während der Erstellung Ihres Images zu installieren. In diesen Anleitungen erfahren Sie, wie Sie dies unter Linux mit SystemD oder unter Windows mit Geplanten Tasks tun können.

Fazit

Startskripts ermöglichen eine zusätzliche VM-Konfiguration. Die Skripte werden ausgeführt, indem die Skriptdatei zunächst bereitgestellt und später ausgeführt wird. Bei diesem Arbeitsablauf werden die Startskripten nicht ausgeführt, wenn Ihr Dateisystem schreibgeschützt oder nicht ausführbar ist. Zum Glück können Sie den Guest Agent so konfigurieren, dass er ein geeignetes Dateisystem verwendet.

Bild von Mike Goad aus Pixabay

Verfasst von

Laurens Knoll

As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.

Contact

Let’s discuss how we can support your journey.