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

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 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.
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.
Unsere Ideen
Weitere Blogs
Contact



