View a markdown version of this page

Configura i dispositivi AWS IoT Greengrass V2 principali come dispositivi non root - AWS IoT Greengrass

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura i dispositivi AWS IoT Greengrass V2 principali come dispositivi non root

Questa pagina presenta quattro soluzioni per eseguire il software AWS IoT Greengrass Core come sistema non root. Consultate la tabella di confronto per comprendere le caratteristiche e i vantaggi di ciascuna soluzione, quindi utilizzate il diagramma di flusso decisionale per identificare quella più adatta alle vostre esigenze.

Nota

Le soluzioni non root riportate in questa pagina si applicano solo al AWS IoT Greengrass nucleus su dispositivi Linux. Windows non è incluso perché AWS IoT Greengrass V2 deve essere eseguito come servizio di sistema su Windows. Per l'installazione root standard su Linux, vedereInstalla il software AWS IoT Greengrass Core con provisioning automatico delle risorse.

Per eseguire AWS IoT Greengrass nucleus lite come utente non root, consulta Using Podman nel repository AWS IoT Greengrass nucleus lite. GitHub

Scegliete una soluzione non root

Utilizza la tabella seguente per confrontare le soluzioni non root e comprenderne i compromessi. Ogni soluzione offre funzionalità diverse a seconda dei requisiti di sicurezza e dei vincoli del dispositivo.

Soluzioni non root
Soluzione Richiede l'accesso come root Può eseguire i componenti come utenti diversi Esegue Greengrass come servizio di sistema Ideale per

Soluzione 1: nessun accesso root

No

No

No (servizio utente opzionale)

Dispositivi in cui non si dispone dell'accesso root

Soluzione 2: utente singolo non root

Sì (solo configurazione)

No

Esecuzione di Greengrass come utente non root con tutti i componenti in esecuzione con lo stesso utente

Soluzione 3: non root, multiutente

Sì (solo configurazione)

Esecuzione di Greengrass come utente non root mentre i componenti vengono eseguiti come utenti diversi

Soluzione 4: Root con funzionalità limitate

Esecuzione di Greengrass come root con un set limitato di funzionalità Linux

Il seguente diagramma di flusso guida l'utente nella scelta della soluzione appropriata in base ai vincoli e ai requisiti del dispositivo.

Diagramma di flusso che mostra il processo decisionale per la scelta di una soluzione non root. Inizia chiedendo se disponi dell'accesso root sul tuo dispositivo principale. Se no, usa la Soluzione 1. In caso affermativo, chiedi se devi eseguire i componenti come utenti Linux diversi. Se no, usa la Soluzione 2. Se sì, chiedi se vuoi che Greengrass funzioni come utente root con funzionalità limitate. In caso affermativo, utilizzate la Soluzione 4. In caso negativo, utilizzare la Soluzione 3.

Soluzione 1: configurazione AWS IoT Greengrass V2 senza accesso root

Usa questa soluzione quando non disponi dell'accesso root sul dispositivo. In questa configurazione, il software AWS IoT Greengrass Core funziona interamente come utente non root senza privilegi elevati.

Compromessi

Questa soluzione presenta le seguenti limitazioni:

  • Nessuna separazione tra utenti e componenti: tutti i componenti funzionano come lo stesso utente che esegue il software AWS IoT Greengrass Core. Non è possibile utilizzare la posixUser configurazione per eseguire i componenti come utenti diversi.

  • RequiresPrivilege ignorato: il software AWS IoT Greengrass Core ignora l'RequiresPrivilegeopzione nelle ricette dei componenti. I componenti non possono richiedere privilegi elevati.

  • Nessun servizio di sistema: non è possibile installare il software AWS IoT Greengrass Core come servizio di sistema. Facoltativamente, è possibile configurare AWS IoT Greengrass V2 per l'esecuzione come servizio utente systemd.

Prerequisiti

Questa soluzione richiede:

  • Un account utente non root sul dispositivo

  • Accesso in scrittura alla directory in cui si desidera installare il software AWS IoT Greengrass Core

