Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configurar los dispositivos AWS IoT Greengrass V2 principales como dispositivos no root
Esta página presenta cuatro soluciones para ejecutar el software AWS IoT Greengrass principal sin root. Revise la tabla de comparación para comprender las características y desventajas de cada solución y, a continuación, utilice el diagrama de flujo de decisiones para identificar cuál se ajusta a sus necesidades.
nota
Las soluciones no root de esta página se aplican únicamente al AWS IoT Greengrass núcleo de los dispositivos Linux. Windows no está incluido porque AWS IoT Greengrass V2 debe ejecutarse como un servicio del sistema en Windows. Para obtener información sobre la instalación raíz estándar en Linux, consulteInstale el software AWS IoT Greengrass principal con aprovisionamiento automático de recursos.
Para ejecutar AWS IoT Greengrass nucleus lite como usuario no root, consulte Uso de Podman
Temas
Elija una solución que no sea root
Utilice la siguiente tabla para comparar las soluciones que no son raíz y comprender sus ventajas y desventajas. Cada solución ofrece capacidades diferentes en función de los requisitos de seguridad y las limitaciones del dispositivo.
| Solución | Requiere acceso root | Puede ejecutar componentes como diferentes usuarios | Ejecuta Greengrass como servicio de sistema | Lo mejor para |
|---|---|---|---|---|
No |
No |
No (servicio de usuario opcional) |
Dispositivos a los que no tienes acceso root |
|
Sí (solo para configuración) |
No |
Sí |
Ejecutar Greengrass como usuario no root con todos los componentes ejecutándose como el mismo usuario |
|
Sí (solo para configuración) |
Sí |
Sí |
Ejecutar Greengrass como usuario no root mientras se ejecutan componentes como usuarios diferentes |
|
Sí |
Sí |
Sí |
Ejecutar Greengrass como root con un conjunto limitado de capacidades de Linux |
El siguiente diagrama de flujo le guía para seleccionar la solución adecuada en función de las limitaciones y requisitos de su dispositivo.
Solución 1: configurar AWS IoT Greengrass V2 sin acceso a la raíz
Use esta solución cuando no tenga acceso root en el dispositivo. En esta configuración, el software AWS IoT Greengrass Core se ejecuta completamente como un usuario no root sin privilegios elevados.
Desventajas
Esta solución tiene las siguientes limitaciones:
Sin separación entre los usuarios de los componentes: todos los componentes se ejecutan como el mismo usuario que ejecuta el software AWS IoT Greengrass Core. No puede usar la
posixUserconfiguración para ejecutar componentes como usuarios diferentes.RequiresPrivilege ignorado: el software AWS IoT Greengrass Core ignora la
RequiresPrivilegeopción en las recetas de componentes. Los componentes no pueden solicitar privilegios elevados.Sin servicio del sistema: no puede instalar el software AWS IoT Greengrass principal como un servicio del sistema. Si lo desea, puede configurarlo AWS IoT Greengrass V2 para que se ejecute como un servicio de usuario de systemd.
Requisitos previos
Esta solución requiere:
Una cuenta de usuario no root en el dispositivo
Acceda por escrito al directorio en el que desea instalar el software AWS IoT Greengrass Core
Para instalarlo y ejecutarlo AWS IoT Greengrass V2 sin acceso root
-
Complete los siguientes pasosInstale el software AWS IoT Greengrass principal con aprovisionamiento automático de recursos: configure el entorno de su dispositivo, proporcione las credenciales y descargue el software AWS IoT Greengrass principal.
-
Cree el directorio de instalación y asegúrese de que es propiedad de su usuario.
mkdir -p $HOME/greengrass/v2 -
Ejecute el instalador sin él
sudo.--component-default-userConfigúrelo a su usuario actual.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 trueNo lo utilice
--setup-system-service trueporque no tiene acceso root para crear un servicio del sistema.
(Opcional) Configure un servicio de usuario de systemd
Puede configurar un servicio de usuario de systemd para administrar el software AWS IoT Greengrass Core. Esto permite que el software se inicie automáticamente al iniciar sesión.
Para configurar un servicio de usuario de systemd
-
Detenga el software AWS IoT Greengrass principal si se está ejecutando actualmente.
kill $(cat $HOME/greengrass/v2/alts/loader.pid) -
Cree el directorio de servicios de usuario de systemd.
mkdir -p $HOME/.config/systemd/user -
Cree el archivo de servicio
$HOME/.config/systemd/user/greengrass.servicecon el siguiente contenido.[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.targetEn los archivos de unidades de usuario de systemd,
%hes un especificador que se convierte en el directorio principal del usuario que ejecuta el servicio./path/to/javaSustitúyalo por la ruta a la instalación de Java. -
Habilite e inicie el servicio.
systemctl --user daemon-reload systemctl --user enable greengrass.service systemctl --user start greengrass.service
Comportamiento de reinicio y actualización OTA
El comportamiento depende de si configuró un servicio de usuario de systemd.
- Con un servicio de usuario
-
Reinicio del dispositivo: el software AWS IoT Greengrass principal se inicia automáticamente cuando el usuario inicia sesión.
Actualización OTA: las actualizaciones OTA se realizan correctamente y el software se reinicia automáticamente.
- Sin un servicio de usuario
-
Reinicio del dispositivo: el software AWS IoT Greengrass principal no se reinicia automáticamente. Debe iniciarlo manualmente.
Actualización OTA: las actualizaciones OTA se realizan correctamente, pero después debes iniciar manualmente el software AWS IoT Greengrass principal.
Límites de recursos del sistema
Los límites de recursos por componente que utilizan cgroups no funcionan en esta solución porque los usuarios que no son root no pueden crear directorios de cgroup en ellos. /sys/fs/cgroup/ Si despliega un componente con los límites de recursos configurados, el software AWS IoT Greengrass Core ignora los límites configurados.
Puede utilizar las siguientes alternativas para gestionar el uso de los recursos:
-
Límites del servicio de usuario de Systemd: si ejecuta el software AWS IoT Greengrass Core como un servicio de usuario de systemd, puede añadir límites de recursos al archivo de servicio en.
$HOME/.config/systemd/user/greengrass.serviceEstos límites se aplican a todo el servicio, incluido el núcleo de Greengrass y todos los componentes.MemoryMax=2G CPUQuota=100% -
Límites de la JVM del núcleo Greengrass: puede limitar la memoria de procesos del núcleo de Greengrass configurando las opciones de la JVM. Para obtener más información, consulte Configurar el software AWS IoT Greengrass principal.
Solución 2: Configúrela AWS IoT Greengrass V2 como no root sin separar los componentes entre los usuarios
Utilice esta solución cuando tenga acceso root para la configuración inicial y desee que el software AWS IoT Greengrass principal se ejecute como un servicio de sistema no root, pero no necesite ejecutar los componentes como usuarios diferentes. Es similar a la solución 1, pero el software se ejecuta como un servicio del sistema que se inicia automáticamente al arrancar.
Desventajas
Esta solución tiene las siguientes limitaciones:
Sin separación entre los usuarios de los componentes: todos los componentes se ejecutan como el mismo usuario que ejecuta el software AWS IoT Greengrass Core. No puede usar la
posixUserconfiguración para ejecutar componentes como usuarios diferentes.RequiresPrivilege ignorado: el software AWS IoT Greengrass Core ignora la
RequiresPrivilegeopción en las recetas de componentes. Los componentes no pueden solicitar privilegios elevados.
Requisitos previos
Esta solución requiere:
Acceso root para la configuración inicial
systemd en tu dispositivo
Para instalarlo y ejecutarlo sin necesidad AWS IoT Greengrass V2 de separar los usuarios de los componentes
-
Complete los siguientes pasosInstale el software AWS IoT Greengrass principal con aprovisionamiento automático de recursos: configure el entorno de su dispositivo, proporcione las credenciales y descargue el software AWS IoT Greengrass principal.
-
Cree un usuario que no sea root y que ejecute el software AWS IoT Greengrass principal y todos los componentes.
sudo useradd --create-home gg_non_root -
Inicie sesión como usuario no root y ejecute el instalador.
--component-default-userConfigúrelo para el mismo usuario. No utilicesudoni configure un servicio del 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 -
Como root, cree el archivo de servicio del sistema
/etc/systemd/system/greengrass.servicecon el siguiente contenido.[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 -
Detenga la instancia AWS IoT Greengrass Core en ejecución y, a continuación, habilite e inicie el servicio del sistema.
sudo systemctl daemon-reload sudo systemctl enable greengrass.service sudo systemctl start greengrass.service
Comportamiento de reinicio y actualización OTA
En esta solución:
El software AWS IoT Greengrass principal se ejecuta como un servicio del sistema y se reinicia automáticamente en caso de fallo o se reinicia el dispositivo.
Las actualizaciones OTA del software AWS IoT Greengrass Core funcionan. El servicio se reinicia automáticamente como usuario no root configurado.
Límites de recursos del sistema
Los límites de recursos por componente que utilizan cgroups no funcionan en esta solución porque los usuarios que no son root y no tienen capacidades de Linux no pueden crear directorios de cgroup en ellos. /sys/fs/cgroup/ Si implementa un componente con los límites de recursos configurados, el software AWS IoT Greengrass Core ignora los límites configurados.
Puede utilizar las siguientes alternativas para gestionar el uso de los recursos:
-
Límites de servicio de Systemd: puede añadir límites de recursos al archivo de servicio del sistema en
/etc/systemd/system/greengrass.service. Estos límites se aplican a todo el servicio, incluido el núcleo de Greengrass y todos los componentes.MemoryMax=2G CPUQuota=100% -
Límites de la JVM del núcleo Greengrass: puede limitar la memoria de procesos del núcleo de Greengrass configurando las opciones de la JVM. Para obtener más información, consulte Configurar el software AWS IoT Greengrass principal.
Solución 3: Configúrela AWS IoT Greengrass V2 como no root con separación de los usuarios de los componentes
Utilice esta solución cuando tenga acceso root para la configuración inicial, pero desee que el software AWS IoT Greengrass principal se ejecute como un usuario no root y, al mismo tiempo, mantenga la capacidad de ejecutar los componentes como usuarios diferentes. Esta configuración utiliza las funciones y funciones de Linux para permitir que el usuario que no es root cambie a otros usuarios al ejecutar los componentes.
Desventajas
Esta solución tiene las siguientes limitaciones:
Requiere la configuración de sudoers: debe configurar sudoers para que el AWS IoT Greengrass V2 usuario pueda ejecutar comandos como otros usuarios.
Requisitos previos
Esta solución requiere:
Acceso root para la configuración inicial
systemd versión 229 o posterior, que admite
AmbientCapabilities. Para comprobar la versión, ejecutesystemctl --version.
Para instalarlo y ejecutarlo AWS IoT Greengrass V2 como usuario no root, con separación de los usuarios de los componentes
-
Complete los siguientes pasosInstale el software AWS IoT Greengrass principal con aprovisionamiento automático de recursos: configure el entorno de su dispositivo, proporcione las credenciales y descargue el software AWS IoT Greengrass principal.
-
Cree un usuario que no sea root y que ejecute el software AWS IoT Greengrass principal.
sudo useradd --create-home gg_non_root -
Añada el usuario que no es root a sudoers para que pueda ejecutar comandos como usuario del componente. Cree un archivo en.
/etc/sudoers.d/gg_non_rootgg_non_root ALL=(ggc_user:ggc_group) NOPASSWD: SETENV: /bin/sh, /bin/bashSi configura los componentes para que se ejecuten como usuarios adicionales
posixUser, añada una entrada sudoers para cada usuario. Por ejemplo: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 -
Inicie sesión como usuario no root y ejecute el instalador. No utilice
sudoni configure un servicio del 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 -
Como root, cree el archivo de servicio del sistema
/etc/systemd/system/greengrass.servicecon el siguiente contenido.[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.targetPara obtener información sobre las capacidades requeridas, consulteCapacidades de Linux requeridas por AWS IoT Greengrass V2.
AmbientCapabilitiesotorga las capacidades de Linux especificadas al usuario no root que ejecuta el servicio. Esto permite que el software AWS IoT Greengrass principal realice operaciones privilegiadas, como cambiar de usuario al ejecutar componentes, sin ejecutarlo como root.CapabilityBoundingSetlimita el conjunto máximo de capacidades que pueden utilizar el servicio y sus procesos secundarios. Las capacidades que no estén incluidas en este conjunto se eliminan de forma permanente.ProtectSystem=stricthace que todo el sistema de archivos sea de solo lectura para el servicio, lo que impide la modificación del sistema operativo.ReadWritePathsespecifica los únicos directorios en los que el servicio puede escribir.
-
Detenga la instancia AWS IoT Greengrass Core en ejecución y, a continuación, habilite e inicie el servicio del sistema.
sudo systemctl daemon-reload sudo systemctl enable greengrass.service sudo systemctl start greengrass.service
Comportamiento de reinicio y actualización OTA
En esta solución:
El software AWS IoT Greengrass principal se ejecuta como un servicio del sistema y se reinicia automáticamente en caso de fallo o se reinicia el dispositivo.
Las actualizaciones OTA del software AWS IoT Greengrass Core funcionan. El servicio se reinicia automáticamente como usuario no root configurado.
Límites de recursos del sistema
Los límites de recursos por componente para la memoria y la CPU funcionan en esta solución de la misma manera que cuando se ejecuta el software AWS IoT Greengrass Core como usuario root.
Solución 4: AWS IoT Greengrass V2 Configúrelo como root con capacidades limitadas
Utilice esta solución cuando desee que el software AWS IoT Greengrass principal se ejecute como root pero con un conjunto reducido de capacidades de Linux. Esta configuración proporciona la funcionalidad completa de ejecutarse como usuario root y, al mismo tiempo, limita la superficie de ataque al restringir las capacidades disponibles para el software y sus componentes.
Desventajas
Esta solución tiene las siguientes consideraciones:
Componentes con RequiresPrivilege capacidades limitadas: los componentes que se utilizan se
RequiresPrivilegeejecutan con el mismo conjunto limitado de capacidades que el software AWS IoT Greengrass principal, no con todos los privilegios de root.
Requisitos previos
Esta solución requiere:
Acceso root
systemd en tu dispositivo
Para instalar y ejecutar AWS IoT Greengrass V2 como root con capacidades limitadas
-
Complete los siguientes pasosInstale el software AWS IoT Greengrass principal con aprovisionamiento automático de recursos: configure el entorno de su dispositivo, proporcione las credenciales y descargue el software AWS IoT Greengrass principal.
-
Modifique el archivo de plantilla de servicio en el directorio en el que descargó el software AWS IoT Greengrass Core.
GreengrassInstaller/bin/greengrass.service.templateAñada las siguientes líneas a la[Service]sección antes de ejecutar el instalador: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 /tmpCapabilityBoundingSetes una función de seguridad de systemd que limita las capacidades de Linux disponibles para el software AWS IoT Greengrass principal y todos sus procesos secundarios. Al configurar un conjunto delimitador, se restringe lo que pueden hacer el proceso y los componentes del núcleo de Greengrass, incluso cuando se ejecutan como root. Para obtener información sobre cada capacidad, consulte. Capacidades de Linux requeridas por AWS IoT Greengrass V2ProtectSystem=stricthace que todo el sistema de archivos sea de solo lectura para el servicio, lo que impide la modificación del sistema operativo. Esto proporciona a Systemd un entorno aislado que protege los archivos del sistema incluso si un componente malintencionado se ejecuta con privilegios elevados.ReadWritePathsespecifica los únicos directorios en los que el servicio puede escribir. AdemásProtectSystem=strict, esto limita el servicio a escribir únicamente en el directorio AWS IoT Greengrass V2 raíz y/tmp.
-
Ejecute el instalador 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
Comportamiento de reinicio y actualización OTA
En esta solución:
El software AWS IoT Greengrass principal se ejecuta como un servicio del sistema y se reinicia automáticamente en caso de fallo o se reinicia el dispositivo.
Las actualizaciones OTA del software AWS IoT Greengrass Core funcionan. El software se actualiza y se reinicia automáticamente.
Límites de recursos del sistema
Los límites de recursos por componente para la memoria y la CPU funcionan en esta solución de la misma manera que cuando se ejecuta el software AWS IoT Greengrass Core como usuario root.
Capacidades de Linux requeridas por AWS IoT Greengrass V2
La siguiente tabla describe las capacidades de Linux que requiere el software AWS IoT Greengrass Core cuando se ejecuta en configuraciones que no son root. Estas capacidades se utilizan en las soluciones 3 y 4.
| Funcionalidad | Description (Descripción) | Necesario para |
|---|---|---|
|
Realice cambios arbitrarios en el archivo UIDs y GIDs |
Cambiar la propiedad del archivo en función del usuario que ejecute el componente |
|
Omita las comprobaciones de permisos de lectura, escritura y ejecución de archivos |
Permitir al usuario principal de Greengrass ejecutar archivos cuando se utilizan para scripts con |
|
Omita las comprobaciones de permisos de lectura de archivos y las comprobaciones de permisos de lectura y ejecución de directorios |
Recorrer la jerarquía de carpetas incluso en el caso de carpetas que el usuario de Greengrass Nucleus no tiene permiso para leer |
|
Omita las comprobaciones de permisos en operaciones que normalmente requieren que el UID del sistema de archivos del proceso coincida con el UID del archivo |
Omitir las comprobaciones de propiedad de los archivos |
|
Realice manipulaciones arbitrarias del proceso UIDs |
Se usa |
|
Realice manipulaciones arbitrarias del proceso GIDs |
Se usa |
|
Anule los límites de recursos |
Establecer límites de recursos en los procesos de los componentes, incluso si los límites no se especifican en las implementaciones |
|
Escriba registros en el registro de auditoría del núcleo |
Permitir |