

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
<a name="migrate-to-nonroot"></a>

**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
<a name="migrate-nonroot-considerations"></a>

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
<a name="migrate-nonroot-single-device"></a>

Dieses Migrationsverfahren folgt dem unter beschriebenen Ansatz[Lösung 3: Einrichtung AWS IoT Greengrass V2 als Nicht-Root-Benutzer mit Benutzertrennung nach Komponenten](setup-greengrass-non-root.md#non-root-solution-3). 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
<a name="migrate-nonroot-step1"></a>

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 --system {{group-name}}
sudo useradd --system --create-home --shell /sbin/nologin -g {{group-name}} {{user-name}}
```

### Schritt 2: Sichern Sie den Dateibesitz
<a name="migrate-nonroot-step2"></a>

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
<a name="migrate-nonroot-step3"></a>

Übertragen Sie den Besitz des AWS IoT Greengrass Verzeichnisses auf den Benutzer, der kein Root-Benutzer ist.

```
sudo chown -R {{user-name}}:{{group-name}} /greengrass/v2
```

### Schritt 4: Erstellen Sie das Systemd-Drop-In-Override
<a name="migrate-nonroot-step4"></a>

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-name}}
AmbientCapabilities=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 unter[Lösung 3: Einrichtung AWS IoT Greengrass V2 als Nicht-Root-Benutzer mit Benutzertrennung nach Komponenten](setup-greengrass-non-root.md#non-root-solution-3).

### Schritt 5: Systemd neu laden und starten AWS IoT Greengrass
<a name="migrate-nonroot-step5"></a>

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
<a name="migrate-nonroot-step6"></a>

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 melden`FINISHED`. `FINISHED`ist der erwartete Terminalstatus für`aws.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
<a name="migrate-nonroot-single-rollback"></a>

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](#migrate-nonroot-step6) 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-backup` wenn 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 userdel {{user-name}}
  sudo groupdel {{group-name}}
  ```

  Wenn andere Dienste oder Komponenten diesen Benutzer verwenden, entfernen Sie den Benutzer nicht.

## Migrieren Sie eine Flotte von Geräten
<a name="migrate-nonroot-fleet"></a>

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](#migrate-nonroot-fleet-bootstrap)
+ [Verwenden Sie AWS Systems Manager](#migrate-nonroot-fleet-ssm)

### Verwenden Sie ein benutzerdefiniertes AWS IoT Greengrass Bootstrap-Komponente
<a name="migrate-nonroot-fleet-bootstrap"></a>

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 auf`true`, 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](#migrate-nonroot-step6). 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
<a name="migrate-nonroot-fleet-bootstrap-rollback"></a>

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-trigger` Wenn 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
<a name="migrate-nonroot-fleet-ssm"></a>

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](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html).