View a markdown version of this page

Configurar los dispositivos AWS IoT Greengrass V2 principales como dispositivos no root - AWS IoT Greengrass

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 en el repositorio de AWS IoT Greengrass nucleus lite GitHub .

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.

Soluciones que no son root
Solución Requiere acceso root Puede ejecutar componentes como diferentes usuarios Ejecuta Greengrass como servicio de sistema Lo mejor para

Solución 1: Sin acceso a la raíz

No

No

No (servicio de usuario opcional)

Dispositivos a los que no tienes acceso root

Solución 2: usuario único que no es root

Sí (solo para configuración)

No

Ejecutar Greengrass como usuario no root con todos los componentes ejecutándose como el mismo usuario

Solución 3: sin root, multiusuario

Sí (solo para configuración)

Ejecutar Greengrass como usuario no root mientras se ejecutan componentes como usuarios diferentes

Solución 4: Rootear con capacidades limitadas

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.

Diagrama de flujo que muestra el proceso de decisión para elegir una solución no raíz. Comience por preguntar si tiene acceso root en su dispositivo principal. Si no, usa la Solución 1. En caso afirmativo, pregunte si necesita ejecutar los componentes como distintos usuarios de Linux. Si la respuesta es no, utilice la Solución 2. En caso afirmativo, pregunte si quiere que Greengrass se ejecute como usuario root con capacidades limitadas. En caso afirmativo, utilice la Solución 4. Si la respuesta es no, utilice la Solución 3.

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 posixUser configuración para ejecutar componentes como usuarios diferentes.

  • RequiresPrivilege ignorado: el software AWS IoT Greengrass Core ignora la RequiresPrivilege opció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
  1. 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.

  2. Cree el directorio de instalación y asegúrese de que es propiedad de su usuario.

    mkdir -p $HOME/greengrass/v2
  3. Ejecute el instalador sin élsudo. --component-default-userConfigúrelo a su usuario actual.

    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

    No lo utilice --setup-system-service true porque 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
  1. Detenga el software AWS IoT Greengrass principal si se está ejecutando actualmente.

    kill $(cat $HOME/greengrass/v2/alts/loader.pid)
  2. Cree el directorio de servicios de usuario de systemd.

    mkdir -p $HOME/.config/systemd/user
  3. Cree el archivo de servicio $HOME/.config/systemd/user/greengrass.service con 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.target

    En los archivos de unidades de usuario de systemd, %h es 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.

  4. 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.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 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 posixUser configuración para ejecutar componentes como usuarios diferentes.

  • RequiresPrivilege ignorado: el software AWS IoT Greengrass Core ignora la RequiresPrivilege opció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
  1. 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.

  2. 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
  3. Inicie sesión como usuario no root y ejecute el instalador. --component-default-userConfigúrelo para el mismo usuario. No utilice sudo ni configure un servicio del 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. Como root, cree el archivo de servicio del sistema /etc/systemd/system/greengrass.service con 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
  5. 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 admiteAmbientCapabilities. Para comprobar la versión, ejecute systemctl --version.

Para instalarlo y ejecutarlo AWS IoT Greengrass V2 como usuario no root, con separación de los usuarios de los componentes
  1. 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.

  2. Cree un usuario que no sea root y que ejecute el software AWS IoT Greengrass principal.

    sudo useradd --create-home gg_non_root
  3. 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_root

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

    Si configura los componentes para que se ejecuten como usuarios adicionalesposixUser, 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
  4. Inicie sesión como usuario no root y ejecute el instalador. No utilice sudo ni configure un servicio del 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. Como root, cree el archivo de servicio del sistema /etc/systemd/system/greengrass.service con 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.target

    Para 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.

  6. 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 RequiresPrivilege ejecutan 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
  1. 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.

  2. Modifique el archivo de plantilla de servicio en el directorio en el que descargó el software AWS IoT Greengrass Core. GreengrassInstaller/bin/greengrass.service.template Añ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 /tmp
    • CapabilityBoundingSetes 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 V2

    • ProtectSystem=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.

  3. Ejecute el instalador 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
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.

Capacidades de Linux requeridas
Funcionalidad Description (Descripción) Necesario para

CAP_CHOWN

Realice cambios arbitrarios en el archivo UIDs y GIDs

Cambiar la propiedad del archivo en función del usuario que ejecute el componente

CAP_DAC_OVERRIDE

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 RequiresPrivilege

CAP_DAC_READ_SEARCH

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

CAP_FOWNER

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

CAP_SETUID

Realice manipulaciones arbitrarias del proceso UIDs

Se usa sudo cuando se ejecutan scripts como un usuario diferente al usuario que ejecuta el núcleo de Greengrass

CAP_SETGID

Realice manipulaciones arbitrarias del proceso GIDs

Se usa sudo cuando se ejecutan scripts como un grupo diferente al grupo que ejecuta el núcleo de Greengrass

CAP_SYS_RESOURCE

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

CAP_AUDIT_WRITE

Escriba registros en el registro de auditoría del núcleo

Permitir sudo escribir en el registro de auditoría del núcleo