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
Argomenti
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.
| Soluzione | Richiede l'accesso come root | Può eseguire i componenti come utenti diversi | Esegue Greengrass come servizio di sistema | Ideale per |
|---|---|---|---|---|
No |
No |
No (servizio utente opzionale) |
Dispositivi in cui non si dispone dell'accesso root |
|
Sì (solo configurazione) |
No |
Sì |
Esecuzione di Greengrass come utente non root con tutti i componenti in esecuzione con lo stesso utente |
|
Sì (solo configurazione) |
Sì |
Sì |
Esecuzione di Greengrass come utente non root mentre i componenti vengono eseguiti come utenti diversi |
|
Sì |
Sì |
Sì |
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.
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
posixUserconfigurazione 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
-
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.
-
Crea la directory di installazione e assicurati che sia di proprietà dell'utente.
mkdir -p $HOME/greengrass/v2 -
Esegui il programma di installazione senza
sudo. Imposta--component-default-usersul tuo utente attuale.java -Droot="$HOME/greengrass/v2" -Dlog.store=FILE \ -jar ./GreengrassInstaller/lib/Greengrass.jar \ --aws-regionregion\ --thing-nameMyGreengrassCore\ --thing-group-nameMyGreengrassCoreGroup\ --thing-policy-nameGreengrassV2IoTThingPolicy\ --tes-role-nameGreengrassV2TokenExchangeRole\ --tes-role-alias-nameGreengrassCoreTokenExchangeRoleAlias\ --component-default-user $USER \ --provision trueNon utilizzare
--setup-system-service trueperché 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
-
Arresta il software AWS IoT Greengrass Core se è attualmente in esecuzione.
kill $(cat $HOME/greengrass/v2/alts/loader.pid) -
Crea la directory del servizio utente systemd.
mkdir -p $HOME/.config/systemd/user -
Crea il file di servizio all'indirizzo
$HOME/.config/systemd/user/greengrass.servicecon 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.targetNei 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. -
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.serviceQuesti 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
posixUserconfigurazione 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
-
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.
-
Crea un utente non root che esegua il software AWS IoT Greengrass Core e tutti i componenti.
sudo useradd --create-home gg_non_root -
Effettua il login come utente non root ed esegui il programma di installazione. Impostato
--component-default-usersullo stesso utente. Non utilizzaresudoe non configurare un servizio di sistema.java -Droot="/home/gg_non_root/greengrass/v2" -Dlog.store=FILE \ -jar ./GreengrassInstaller/lib/Greengrass.jar \ --aws-regionregion\ --thing-nameMyGreengrassCore\ --thing-group-nameMyGreengrassCoreGroup\ --thing-policy-nameGreengrassV2IoTThingPolicy\ --tes-role-nameGreengrassV2TokenExchangeRole\ --tes-role-alias-nameGreengrassCoreTokenExchangeRoleAlias\ --component-default-user gg_non_root \ --provision true \ --setup-system-service false -
Come root, create il file del servizio di sistema all'indirizzo
/etc/systemd/system/greengrass.servicecon 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 -
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 supporta
AmbientCapabilities. Per verificare la tua versione,systemctl --versionesegui.
Per installarlo ed eseguirlo AWS IoT Greengrass V2 come utente non root con separazione tra gli utenti dei componenti
-
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.
-
Crea un utente non root che esegua il software AWS IoT Greengrass Core.
sudo useradd --create-home gg_non_root -
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_rootgg_non_root ALL=(ggc_user:ggc_group) NOPASSWD: SETENV: /bin/sh, /bin/bashSe configurate i componenti per l'esecuzione come utenti aggiuntivi
posixUser, 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 -
Effettua il login come utente non root ed esegui il programma di installazione. Non utilizzate
sudoe non impostate un servizio di sistema.java -Droot="/home/gg_non_root/greengrass/v2" -Dlog.store=FILE \ -jar ./GreengrassInstaller/lib/Greengrass.jar \ --aws-regionregion\ --thing-nameMyGreengrassCore\ --thing-group-nameMyGreengrassCoreGroup\ --thing-policy-nameGreengrassV2IoTThingPolicy\ --tes-role-nameGreengrassV2TokenExchangeRole\ --tes-role-alias-nameGreengrassCoreTokenExchangeRoleAlias\ --component-default-user ggc_user:ggc_group \ --provision true \ --setup-system-service false -
Come root, create il file del servizio di sistema all'indirizzo
/etc/systemd/system/greengrass.servicecon 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.targetPer 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.
-
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
RequiresPrivilegevengono 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
-
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.
-
Modifica il file del modello di servizio in
GreengrassInstaller/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 /tmpCapabilityBoundingSetè 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 V2ProtectSystem=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
-
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-regionregion\ --thing-nameMyGreengrassCore\ --thing-group-nameMyGreengrassCoreGroup\ --thing-policy-nameGreengrassV2IoTThingPolicy\ --tes-role-nameGreengrassV2TokenExchangeRole\ --tes-role-alias-nameGreengrassCoreTokenExchangeRoleAlias\ --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à | Description | Richiesto per |
|---|---|---|
|
Apportare modifiche arbitrarie al file UIDs e GIDs |
Modifica della proprietà del file in base all'utente che esegue il componente |
|
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 |
|
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 |
|
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 |
|
Effettua manipolazioni arbitrarie del processo UIDs |
Da utilizzare |
|
Effettua manipolazioni arbitrarie del processo GIDs |
Da utilizzare |
|
Sostituisci i limiti delle risorse |
Impostazione dei limiti delle risorse sui processi dei componenti, anche se i limiti non sono specificati nelle distribuzioni |
|
Scrivi i record nel registro di controllo del kernel |
Consentire |