Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Migrieren AWS IoT Greengrass V2 Core-Geräte zum Nicht-Rooten
Wichtig
In diesem Thema wird ein empfohlener Migrationsansatz beschrieben. Möglicherweise müssen Sie diese Schritte an Ihre Gerätekonfiguration, Ihr Betriebssystem und die installierte Software anpassen.
Wird auf Linux-Geräten standardmäßig als Root-Benutzer AWS IoT Greengrass ausgeführt. Sie können die Sicherheitslage Ihrer Geräte verbessern, indem Sie AWS IoT Greengrass Kerngeräte so migrieren, dass sie als Benutzer ohne Root-Rechte ausgeführt werden und nur die Linux-Funktionen nutzen, AWS IoT Greengrass die erforderlich sind. Sie können ein einzelnes Gerät migrieren oder die Migration auf eine Flotte skalieren.
Überlegungen
Beachten Sie Folgendes, bevor Sie zu einer Nicht-Root-Version migrieren:
-
Dieses Migrationsverfahren gilt für AWS IoT Greengrass Kerngeräte, auf denen AWS IoT Greengrass Nucleus (Java-based) unter Linux mit systemd ausgeführt wird. Es gilt nicht für Geräte, auf denen AWS IoT Greengrass Nucleus Lite ausgeführt wird.
-
Testen Sie die Migration auf einem einzelnen Gerät in einer Entwicklungsumgebung, bevor Sie Ihre Produktionsflotte migrieren.
Migrieren Sie ein einzelnes Gerät
Dieses Migrationsverfahren folgt dem unter beschriebenen AnsatzLösung 3: Einrichtung AWS IoT Greengrass V2 als Nicht-Root-Benutzer mit Benutzertrennung nach Komponenten. Bevor Sie beginnen, müssen Sie die Voraussetzungen in diesem Thema erfüllen, einschließlich der Sudoers-Konfiguration, die es Nicht-Root-Benutzern ermöglicht, Komponenten als separate Benutzer auszuführen.
Gehen Sie wie folgt vor, um ein einzelnes Gerät zu migrieren, bevor Sie Ihre Flotte migrieren.
Schritt 1: Erstellen Sie den Benutzer und die Gruppe ohne Root-Rechte
Stellen Sie eine Verbindung zu Ihrem Gerät her und erstellen Sie den Systembenutzer und die Systemgruppe, die AWS IoT Greengrass ausgeführt werden als. Ersetzen Sie user-name und group-name durch die Namen, die Sie verwenden möchten.
sudo groupadd --systemgroup-namesudo useradd --system --create-home --shell /sbin/nologin -ggroup-nameuser-name
Schritt 2: Sichern Sie den Dateibesitz
Beenden Sie AWS IoT Greengrass und speichern Sie die aktuelle Dateieigentumsstruktur, damit Sie sie wiederherstellen können, falls Sie ein Rollback durchführen müssen.
sudo systemctl stop greengrass.service sudo mkdir -p /opt/greengrass-backup sudo find /greengrass/v2 -exec stat -c 'chown %U:%G "%n"' {} \; | sudo tee /opt/greengrass-backup/restore_ownership.sh > /dev/null sudo chmod 700 /opt/greengrass-backup/restore_ownership.sh
Anmerkung
Die Befehle in diesem Thema werden /greengrass/v2 als AWS IoT Greengrass Stammpfad verwendet. Wenn Sie AWS IoT Greengrass die Installation an einem anderen Ort vorgenommen haben, /greengrass/v2 ersetzen Sie ihn durch Ihren tatsächlichen AWS IoT Greengrass Stammpfad.
Schritt 3: Ändern Sie den Eigentümer der Datei
Übertragen Sie den Besitz des AWS IoT Greengrass Verzeichnisses auf den Benutzer, der kein Root-Benutzer ist.
sudo chown -Ruser-name:group-name/greengrass/v2
Schritt 4: Erstellen Sie das Systemd-Drop-In-Override
Erstellen Sie ein Drop-In-Verzeichnis und eine Konfigurationsdatei, die Systemd anweist, AWS IoT Greengrass als Benutzer ohne Root-Rechte mit den erforderlichen Linux-Fähigkeiten zu arbeiten.
sudo mkdir -p /etc/systemd/system/greengrass.service.d
Die Migration verwendet eine Systemd-Drop-In-Override-Datei unter. /etc/systemd/system/greengrass.service.d/10-nonroot.conf Eine Drop-In-Override ersetzt die Einstellungen in der Basis-Servicedatei, ohne sie direkt zu ändern. Diese Überschreibung konfiguriert Systemd so, dass der AWS IoT Greengrass Dienst als Benutzer ohne Root-Rechte mit einer begrenzten Anzahl von Linux-Funktionen ausgeführt wird. Das Entfernen des Drop-In-Verzeichnisses bewirkt, dass Systemd zur greengrass.service Basisdatei zurückkehrt, die als Root-Verzeichnis mit der ursprünglichen Konfiguration ausgeführt wird.
Erstellen Sie die Datei /etc/systemd/system/greengrass.service.d/10-nonroot.conf mit dem folgenden Inhalt:
[Service] User=user-nameAmbientCapabilities=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE CapabilityBoundingSet=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE ProtectSystem=strict ReadWritePaths=/greengrass/v2 /tmp
Hinweise zu diesen Systemd-Direktiven und den erforderlichen Funktionen finden Sie unterLösung 3: Einrichtung AWS IoT Greengrass V2 als Nicht-Root-Benutzer mit Benutzertrennung nach Komponenten.
Schritt 5: Systemd neu laden und starten AWS IoT Greengrass
Führen Sie die folgenden Befehle aus, um den Systemd-Daemon neu zu laden und zu starten. AWS IoT Greengrass
sudo systemctl daemon-reload sudo systemctl start greengrass.service
Schritt 6: Überprüfen Sie die Migration
Vergewissern Sie AWS IoT Greengrass sich, dass es als Nicht-Root-Benutzer ausgeführt wird.
sudo systemctl status greengrass.service ps -ef | grep greengrass
In der Ausgabe wird der Benutzer, der kein Root-Benutzer ist, als Prozessbesitzer anstelle von angezeigt. root
Bestätigen Sie als Nächstes, dass alle bereitgestellten Komponenten ausgeführt werden. Sie müssen die aws.greengrass.Cli Komponente auf dem Gerät bereitstellen, um diesen Befehl ausführen zu können.
sudo /greengrass/v2/bin/greengrass-cli component list
Jede Komponente sollte einen Wert State von RUNNING oder meldenFINISHED. FINISHEDist der erwartete Terminalstatus füraws.greengrass.Nucleus. Untersuchen Sie alle Komponenten im ERRORED Status BROKEN oder, bevor Sie die Migration als abgeschlossen betrachten.
Führen Sie ein Rollback eines einzelnen Geräts durch
Wenn Sie das Gerät wiederherstellen AWS IoT Greengrass müssen, um es als Root-Benutzer auszuführen, entfernen Sie die Drop-In-Override, stellen Sie das Eigentum an der Datei wieder her und starten Sie das System neu AWS IoT Greengrass.
sudo systemctl stop greengrass.service sudo rm -rf /etc/systemd/system/greengrass.service.d sudo bash /opt/greengrass-backup/restore_ownership.sh sudo systemctl daemon-reload sudo systemctl start greengrass.service
Führen Sie die Bestätigungsbefehle Schritt 6: Überprüfen Sie die Migration erneut aus, um zu bestätigen, dass das Programm als Root-Benutzer ausgeführt AWS IoT Greengrass wird. Der Prozess sollte root als Besitzer angezeigt werden.
Nachdem Sie bestätigt haben, dass das Rollback erfolgreich war, können Sie optional die Migrationsartefakte bereinigen:
-
Backup-Verzeichnis — Sie können es behalten,
/opt/greengrass-backupwenn Sie die Migration später erneut versuchen möchten, oder es entfernen:sudo rm -r /opt/greengrass-backup -
Non-root Benutzer und Gruppe — Wenn Sie nicht mehr vorhaben, AWS IoT Greengrass als Nicht-Root-Benutzer zu arbeiten, können Sie den Benutzer und die Gruppe entfernen, die Sie in Schritt 1 erstellt haben:
sudo userdeluser-namesudo groupdelgroup-nameWenn andere Dienste oder Komponenten diesen Benutzer verwenden, entfernen Sie den Benutzer nicht.
Migrieren Sie eine Flotte von Geräten
Nachdem Sie die Migration auf einem einzelnen Gerät überprüft haben, können Sie die Migration auf Ihre gesamte Flotte skalieren. Wählen Sie eine der folgenden Methoden:
Verwenden Sie ein benutzerdefiniertes AWS IoT Greengrass Bootstrap-Komponente
Sie können eine benutzerdefinierte AWS IoT Greengrass Komponente erstellen, die die Schritte zur Migration einzelner Geräte in Ihrer Flotte automatisiert. Dieser Ansatz ist eigenständig und verwendet nur Bereitstellungen. AWS IoT Greengrass Es sind keine externen Tools wie Systems Manager erforderlich.
Die Komponente verwendet den Bootstrap-Lebenszyklus mit der RequiresPrivilege Einstellung auftrue, wodurch die Komponente während der Bereitstellung als Root ausgeführt wird. Das Bootstrap-Skript führt dieselben privilegierten Operationen aus wie die Einzelgeräteprozedur:
-
Erstellen Sie den Benutzer und die Gruppe, die nicht Root sind, falls sie noch nicht existieren.
-
Erstellen Sie eine Sicherungskopie der Dateieigentümerstruktur für das Rollback.
-
Ändern Sie den Besitzer des AWS IoT Greengrass Stammverzeichnisses auf den Benutzer, der kein Root-Benutzer ist.
-
Erstellen Sie die Systemd-Drop-In-Override-Datei.
-
Laden Sie den Systemd-Daemon neu.
-
Beenden Sie das Programm mit dem Code 101, um das Gerät neu zu starten.
Wichtig
Die Komponente muss mit dem Code 101 beendet werden, nicht mit 100. Der Exit-Code 100 startet nur den AWS IoT Greengrass JVM-Prozess neu, der die bereits im Speicher zwischengespeicherte Systemd-Dienstkonfiguration verwendet. Ein vollständiger Neustart zwingt Systemd, die neue Drop-In-Override von der Festplatte zu lesen und als Nicht-Root-Benutzer zu starten. AWS IoT Greengrass Durch den Neustart werden vorübergehend alle Dienste auf dem Gerät unterbrochen.
Machen Sie die Komponente idempotent, damit erneute Bereitstellungen nicht fehlschlagen, wenn Sie das Gerät bereits migriert haben.
Stellen Sie nach Abschluss der Migrationsbereitstellung sicher, dass Ihre Geräte nicht als Root-Benutzer ausgeführt werden. Weitere Informationen finden Sie unter Schritt 6: Überprüfen Sie die Migration. Sie können eine Überprüfungskomponente bereitstellen, die den laufenden Benutzer überprüft und das Ergebnis meldet, oder den Bereitstellungsstatus in der AWS IoT Greengrass Konsole überwachen.
Richten Sie einen Rollback-Mechanismus ein
Um die Stammkonfiguration aus der Ferne in Ihrer Flotte wiederherzustellen, muss Ihre Migrationskomponente einen Rollback-Mechanismus einrichten. Ein Ansatz besteht darin, systemd zur Überwachung nach einer Triggerdatei zu verwenden. Dieser Ansatz erfordert die folgenden Systemd-Ressourcen:
-
Ein Rollback-Skript, das die Drop-In-Override entfernt, die ursprüngliche Dateieigentümerschaft aus der Sicherung wiederherstellt, den Systemd-Daemon neu lädt und als Root-Benutzer neu startet. AWS IoT Greengrass
-
Ein Systemd-Oneshot-Dienst, der das Rollback-Skript als Root ausführt. Ein Oneshot-Dienst führt eine einzelne Aufgabe aus und wird dann beendet, anstatt als langlebiger Daemon zu laufen.
-
Eine Systemd-Pfadeinheit, die einen bestimmten Dateipfad überwacht, wie z. B.
/greengrass/v2/rollback/.rollback-triggerWenn die Datei angezeigt wird, startet die Pfad-Unit automatisch den Oneshot-Rollback-Dienst.
Mit diesem Mechanismus können Sie ein Gerät zurücksetzen, indem Sie eine einfache AWS IoT Greengrass Komponente bereitstellen, die die Triggerdatei erstellt. Die Systemd-Pfadeinheit erkennt die Datei, führt den Rollback-Dienst als Root aus und stellt AWS IoT Greengrass die ursprüngliche Root-Konfiguration wieder her.
Verwenden Sie AWS Systems Manager
Wenn Sie den Systems Manager zur Verwaltung Ihrer Geräte verwenden, können Sie ein SSM-Dokument erstellen, das die Schritte zur Migration einzelner Geräte automatisiert. Da SSM unabhängig von ausgeführt wird AWS IoT Greengrass, kann es den AWS IoT Greengrass Dienst direkt beenden und neu starten, ohne das Gerät neu zu starten.
Ihr SSM-Dokument muss die folgenden Anforderungen erfüllen:
-
Beenden Sie die aktuelle Dienstkonfiguration AWS IoT Greengrass und die Dateieigentumsstruktur und sichern Sie sie.
-
Erstellen Sie den Benutzer und die Gruppe ohne Root-Rechte.
-
Ändern Sie den Besitzer des AWS IoT Greengrass Verzeichnisses auf den Benutzer, der kein Root-Benutzer ist.
-
Erstellen Sie die Systemd-Drop-In-Override-Datei.
-
Laden Sie den Systemd-Daemon neu und starten Sie ihn. AWS IoT Greengrass
-
Stellen Sie sicher, dass der AWS IoT Greengrass Vorgang als Benutzer ohne Root erfolgreich gestartet wurde.
Um die Migration für Ihre gesamte Flotte durchzuführen, verwenden Sie den Systems Manager Run Command, um das SSM-Dokument mithilfe von Tags oder Ressourcengruppen auf Ihren Geräten auszuführen. Sie können den Status der Befehlsausführung in der Systems Manager-Konsole überwachen, in der das Ergebnis für jedes Zielgerät einschließlich aller Fehler angezeigt wird.
Um ein Rollback durchzuführen, erstellen Sie ein separates SSM-Dokument, das stoppt AWS IoT Greengrass, die Drop-In-Override entfernt, die ursprüngliche Dateieigentümerschaft wiederherstellt, den Systemd-Daemon neu lädt und als Root-Benutzer neu startet. AWS IoT Greengrass Führen Sie dieses Dokument auf den Geräten aus, für die Sie ein Rollback durchführen müssen.
Weitere Informationen zum Ausführen von Befehlen auf verwalteten Knoten finden Sie unter Befehle mit dem Systems Manager Run Command ausführen.