Da installare ed eseguire AWS IoT Greengrass V2 senza accesso root
  1. Completa i seguenti passaggi daInstalla il software AWS IoT Greengrass Core con provisioning automatico delle risorse: configura l'ambiente del dispositivo, fornisci le credenziali e scarica il software AWS IoT Greengrass Core.

  2. Crea la directory di installazione e assicurati che sia di proprietà dell'utente.

    mkdir -p $HOME/greengrass/v2
  3. Esegui il programma di installazione senzasudo. Imposta --component-default-user sul tuo utente attuale.

    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

    Non utilizzare --setup-system-service true perché non si dispone dell'accesso root per creare un servizio di sistema.

(Facoltativo) Configura un servizio utente systemd

È possibile configurare un servizio utente systemd per gestire il software AWS IoT Greengrass Core. Ciò consente al software di avviarsi automaticamente all'accesso.

Per configurare un servizio utente systemd
  1. Arresta il software AWS IoT Greengrass Core se è attualmente in esecuzione.

    kill $(cat $HOME/greengrass/v2/alts/loader.pid)
  2. Crea la directory del servizio utente systemd.

    mkdir -p $HOME/.config/systemd/user
  3. Crea il file di servizio all'indirizzo $HOME/.config/systemd/user/greengrass.service con il seguente contenuto.

    [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

    Nei file di unità utente systemd, %h è un identificatore che si risolve nella directory home dell'utente che esegue il servizio.

    /path/to/javaSostituiscilo con il percorso dell'installazione di Java.

  4. Abilita e avvia il servizio.

    systemctl --user daemon-reload systemctl --user enable greengrass.service systemctl --user start greengrass.service
Comportamento di riavvio e aggiornamento OTA

Il comportamento dipende dal fatto che sia stato configurato o meno un servizio utente systemd.

Con un servizio utente
  • Riavvio del dispositivo: il software AWS IoT Greengrass Core si avvia automaticamente quando l'utente effettua l'accesso.

  • Aggiornamento OTA: gli aggiornamenti OTA vengono eseguiti correttamente e il software si riavvia automaticamente.

Senza un servizio utente
  • Riavvio del dispositivo: il software AWS IoT Greengrass Core non si riavvia automaticamente. È necessario avviarlo manualmente.

  • Aggiornamento OTA: gli aggiornamenti OTA hanno esito positivo, ma in seguito è necessario avviare manualmente il software AWS IoT Greengrass Core.

Limiti delle risorse di sistema

I limiti di risorse per componente che utilizzano cgroups non funzionano in questa soluzione perché gli utenti non root non possono creare directory cgroup in. /sys/fs/cgroup/ Se si distribuisce un componente con limiti di risorse configurati, il software Core ignora i limiti configurati. AWS IoT Greengrass

È possibile utilizzare le seguenti alternative per gestire l'utilizzo delle risorse:

  • Limiti del servizio utente Systemd: se si esegue il software AWS IoT Greengrass Core come servizio utente systemd, è possibile aggiungere limiti di risorse al file di servizio all'indirizzo. $HOME/.config/systemd/user/greengrass.service Questi limiti si applicano all'intero servizio, incluso il nucleo Greengrass e tutti i componenti.

    MemoryMax=2G CPUQuota=100%
  • Limiti JVM di Greengrass nucleus: è possibile limitare la memoria di processo Greengrass nucleus configurando le opzioni JVM. Per ulteriori informazioni, consulta Configurare il software AWS IoT Greengrass Core.

Soluzione 2: configurazione non root senza separazione tra gli utenti dei componenti AWS IoT Greengrass V2

Utilizzate questa soluzione quando disponete dell'accesso root per la configurazione iniziale e desiderate che il software AWS IoT Greengrass Core venga eseguito come servizio di sistema non root, ma non è necessario eseguire i componenti come utenti diversi. È simile alla Soluzione 1, ma il software viene eseguito come un servizio di sistema che si avvia automaticamente all'avvio.

Compromessi

Questa soluzione presenta le seguenti limitazioni:

  • Nessuna separazione tra utenti e componenti: tutti i componenti funzionano come lo stesso utente che esegue il software AWS IoT Greengrass Core. Non è possibile utilizzare la posixUser configurazione per eseguire i componenti come utenti diversi.

  • RequiresPrivilege ignorato: il software AWS IoT Greengrass Core ignora l'RequiresPrivilegeopzione nelle ricette dei componenti. I componenti non possono richiedere privilegi elevati.

Prerequisiti

Questa soluzione richiede:

  • Accesso root per la configurazione iniziale

  • systemd sul tuo dispositivo

Da installare ed eseguire AWS IoT Greengrass V2 come utente non root senza separare gli utenti dai componenti
  1. Completa i seguenti passaggi daInstalla il software AWS IoT Greengrass Core con provisioning automatico delle risorse: configura l'ambiente del dispositivo, fornisci le credenziali e scarica il software AWS IoT Greengrass Core.

  2. Crea un utente non root che esegua il software AWS IoT Greengrass Core e tutti i componenti.

    sudo useradd --create-home gg_non_root
  3. Effettua il login come utente non root ed esegui il programma di installazione. Impostato --component-default-user sullo stesso utente. Non utilizzare sudo e non configurare un servizio di sistema.

    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
  4. Come root, create il file del servizio di sistema all'indirizzo /etc/systemd/system/greengrass.service con il seguente contenuto.

    [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
  5. Arresta l'istanza AWS IoT Greengrass Core in esecuzione, quindi abilita e avvia il servizio di sistema.

    sudo systemctl daemon-reload sudo systemctl enable greengrass.service sudo systemctl start greengrass.service
Comportamento di riavvio e aggiornamento OTA

In questa soluzione:

  • Il software AWS IoT Greengrass Core viene eseguito come servizio di sistema e si riavvia automaticamente in caso di errore o riavvio del dispositivo.

  • Gli aggiornamenti OTA al software AWS IoT Greengrass Core funzionano. Il servizio si riavvia automaticamente come utente non root configurato.

Limiti delle risorse di sistema

I limiti di risorse per componente che utilizzano cgroups non funzionano in questa soluzione perché gli utenti non root senza funzionalità Linux non possono creare directory cgroup in. /sys/fs/cgroup/ Se si distribuisce un componente con limiti di risorse configurati, il software Core ignora i limiti configurati. AWS IoT Greengrass

È possibile utilizzare le seguenti alternative per gestire l'utilizzo delle risorse:

  • Limiti del servizio Systemd: è possibile aggiungere limiti di risorse al file di servizio di sistema all'indirizzo/etc/systemd/system/greengrass.service. Questi limiti si applicano all'intero servizio, incluso il nucleo Greengrass e tutti i componenti.

    MemoryMax=2G CPUQuota=100%
  • Limiti JVM di Greengrass nucleus: è possibile limitare la memoria di processo Greengrass nucleus configurando le opzioni JVM. Per ulteriori informazioni, consulta Configurare il software AWS IoT Greengrass Core.

Soluzione 3: configurazione non root con separazione degli utenti tra i componenti AWS IoT Greengrass V2

Utilizzate questa soluzione quando disponete dell'accesso root per la configurazione iniziale ma desiderate che il software AWS IoT Greengrass Core venga eseguito come utente non root mantenendo la possibilità di eseguire i componenti come utenti diversi. Questa configurazione utilizza le funzionalità e i sudoer di Linux per consentire all'utente non root di passare ad altri utenti durante l'esecuzione dei componenti.

Compromessi

Questa soluzione presenta le seguenti limitazioni:

  • Richiede la configurazione sudoers: è necessario configurare sudoers per consentire all' AWS IoT Greengrass V2 utente di eseguire comandi come altri utenti.

Prerequisiti

Questa soluzione richiede:

  • Accesso root per la configurazione iniziale

  • systemd versione 229 o successiva, che supportaAmbientCapabilities. Per verificare la tua versione, systemctl --version esegui.

Per installarlo ed eseguirlo AWS IoT Greengrass V2 come utente non root con separazione tra gli utenti dei componenti
  1. Completa i seguenti passaggi daInstalla il software AWS IoT Greengrass Core con provisioning automatico delle risorse: configura l'ambiente del dispositivo, fornisci le credenziali e scarica il software AWS IoT Greengrass Core.

  2. Crea un utente non root che esegua il software AWS IoT Greengrass Core.

    sudo useradd --create-home gg_non_root
  3. Aggiungi l'utente non root a sudoers in modo che possa eseguire i comandi come utente del componente. Crea un file in. /etc/sudoers.d/gg_non_root

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

    Se configurate i componenti per l'esecuzione come utenti aggiuntiviposixUser, aggiungete una voce sudoers per ogni utente. Esempio:

    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
  4. Effettua il login come utente non root ed esegui il programma di installazione. Non utilizzate sudo e non impostate un servizio di sistema.

    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
  5. Come root, create il file del servizio di sistema all'indirizzo /etc/systemd/system/greengrass.service con il seguente contenuto.

    [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

    Per informazioni sulle funzionalità richieste, vedereFunzionalità Linux richieste da AWS IoT Greengrass V2.

    • AmbientCapabilitiesconcede le funzionalità Linux specificate all'utente non root che esegue il servizio. Ciò consente al software AWS IoT Greengrass Core di eseguire operazioni privilegiate come il cambio di utente durante l'esecuzione dei componenti, senza eseguire l'esecuzione come root.

    • CapabilityBoundingSetlimita il set massimo di funzionalità che il servizio e i relativi processi secondari possono utilizzare. Le funzionalità non incluse in questo set vengono eliminate definitivamente.

    • ProtectSystem=strictrende l'intero file system di sola lettura per il servizio, impedendo la modifica del sistema operativo.

    • ReadWritePathsspecifica le uniche directory in cui il servizio può scrivere.

  6. Arresta l'istanza AWS IoT Greengrass Core in esecuzione, quindi abilita e avvia il servizio di sistema.

    sudo systemctl daemon-reload sudo systemctl enable greengrass.service sudo systemctl start greengrass.service
Comportamento di riavvio e aggiornamento OTA

In questa soluzione:

  • Il software AWS IoT Greengrass Core viene eseguito come servizio di sistema e si riavvia automaticamente in caso di errore o riavvio del dispositivo.

  • Gli aggiornamenti OTA al software AWS IoT Greengrass Core funzionano. Il servizio si riavvia automaticamente come utente non root configurato.

Limiti delle risorse di sistema

I limiti di risorse per componente per memoria e CPU funzionano in questa soluzione allo stesso modo di quando si esegue il software AWS IoT Greengrass Core come root.

Soluzione 4: configurazione AWS IoT Greengrass V2 come root con funzionalità limitate

Utilizzate questa soluzione quando desiderate che il software AWS IoT Greengrass Core venga eseguito come root ma con un set ridotto di funzionalità Linux. Questa configurazione offre la piena funzionalità di esecuzione come root, limitando al contempo la superficie di attacco limitando le funzionalità disponibili per il software e i suoi componenti.

Compromessi

Questa soluzione ha le seguenti considerazioni:

  • Componenti con funzionalità RequiresPrivilege limitate: i componenti che utilizziamo RequiresPrivilege vengono eseguiti con lo stesso set limitato di funzionalità del software AWS IoT Greengrass Core, non con privilegi di root completi.

Prerequisiti

Questa soluzione richiede:

  • Accesso root

  • systemd sul tuo dispositivo

Da installare ed eseguire AWS IoT Greengrass V2 come root con funzionalità limitate
  1. Completa i seguenti passaggi daInstalla il software AWS IoT Greengrass Core con provisioning automatico delle risorse: configura l'ambiente del dispositivo, fornisci le credenziali e scarica il software AWS IoT Greengrass Core.

  2. Modifica il file del modello di servizio inGreengrassInstaller/bin/greengrass.service.template, nella directory in cui hai scaricato il software AWS IoT Greengrass Core. Aggiungete le seguenti righe alla [Service] sezione prima di eseguire il programma di installazione:

    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è una funzionalità di sicurezza di systemd che limita le funzionalità Linux disponibili per il software AWS IoT Greengrass Core e tutti i relativi processi secondari. Configurando un bounding set, si limita ciò che il processo e i componenti Greengrass nucleus possono fare, anche quando sono in esecuzione come root. Per informazioni su ciascuna funzionalità, vedere. Funzionalità Linux richieste da AWS IoT Greengrass V2

    • ProtectSystem=strictrende l'intero file system di sola lettura per il servizio, impedendo la modifica del sistema operativo. Ciò fornisce il sandboxing systemd che protegge i file di sistema anche se un componente dannoso viene eseguito con privilegi elevati.

    • ReadWritePathsspecifica le uniche directory in cui il servizio può scrivere. InoltreProtectSystem=strict, ciò limita il servizio alla scrittura solo nella directory AWS IoT Greengrass V2 principale e. /tmp

  3. Esegui il programma di installazione con--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
Comportamento di riavvio e aggiornamento OTA

In questa soluzione:

  • Il software AWS IoT Greengrass Core viene eseguito come servizio di sistema e si riavvia automaticamente in caso di errore o riavvio del dispositivo.

  • Gli aggiornamenti OTA al software AWS IoT Greengrass Core funzionano. Il software si aggiorna e si riavvia automaticamente.

Limiti delle risorse di sistema

I limiti di risorse per componente per memoria e CPU funzionano in questa soluzione allo stesso modo di quando si esegue il software AWS IoT Greengrass Core come root.

Funzionalità Linux richieste da AWS IoT Greengrass V2

La tabella seguente descrive le funzionalità Linux richieste dal software AWS IoT Greengrass Core per l'esecuzione in configurazioni non root. Queste funzionalità vengono utilizzate nelle soluzioni 3 e 4.

Funzionalità Linux richieste
Funzionalità Description Richiesto per

CAP_CHOWN

Apportare modifiche arbitrarie al file UIDs e GIDs

Modifica della proprietà del file in base all'utente che esegue il componente

CAP_DAC_OVERRIDE

Ignora i controlli delle autorizzazioni di lettura, scrittura ed esecuzione dei file

Consentire all'utente Greengrass nucleus di eseguire file quando utilizzati per script con RequiresPrivilege

CAP_DAC_READ_SEARCH

Ignora i controlli dei permessi di lettura dei file e i controlli dei permessi di lettura ed esecuzione delle directory

Camminando nella gerarchia delle cartelle, anche per le cartelle, l'utente Greengrass nucleus non ha il permesso di leggere

CAP_FOWNER

Ignora i controlli delle autorizzazioni sulle operazioni che normalmente richiedono che l'UID del filesystem del processo corrisponda all'UID del file

Ignorare i controlli sulla proprietà dei file

CAP_SETUID

Effettua manipolazioni arbitrarie del processo UIDs

Da utilizzare sudo quando si eseguono gli script come utente diverso da quello che esegue il nucleo Greengrass

CAP_SETGID

Effettua manipolazioni arbitrarie del processo GIDs

Da utilizzare sudo quando si eseguono gli script come un gruppo diverso da quello che esegue il nucleo Greengrass

CAP_SYS_RESOURCE

Sostituisci i limiti delle risorse

Impostazione dei limiti delle risorse sui processi dei componenti, anche se i limiti non sono specificati nelle distribuzioni

CAP_AUDIT_WRITE

Scrivi i record nel registro di controllo del kernel

Consentire sudo la scrittura nel registro di controllo del kernel