

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.

# AWS IoT Greengrass V2 Core-Geräte als Nicht-Root-Geräte einrichten
<a name="setup-greengrass-non-root"></a>

Auf dieser Seite werden vier Lösungen für die Ausführung der AWS IoT Greengrass Core-Software als Nicht-Root-Benutzer vorgestellt. Sehen Sie sich die Vergleichstabelle an, um die Funktionen und Kompromisse der einzelnen Lösungen zu verstehen, und ermitteln Sie dann anhand des Entscheidungsablaufdiagramms, welche Lösung Ihren Anforderungen entspricht.

**Anmerkung**  
Die Nicht-Root-Lösungen auf dieser Seite gelten nur für AWS IoT Greengrass Nucleus auf Linux-Geräten. Windows ist nicht enthalten, da es unter Windows als Systemdienst ausgeführt werden AWS IoT Greengrass V2 muss. Informationen zur standardmäßigen Root-Installation unter Linux finden Sie unter[Installieren Sie die AWS IoT Greengrass Core-Software mit automatischer Ressourcenbereitstellung](quick-installation.md).  
Informationen zum Ausführen von AWS IoT Greengrass Nucleus Lite als Nicht-Root-Benutzer finden Sie unter [Podman im AWS IoT Greengrass Nucleus GitHub Lite-Repository verwenden](https://github.com/aws-greengrass/aws-greengrass-lite/blob/main/docs/BUILD.md#optional-using-podman).

**Topics**
+ [Wählen Sie eine Nicht-Root-Lösung](#non-root-choose-solution)
+ [Lösung 1: AWS IoT Greengrass V2 Ohne Root-Zugriff einrichten](#non-root-solution-1)
+ [Lösung 2: Ohne Benutzertrennung der Komponenten AWS IoT Greengrass V2 als Root-Benutzer einrichten](#non-root-solution-2)
+ [Lösung 3: AWS IoT Greengrass V2 Als Nicht-Root-Benutzer einrichten und dabei die einzelnen Benutzer trennen](#non-root-solution-3)
+ [Lösung 4: AWS IoT Greengrass V2 Als Root-Benutzer mit eingeschränkten Funktionen einrichten](#non-root-solution-4)
+ [Linux-Funktionen werden benötigt von AWS IoT Greengrass V2](#linux-capabilities-reference)

## Wählen Sie eine Nicht-Root-Lösung
<a name="non-root-choose-solution"></a>

Verwenden Sie die folgende Tabelle, um die Nicht-Root-Lösungen zu vergleichen und ihre Vor- und Nachteile zu verstehen. Jede Lösung bietet je nach Ihren Sicherheitsanforderungen und Geräteeinschränkungen unterschiedliche Funktionen.


**Lösungen ohne Root-Rechte**  

| Lösung | Erfordert Root-Zugriff | Kann Komponenten unter verschiedenen Benutzern ausführen | Führt Greengrass als Systemdienst aus | Am besten geeignet für | 
| --- | --- | --- | --- | --- | 
| [Lösung 1: Kein Root-Zugriff](#non-root-solution-1) | Nein | Nein | Nein (Benutzerservice optional) | Geräte, auf denen Sie keinen Root-Zugriff haben | 
| [Lösung 2: Einzelbenutzer ohne Root](#non-root-solution-2) | Ja (nur Setup) | Nein | Ja | Greengrass als Nicht-Root-Benutzer ausführen, wobei alle Komponenten unter demselben Benutzer ausgeführt werden | 
| [Lösung 3: Kein Root, mehrere Benutzer](#non-root-solution-3) | Ja (nur Setup) | Ja | Ja | Greengrass als Nicht-Root-Benutzer ausführen, während Komponenten unter verschiedenen Benutzern ausgeführt werden | 
| [Lösung 4: Root mit eingeschränkten Funktionen](#non-root-solution-4) | Ja | Ja | Ja | Greengrass als Root mit einer begrenzten Anzahl von Linux-Funktionen ausführen | 

Das folgende Flussdiagramm führt Sie durch die Auswahl der geeigneten Lösung auf der Grundlage Ihrer Geräteeinschränkungen und -anforderungen.

![\[Flussdiagramm, das den Entscheidungsprozess für die Auswahl einer Nicht-Root-Lösung zeigt. Fragen Sie zunächst, ob Sie auf Ihrem Kerngerät Root-Zugriff haben. Falls nein, verwenden Sie Lösung 1. Falls ja, fragen Sie, ob Sie Komponenten unter verschiedenen Linux-Benutzern ausführen müssen. Falls nein, verwenden Sie Lösung 2. Falls ja, fragen Sie, ob Sie möchten, dass Greengrass als Root-Benutzer mit eingeschränkten Funktionen ausgeführt wird. Falls ja, verwenden Sie Lösung 4. Falls nein, verwenden Sie Lösung 3.\]](http://docs.aws.amazon.com/de_de/greengrass/v2/developerguide/images/non-root-solution-decision-flow.png)


## Lösung 1: AWS IoT Greengrass V2 Ohne Root-Zugriff einrichten
<a name="non-root-solution-1"></a>

Verwenden Sie diese Lösung, wenn Sie auf dem Gerät keinen Root-Zugriff haben. In dieser Konfiguration wird die AWS IoT Greengrass Core-Software ausschließlich als Benutzer ohne Root-Rechte ausgeführt.

**Kompromisse**  
Diese Lösung hat die folgenden Einschränkungen:
+ **Keine Trennung der Komponenten durch Benutzer** — Alle Komponenten werden unter demselben Benutzer ausgeführt, der die AWS IoT Greengrass Core-Software ausführt. Sie können die `posixUser` Konfiguration nicht verwenden, um Komponenten unter verschiedenen Benutzern auszuführen.
+ **RequiresPrivilege ignoriert** — Die AWS IoT Greengrass Core-Software ignoriert die `RequiresPrivilege` Option in den Komponentenrezepten. Komponenten können keine erhöhten Rechte anfordern.
+ **Kein Systemdienst** — Sie können die AWS IoT Greengrass Core-Software nicht als Systemdienst installieren. Sie können ihn optional so konfigurieren AWS IoT Greengrass V2 , dass er als Systemd-Benutzerdienst ausgeführt wird.

**Voraussetzungen**  
Diese Lösung erfordert:
+ Ein Benutzerkonto auf dem Gerät, das kein Root-Konto ist
+ Schreibzugriff auf das Verzeichnis, in dem Sie die AWS IoT Greengrass Core-Software installieren möchten

**Zur Installation und Ausführung AWS IoT Greengrass V2 ohne Root-Zugriff**

1. Gehen Sie wie folgt vor[Installieren Sie die AWS IoT Greengrass Core-Software mit automatischer Ressourcenbereitstellung](quick-installation.md): Richten Sie Ihre Geräteumgebung ein, geben Sie Anmeldeinformationen ein und laden Sie die AWS IoT Greengrass Core-Software herunter.

1. Erstellen Sie das Installationsverzeichnis und stellen Sie sicher, dass es Ihrem Benutzer gehört.

   ```
   mkdir -p $HOME/greengrass/v2
   ```

1. Führen Sie das Installationsprogramm ohne aus`sudo`. Stellen `--component-default-user` Sie Ihren aktuellen Benutzer ein.

   ```
   java -Droot="$HOME/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user $USER \
     --provision true
   ```

   Nicht verwenden`--setup-system-service true`, da Sie keinen Root-Zugriff haben, um einen Systemdienst zu erstellen.

**(Optional) Richten Sie einen Systemd-Benutzerdienst ein**  
Sie können einen Systemd-Benutzerdienst zur Verwaltung der AWS IoT Greengrass Core-Software konfigurieren. Dadurch kann die Software automatisch gestartet werden, wenn Sie sich anmelden.

**Um einen Systemd-Benutzerdienst einzurichten**

1. Stoppen Sie die AWS IoT Greengrass Core-Software, falls sie gerade läuft.

   ```
   kill $(cat $HOME/greengrass/v2/alts/loader.pid)
   ```

1. Erstellen Sie das Systemd-Benutzerdienstverzeichnis.

   ```
   mkdir -p $HOME/.config/systemd/user
   ```

1. Erstellen Sie die Servicedatei unter `$HOME/.config/systemd/user/greengrass.service` mit dem folgenden Inhalt.

   ```
   [Unit]
   Description=Greengrass Core
   
   [Service]
   Type=simple
   PIDFile=%h/greengrass/v2/alts/loader.pid
   RemainAfterExit=no
   Restart=on-failure
   RestartSec=10
   ExecStart=/bin/sh %h/greengrass/v2/alts/current/distro/bin/loader
   Environment="JAVA_HOME=/path/to/java"
   
   [Install]
   WantedBy=default.target
   ```

   In Systemd-Benutzereinheitendateien `%h` ist dies ein Spezifizierer, der in das Home-Verzeichnis des Benutzers aufgelöst wird, der den Dienst ausführt.

   Ersetzen Sie es */path/to/java* durch den Pfad zu Ihrer Java-Installation.

1. Aktivieren und starten Sie den Dienst.

   ```
   systemctl --user daemon-reload
   systemctl --user enable greengrass.service
   systemctl --user start greengrass.service
   ```

**Verhalten beim Neustart und beim OTA-Update**  
Das Verhalten hängt davon ab, ob Sie einen Systemd-Benutzerdienst konfiguriert haben.

Mit einem Benutzerdienst  
+ **Geräteneustart** — Die AWS IoT Greengrass Core-Software wird automatisch gestartet, wenn sich der Benutzer anmeldet.
+ **OTA-Update** — OTA-Updates sind erfolgreich und die Software wird automatisch neu gestartet.

Ohne Benutzerdienst  
+ **Geräteneustart** — Die AWS IoT Greengrass Core-Software wird nicht automatisch neu gestartet. Sie müssen es manuell starten.
+ **OTA-Update** — OTA-Updates sind erfolgreich, aber Sie müssen die AWS IoT Greengrass Core-Software danach manuell starten.

**Beschränkungen der Systemressourcen**  
Ressourcenbeschränkungen pro Komponente, die Cgroups verwenden, funktionieren in dieser Lösung nicht, da Benutzer, die keine Root-Benutzer sind, keine Cgroup-Verzeichnisse in erstellen können. `/sys/fs/cgroup/` Wenn Sie eine Komponente mit konfigurierten Ressourcenlimits bereitstellen, ignoriert die AWS IoT Greengrass Core-Software die konfigurierten Grenzwerte.

Sie können die folgenden Alternativen verwenden, um die Ressourcennutzung zu verwalten:
+ **Systemd-Benutzerdienstgrenzen** — Wenn Sie die AWS IoT Greengrass Core-Software als Systemd-Benutzerdienst ausführen, können Sie der Servicedatei unter Ressourcenbeschränkungen hinzufügen. `$HOME/.config/systemd/user/greengrass.service` Diese Grenzwerte gelten für den gesamten Service, einschließlich des Greengrass-Kerns und aller Komponenten.

  ```
  MemoryMax=2G
  CPUQuota=100%
  ```
+ **Greengrass Nucleus JVM-Grenzwerte** — Sie können den Greengrass Nucleus-Prozessspeicher einschränken, indem Sie JVM-Optionen konfigurieren. Weitere Informationen finden Sie unter [Konfiguration der AWS IoT Greengrass Core-Software](configure-greengrass-core-v2.md).

## Lösung 2: Ohne Benutzertrennung der Komponenten AWS IoT Greengrass V2 als Root-Benutzer einrichten
<a name="non-root-solution-2"></a>

Verwenden Sie diese Lösung, wenn Sie Root-Zugriff für die Ersteinrichtung haben und möchten, dass die AWS IoT Greengrass Core-Software als Nicht-Root-Systemdienst ausgeführt wird, Sie Komponenten aber nicht als verschiedene Benutzer ausführen müssen. Dies ähnelt Lösung 1, aber die Software wird als Systemdienst ausgeführt, der beim Systemstart automatisch gestartet wird.

**Kompromisse**  
Diese Lösung hat die folgenden Einschränkungen:
+ **Keine Trennung der Komponenten durch Benutzer** — Alle Komponenten werden unter demselben Benutzer ausgeführt, der die AWS IoT Greengrass Core-Software ausführt. Sie können die `posixUser` Konfiguration nicht verwenden, um Komponenten unter verschiedenen Benutzern auszuführen.
+ **RequiresPrivilege ignoriert** — Die AWS IoT Greengrass Core-Software ignoriert die `RequiresPrivilege` Option in den Komponentenrezepten. Komponenten können keine erhöhten Rechte anfordern.

**Voraussetzungen**  
Diese Lösung erfordert:
+ Root-Zugriff für die Ersteinrichtung
+ systemd auf deinem Gerät

**Zur Installation und Ausführung AWS IoT Greengrass V2 als Nicht-Root-Benutzer ohne Trennung der Komponenten durch Benutzer**

1. Gehen Sie wie folgt vor[Installieren Sie die AWS IoT Greengrass Core-Software mit automatischer Ressourcenbereitstellung](quick-installation.md): Richten Sie Ihre Geräteumgebung ein, geben Sie Anmeldeinformationen ein und laden Sie die AWS IoT Greengrass Core-Software herunter.

1. Erstellen Sie einen Benutzer ohne Root-Rechte, der die AWS IoT Greengrass Core-Software und alle Komponenten ausführt.

   ```
   sudo useradd --create-home gg_non_root
   ```

1. Melden Sie sich als Nicht-Root-Benutzer an und führen Sie das Installationsprogramm aus. Auf denselben Benutzer eingestellt`--component-default-user`. Verwenden Sie keinen Systemdienst `sudo` und richten Sie ihn nicht ein.

   ```
   java -Droot="/home/gg_non_root/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user gg_non_root \
     --provision true \
     --setup-system-service false
   ```

1. Erstellen Sie als Root-Benutzer die Systemdienstdatei unter `/etc/systemd/system/greengrass.service` mit dem folgenden Inhalt.

   ```
   [Unit]
   Description=Greengrass Core
   After=network.target
   
   [Service]
   Type=simple
   User=gg_non_root
   PIDFile=/home/gg_non_root/greengrass/v2/alts/loader.pid
   RemainAfterExit=no
   Restart=on-failure
   RestartSec=10
   ExecStart=/bin/sh -c "exec /home/gg_non_root/greengrass/v2/alts/current/distro/bin/loader >> /home/gg_non_root/greengrass/v2/logs/loader.log 2>&1"
   KillMode=mixed
   NoNewPrivileges=true
   ProtectSystem=strict
   ReadWritePaths=/home/gg_non_root/greengrass /tmp
   
   [Install]
   WantedBy=multi-user.target
   ```

1. Stoppen Sie die laufende AWS IoT Greengrass Core-Instanz, aktivieren und starten Sie dann den Systemdienst.

   ```
   sudo systemctl daemon-reload
   sudo systemctl enable greengrass.service
   sudo systemctl start greengrass.service
   ```

**Verhalten beim Neustart und beim OTA-Update**  
In dieser Lösung:
+ Die AWS IoT Greengrass Core-Software wird als Systemdienst ausgeführt und bei einem Ausfall oder einem Neustart des Geräts automatisch neu gestartet.
+ OTA-Updates für die AWS IoT Greengrass Core-Software funktionieren. Der Dienst wird automatisch als konfigurierter Nicht-Root-Benutzer neu gestartet.

**Beschränkungen der Systemressourcen**  
Ressourcenbeschränkungen pro Komponente, die Cgroups verwenden, funktionieren in dieser Lösung nicht, da Benutzer ohne Linux-Fähigkeiten keine Cgroup-Verzeichnisse in erstellen können. `/sys/fs/cgroup/` Wenn Sie eine Komponente mit konfigurierten Ressourcenlimits bereitstellen, ignoriert die AWS IoT Greengrass Core-Software die konfigurierten Grenzwerte.

Sie können die folgenden Alternativen verwenden, um die Ressourcennutzung zu verwalten:
+ **Systemd-Servicebeschränkungen** — Sie können der Systemdienstdatei unter `/etc/systemd/system/greengrass.service` Ressourcenlimits hinzufügen. Diese Grenzwerte gelten für den gesamten Service, einschließlich des Greengrass-Kerns und aller Komponenten.

  ```
  MemoryMax=2G
  CPUQuota=100%
  ```
+ **Greengrass Nucleus JVM-Grenzwerte** — Sie können den Greengrass Nucleus-Prozessspeicher einschränken, indem Sie JVM-Optionen konfigurieren. Weitere Informationen finden Sie unter [Konfiguration der AWS IoT Greengrass Core-Software](configure-greengrass-core-v2.md).

## Lösung 3: AWS IoT Greengrass V2 Als Nicht-Root-Benutzer einrichten und dabei die einzelnen Benutzer trennen
<a name="non-root-solution-3"></a>

Verwenden Sie diese Lösung, wenn Sie Root-Zugriff für die Ersteinrichtung haben, die AWS IoT Greengrass Core-Software aber als Nicht-Root-Benutzer ausgeführt werden soll und gleichzeitig die Möglichkeit haben soll, Komponenten unter verschiedenen Benutzern auszuführen. Diese Konfiguration verwendet Linux-Funktionen und Sudoers, damit Benutzer, die keine Root-Benutzer sind, beim Ausführen von Komponenten zu anderen Benutzern wechseln können.

**Kompromisse**  
Diese Lösung hat die folgenden Einschränkungen:
+ **Erfordert eine Sudoers-Konfiguration** — Sie müssen Sudoers so konfigurieren, dass der AWS IoT Greengrass V2 Benutzer Befehle wie andere Benutzer ausführen kann.

**Voraussetzungen**  
Für diese Lösung ist Folgendes erforderlich:
+ Root-Zugriff für die Ersteinrichtung
+ Systemd Version 229 oder höher, die unterstützt`AmbientCapabilities`. Führen `systemctl --version` Sie den Befehl aus, um Ihre Version zu überprüfen.

**Um die Installation und Ausführung AWS IoT Greengrass V2 als Nicht-Root-Benutzer mit Benutzertrennung nach Komponenten durchzuführen**

1. Gehen Sie wie folgt vor[Installieren Sie die AWS IoT Greengrass Core-Software mit automatischer Ressourcenbereitstellung](quick-installation.md): Richten Sie Ihre Geräteumgebung ein, geben Sie Anmeldeinformationen ein und laden Sie die AWS IoT Greengrass Core-Software herunter.

1. Erstellen Sie einen Benutzer ohne Root-Rechte, der die AWS IoT Greengrass Core-Software ausführen wird.

   ```
   sudo useradd --create-home gg_non_root
   ```

1. Fügen Sie den Nicht-Root-Benutzer zu sudoers hinzu, damit er Befehle als Komponentenbenutzer ausführen kann. Erstellen Sie eine Datei unter. `/etc/sudoers.d/gg_non_root`

   ```
   gg_non_root ALL=(ggc_user:ggc_group) NOPASSWD: SETENV: /bin/sh, /bin/bash
   ```

   Wenn Sie Komponenten so konfigurieren, dass sie als zusätzliche Benutzer ausgeführt werden`posixUser`, fügen Sie für jeden Benutzer einen Sudoers-Eintrag hinzu. Beispiel:

   ```
   gg_non_root ALL=(ggc_user:ggc_group) NOPASSWD: SETENV: /bin/sh, /bin/bash
   gg_non_root ALL=(another_user:another_group) NOPASSWD: SETENV: /bin/sh, /bin/bash
   ```

1. Melden Sie sich als Nicht-Root-Benutzer an und führen Sie das Installationsprogramm aus. Verwenden Sie keinen Systemdienst `sudo` und richten Sie ihn nicht ein.

   ```
   java -Droot="/home/gg_non_root/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --setup-system-service false
   ```

1. Erstellen Sie als Root-Benutzer die Systemdienstdatei unter `/etc/systemd/system/greengrass.service` mit dem folgenden Inhalt.

   ```
   [Unit]
   Description=Greengrass Core
   After=network.target
   
   [Service]
   Type=simple
   User=gg_non_root
   PIDFile=/home/gg_non_root/greengrass/v2/alts/loader.pid
   RemainAfterExit=no
   Restart=on-failure
   RestartSec=10
   ExecStart=/bin/sh -c "exec /home/gg_non_root/greengrass/v2/alts/current/distro/bin/loader >> /home/gg_non_root/greengrass/v2/logs/loader.log 2>&1"
   KillMode=mixed
   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=/home/gg_non_root/greengrass /tmp
   
   [Install]
   WantedBy=multi-user.target
   ```

   Informationen zu den erforderlichen Funktionen finden Sie unter[Linux-Funktionen werden benötigt von AWS IoT Greengrass V2](#linux-capabilities-reference).
   + `AmbientCapabilities`gewährt dem Nicht-Root-Benutzer, der den Dienst ausführt, die angegebenen Linux-Funktionen. Dadurch kann die AWS IoT Greengrass Core-Software privilegierte Operationen wie das Wechseln von Benutzern beim Ausführen von Komponenten ausführen, ohne dass sie als Root ausgeführt wird.
   + `CapabilityBoundingSet`schränkt den maximalen Funktionsumfang ein, den der Dienst und seine untergeordneten Prozesse nutzen können. Funktionen, die nicht in diesem Satz enthalten sind, werden dauerhaft gelöscht.
   + `ProtectSystem=strict`macht das gesamte Dateisystem für den Dienst schreibgeschützt, wodurch Änderungen am Betriebssystem verhindert werden.
   + `ReadWritePaths`gibt die einzigen Verzeichnisse an, in die der Dienst schreiben kann.

1. Stoppen Sie die laufende AWS IoT Greengrass Core-Instanz, aktivieren und starten Sie dann den Systemdienst.

   ```
   sudo systemctl daemon-reload
   sudo systemctl enable greengrass.service
   sudo systemctl start greengrass.service
   ```

**Verhalten beim Neustart und beim OTA-Update**  
In dieser Lösung:
+ Die AWS IoT Greengrass Core-Software wird als Systemdienst ausgeführt und bei einem Ausfall oder einem Neustart des Geräts automatisch neu gestartet.
+ OTA-Updates für die AWS IoT Greengrass Core-Software funktionieren. Der Dienst wird automatisch als konfigurierter Nicht-Root-Benutzer neu gestartet.

**Beschränkungen der Systemressourcen**  
Die komponentenspezifischen Ressourcenbeschränkungen für Arbeitsspeicher und CPU funktionieren in dieser Lösung genauso wie bei der Ausführung der AWS IoT Greengrass Core-Software als Root-Benutzer.

## Lösung 4: AWS IoT Greengrass V2 Als Root-Benutzer mit eingeschränkten Funktionen einrichten
<a name="non-root-solution-4"></a>

Verwenden Sie diese Lösung, wenn Sie möchten, dass die AWS IoT Greengrass Core-Software als Root-Benutzer ausgeführt wird, jedoch mit eingeschränkten Linux-Funktionen. Diese Konfiguration bietet die volle Funktionalität der Ausführung als Root und begrenzt gleichzeitig die Angriffsfläche, indem die für die Software und ihre Komponenten verfügbaren Funktionen eingeschränkt werden.

**Kompromisse**  
Bei dieser Lösung sind die folgenden Überlegungen zu berücksichtigen:
+ **Komponenten mit RequiresPrivilege eingeschränkten Funktionen** — Komponenten, die die Software verwenden, werden mit denselben eingeschränkten Funktionen `RequiresPrivilege` ausgeführt wie die AWS IoT Greengrass Core-Software und nicht mit vollen Root-Rechten.

**Voraussetzungen**  
Diese Lösung erfordert:
+ Root-Zugriff
+ systemd auf deinem Gerät

**Zur Installation und Ausführung AWS IoT Greengrass V2 als Root-Benutzer mit eingeschränkten Funktionen**

1. Gehen Sie wie folgt vor[Installieren Sie die AWS IoT Greengrass Core-Software mit automatischer Ressourcenbereitstellung](quick-installation.md): Richten Sie Ihre Geräteumgebung ein, geben Sie Anmeldeinformationen ein und laden Sie die AWS IoT Greengrass Core-Software herunter.

1. Ändern Sie die Dienstvorlagendatei unter`GreengrassInstaller/bin/greengrass.service.template`, in dem Verzeichnis, in das Sie die AWS IoT Greengrass Core-Software heruntergeladen haben. Fügen Sie dem `[Service]` Abschnitt die folgenden Zeilen hinzu, bevor Sie das Installationsprogramm ausführen:

   ```
   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 /tmp
   ```
   + `CapabilityBoundingSet`ist eine Systemd-Sicherheitsfunktion, die die Linux-Funktionen einschränkt, die der AWS IoT Greengrass Core-Software und all ihren untergeordneten Prozessen zur Verfügung stehen. Durch die Konfiguration eines Bounding-Sets schränken Sie ein, was der Greengrass Nucleus-Prozess und seine Komponenten tun können, auch wenn sie als Root ausgeführt werden. Informationen zu den einzelnen Funktionen finden Sie unter. [Linux-Funktionen werden benötigt von AWS IoT Greengrass V2](#linux-capabilities-reference)
   + `ProtectSystem=strict`macht das gesamte Dateisystem für den Dienst schreibgeschützt, wodurch Änderungen am Betriebssystem verhindert werden. Dadurch wird systemd-Sandboxing bereitgestellt, das Systemdateien auch dann schützt, wenn eine schädliche Komponente mit erhöhten Rechten ausgeführt wird.
   + `ReadWritePaths`gibt die einzigen Verzeichnisse an, in die der Dienst schreiben kann. Zusammen mit `ProtectSystem=strict` beschränkt dies den Dienst darauf, nur in das AWS IoT Greengrass V2 Stammverzeichnis und zu schreiben`/tmp`.

1. Führen Sie das Installationsprogramm mit aus`--setup-system-service true`.

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --setup-system-service true
   ```

**Verhalten bei Neustart und OTA-Update**  
In dieser Lösung:
+ Die AWS IoT Greengrass Core-Software wird als Systemdienst ausgeführt und bei einem Ausfall oder einem Neustart des Geräts automatisch neu gestartet.
+ OTA-Updates für die AWS IoT Greengrass Core-Software funktionieren. Die Software wird automatisch aktualisiert und neu gestartet.

**Beschränkungen der Systemressourcen**  
Die komponentenspezifischen Ressourcenbeschränkungen für Arbeitsspeicher und CPU funktionieren in dieser Lösung genauso wie bei der Ausführung der AWS IoT Greengrass Core-Software als Root-Benutzer.

## Linux-Funktionen werden benötigt von AWS IoT Greengrass V2
<a name="linux-capabilities-reference"></a>

In der folgenden Tabelle werden die Linux-Funktionen beschrieben, die für die AWS IoT Greengrass Core-Software erforderlich sind, wenn sie in Nicht-Root-Konfigurationen ausgeführt wird. Diese Funktionen werden in den Lösungen 3 und 4 verwendet.


**Erforderliche Linux-Funktionen**  

| Funktion | Description | Erforderlich für | 
| --- | --- | --- | 
| `CAP_CHOWN` | Nehmen Sie beliebige Änderungen an der Datei vor UIDs und GIDs | Änderung des Dateibesitzes je nachdem, welcher Benutzer die Komponente ausführt | 
| `CAP_DAC_OVERRIDE` | Umgehen Sie die Lese-, Schreib- und Ausführungsberechtigungsprüfungen für Dateien | Erlaubt dem Greengrass Nucleus-Benutzer, Dateien auszuführen, wenn sie für Skripte verwendet werden mit `RequiresPrivilege` | 
| `CAP_DAC_READ_SEARCH` | Umgehen Sie die Prüfungen der Datei-Leseberechtigungen und die Lese- und Ausführungsberechtigungsprüfungen für Verzeichn | Die Ordnerhierarchie durchgehen, auch wenn es sich um Ordner handelt, für die der Greengrass Nucleus-Benutzer keine Leserechte hat | 
| `CAP_FOWNER` | Umgehen Sie Berechtigungsprüfungen bei Vorgängen, bei denen normalerweise die Dateisystem-UID des Prozesses mit der UID der Datei übereinstimmen muss | Umgehen von Dateibesitzprüfungen | 
| `CAP_SETUID` | Nehmen Sie willkürliche Manipulationen am Prozess vor UIDs | `sudo`Wird verwendet, wenn Skripte als ein anderer Benutzer ausgeführt werden als der Benutzer, der den Greengrass-Nucleus ausführt | 
| `CAP_SETGID` | Nehmen Sie willkürliche Manipulationen am Prozess vor GIDs | `sudo`Wird verwendet, wenn Skripte als eine andere Gruppe ausgeführt werden als die Gruppe, die den Greengrass-Kern ausführt | 
| `CAP_SYS_RESOURCE` | Überschreiben Sie Ressourcenlimits | Festlegung von Ressourcenbeschränkungen für Komponentenprozesse, auch wenn in Bereitstellungen keine Grenzwerte angegeben sind | 
| `CAP_AUDIT_WRITE` | Schreiben Sie Datensätze in das Kernel-Auditing-Protokoll | `sudo`Erlaubt das Schreiben in das Kernel-Audit-Log | 