View a markdown version of this page

Configure os dispositivos AWS IoT Greengrass V2 principais como não raiz - AWS IoT Greengrass

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configure os dispositivos AWS IoT Greengrass V2 principais como não raiz

Esta página apresenta quatro soluções para executar o software AWS IoT Greengrass Core como não-root. Analise a tabela de comparação para entender os recursos e as vantagens e desvantagens de cada solução e, em seguida, use o fluxograma de decisão para identificar qual delas atende às suas necessidades.

nota

As soluções não raiz desta página se aplicam somente ao AWS IoT Greengrass núcleo em dispositivos Linux. O Windows não está incluído porque AWS IoT Greengrass V2 deve ser executado como um serviço do sistema no Windows. Para a instalação raiz padrão no Linux, consulteInstale o software AWS IoT Greengrass principal com provisionamento automático de recursos.

Para executar o AWS IoT Greengrass nucleus lite como um usuário não root, consulte Usando o Podman no repositório AWS IoT Greengrass nucleus lite. GitHub

Escolha uma solução não raiz

Use a tabela a seguir para comparar as soluções não raiz e entender suas vantagens e desvantagens. Cada solução oferece recursos diferentes, dependendo dos requisitos de segurança e das restrições do dispositivo.

Soluções não raiz
Solução Requer acesso root Pode executar componentes como usuários diferentes Executa o Greengrass como serviço do sistema Melhor para

Solução 1: sem acesso root

Não

Não

Não (serviço ao usuário opcional)

Dispositivos em que você não tem acesso root

Solução 2: usuário único, sem root

Sim (somente configuração)

Não

Sim

Executando o Greengrass como um usuário não root com todos os componentes sendo executados como o mesmo usuário

Solução 3: não root, multiusuário

Sim (somente configuração)

Sim

Sim

Executando o Greengrass como um usuário não root enquanto executa componentes como usuários diferentes

Solução 4: raiz com recursos limitados

Sim

Sim

Sim

Executando o Greengrass como root com um conjunto limitado de recursos Linux

O fluxograma a seguir orienta você na seleção da solução apropriada com base nas restrições e requisitos do seu dispositivo.

Fluxograma mostrando o processo de decisão para escolher uma solução não raiz. Comece perguntando se você tem acesso root no seu dispositivo principal. Se não, use a Solução 1. Se sim, pergunte se você precisa executar componentes como usuários diferentes do Linux. Se não, use a Solução 2. Se sim, pergunte se você deseja que o Greengrass seja executado como usuário root com recursos limitados. Se sim, use a Solução 4. Se não, use a Solução 3.

Solução 1: configurar AWS IoT Greengrass V2 sem acesso root

Use essa solução quando você não tiver acesso root no dispositivo. Nessa configuração, o software AWS IoT Greengrass Core é executado inteiramente como um usuário não root, sem privilégios elevados.

Desvantagens

Essa solução tem as seguintes limitações:

  • Sem separação de usuários de componentes — Todos os componentes são executados como o mesmo usuário que executa o software AWS IoT Greengrass Core. Você não pode usar a posixUser configuração para executar componentes como usuários diferentes.

  • RequiresPrivilege ignorado — O software AWS IoT Greengrass Core ignora a RequiresPrivilege opção nas receitas de componentes. Os componentes não podem solicitar privilégios elevados.

  • Sem serviço do sistema — Você não pode instalar o software AWS IoT Greengrass Core como um serviço do sistema. Opcionalmente, você pode configurar AWS IoT Greengrass V2 para ser executado como um serviço de usuário do systemd.

Pré-requisitos

Essa solução requer:

  • Uma conta de usuário não root no dispositivo

  • Acesso de gravação ao diretório em que você deseja instalar o software AWS IoT Greengrass Core

Para instalar e executar AWS IoT Greengrass V2 sem acesso root
  1. Conclua as seguintes etapas emInstale o software AWS IoT Greengrass principal com provisionamento automático de recursos: configure o ambiente do seu dispositivo, forneça credenciais e baixe o software AWS IoT Greengrass Core.

  2. Crie o diretório de instalação e garanta que seu usuário o possua.

    mkdir -p $HOME/greengrass/v2
  3. Execute o instalador semsudo. --component-default-userDefina como seu usuário atual.

    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

    Não use --setup-system-service true porque você não tem acesso root para criar um serviço do sistema.

(Opcional) Configurar um serviço de usuário systemd

Você pode configurar um serviço de usuário do systemd para gerenciar o software AWS IoT Greengrass Core. Isso permite que o software inicie automaticamente quando você faz login.

Para configurar um serviço de usuário do systemd
  1. Pare o software AWS IoT Greengrass principal se ele estiver em execução no momento.

    kill $(cat $HOME/greengrass/v2/alts/loader.pid)
  2. Crie o diretório do serviço de usuário systemd.

    mkdir -p $HOME/.config/systemd/user
  3. Crie o arquivo de serviço em $HOME/.config/systemd/user/greengrass.service com o conteúdo a seguir.

    [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

    Nos arquivos de unidade de usuário systemd, %h é um especificador que resolve para o diretório inicial do usuário que está executando o serviço.

    /path/to/javaSubstitua pelo caminho para sua instalação do Java.

  4. Ative e inicie o serviço.

    systemctl --user daemon-reload systemctl --user enable greengrass.service systemctl --user start greengrass.service
Comportamento de reinicialização e atualização OTA

O comportamento depende se você configurou um serviço de usuário systemd.

Com um serviço de atendimento ao usuário
  • Reinicialização do dispositivo — O software AWS IoT Greengrass Core é iniciado automaticamente quando o usuário faz login.

  • Atualização OTA — As atualizações OTA são bem-sucedidas e o software é reiniciado automaticamente.

Sem um serviço de usuário
  • Reinicialização do dispositivo — O software AWS IoT Greengrass Core não reinicia automaticamente. Você deve iniciá-lo manualmente.

  • Atualização OTA — As atualizações OTA são bem-sucedidas, mas você deve iniciar manualmente o software AWS IoT Greengrass Core posteriormente.

Limites de recursos do sistema

Os limites de recursos por componente usando cgroups não funcionam nessa solução porque usuários não root não podem criar diretórios cgroup em. /sys/fs/cgroup/ Se você implantar um componente com limites de recursos configurados, o software AWS IoT Greengrass Core ignorará os limites configurados.

Você pode usar as seguintes alternativas para gerenciar o uso de recursos:

  • Limites de serviço ao usuário do Systemd — Se você executar o software AWS IoT Greengrass Core como um serviço de usuário do Systemd, poderá adicionar limites de recursos ao arquivo de serviço em. $HOME/.config/systemd/user/greengrass.service Esses limites se aplicam a todo o serviço, incluindo o núcleo do Greengrass e todos os componentes.

    MemoryMax=2G CPUQuota=100%
  • Limites da JVM do núcleo do Greengrass — Você pode limitar a memória do processo do núcleo do Greengrass configurando as opções da JVM. Para obter mais informações, consulte Configurar o software AWS IoT Greengrass principal.

Solução 2: configurar AWS IoT Greengrass V2 como não raiz sem separação do usuário do componente

Use essa solução quando tiver acesso root para a configuração inicial e quiser que o software AWS IoT Greengrass Core seja executado como um serviço de sistema não raiz, mas não precisar executar componentes como usuários diferentes. Isso é semelhante à Solução 1, mas o software é executado como um serviço do sistema que é iniciado automaticamente na inicialização.

Desvantagens

Essa solução tem as seguintes limitações:

  • Sem separação de usuários de componentes — Todos os componentes são executados como o mesmo usuário que executa o software AWS IoT Greengrass Core. Você não pode usar a posixUser configuração para executar componentes como usuários diferentes.

  • RequiresPrivilege ignorado — O software AWS IoT Greengrass Core ignora a RequiresPrivilege opção nas receitas de componentes. Os componentes não podem solicitar privilégios elevados.

Pré-requisitos

Essa solução requer:

  • Acesso root para configuração inicial

  • systemd no seu dispositivo

Para instalar e executar AWS IoT Greengrass V2 como não root sem separação do usuário do componente
  1. Conclua as seguintes etapas emInstale o software AWS IoT Greengrass principal com provisionamento automático de recursos: configure o ambiente do seu dispositivo, forneça credenciais e baixe o software AWS IoT Greengrass Core.

  2. Crie um usuário não root que executará o software AWS IoT Greengrass Core e todos os componentes.

    sudo useradd --create-home gg_non_root
  3. Faça login como usuário não root e execute o instalador. --component-default-userDefina para o mesmo usuário. Não use sudo e não configure um serviço do 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, crie o arquivo de serviço do sistema em /etc/systemd/system/greengrass.service com o conteúdo a seguir.

    [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. Pare a execução da instância AWS IoT Greengrass Core e, em seguida, ative e inicie o serviço do sistema.

    sudo systemctl daemon-reload sudo systemctl enable greengrass.service sudo systemctl start greengrass.service
Comportamento de reinicialização e atualização OTA

Nesta solução:

  • O software AWS IoT Greengrass Core é executado como um serviço do sistema e reinicia automaticamente em caso de falha ou reinicialização do dispositivo.

  • As atualizações OTA do software AWS IoT Greengrass Core funcionam. O serviço é reiniciado automaticamente como usuário não root configurado.

Limites de recursos do sistema

Os limites de recursos por componente usando cgroups não funcionam nessa solução porque usuários não root sem recursos do Linux não podem criar diretórios cgroup em. /sys/fs/cgroup/ Se você implantar um componente com limites de recursos configurados, o software AWS IoT Greengrass Core ignorará os limites configurados.

Você pode usar as seguintes alternativas para gerenciar o uso de recursos:

  • Limites de serviço do Systemd — Você pode adicionar limites de recursos ao arquivo de serviço do sistema em/etc/systemd/system/greengrass.service. Esses limites se aplicam a todo o serviço, incluindo o núcleo do Greengrass e todos os componentes.

    MemoryMax=2G CPUQuota=100%
  • Limites da JVM do núcleo do Greengrass — Você pode limitar a memória do processo do núcleo do Greengrass configurando as opções da JVM. Para obter mais informações, consulte Configurar o software AWS IoT Greengrass principal.

Solução 3: configurar AWS IoT Greengrass V2 como não raiz com separação de usuários de componentes

Use essa solução quando tiver acesso root para a configuração inicial, mas quiser que o software AWS IoT Greengrass Core seja executado como um usuário não root, mantendo a capacidade de executar componentes como usuários diferentes. Essa configuração usa recursos e sudoers do Linux para permitir que o usuário não root alterne para outros usuários ao executar componentes.

Desvantagens

Essa solução tem as seguintes limitações:

  • Requer configuração de sudoers — Você deve configurar sudoers para permitir que o AWS IoT Greengrass V2 usuário execute comandos como outros usuários.

Pré-requisitos

Essa solução requer:

  • Acesso root para configuração inicial

  • systemd versão 229 ou posterior, que suporta. AmbientCapabilities Para verificar a versão, execute systemctl --version.

Para instalar e executar AWS IoT Greengrass V2 como não root com separação de usuários de componentes
  1. Conclua as seguintes etapas emInstale o software AWS IoT Greengrass principal com provisionamento automático de recursos: configure o ambiente do seu dispositivo, forneça credenciais e baixe o software AWS IoT Greengrass Core.

  2. Crie um usuário não root que executará o software AWS IoT Greengrass Core.

    sudo useradd --create-home gg_non_root
  3. Adicione o usuário não root aos sudoers para que ele possa executar comandos como usuário do componente. Crie um arquivo em/etc/sudoers.d/gg_non_root.

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

    Se você configurar componentes para serem executados como usuários adicionaisposixUser, adicione uma entrada sudoers para cada usuário. Por exemplo:

    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. Faça login como usuário não root e execute o instalador. Não use sudo e não configure um serviço do 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, crie o arquivo de serviço do sistema em /etc/systemd/system/greengrass.service com o conteúdo a seguir.

    [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 obter informações sobre os recursos necessários, consulteCapacidades do Linux exigidas pelo AWS IoT Greengrass V2.

    • AmbientCapabilitiesconcede os recursos Linux especificados ao usuário não root que executa o serviço. Isso permite que o software AWS IoT Greengrass Core execute operações privilegiadas, como trocar de usuário ao executar componentes, sem ser executado como root.

    • CapabilityBoundingSetlimita o conjunto máximo de recursos que o serviço e seus processos secundários podem usar. Os recursos que não estão nesse conjunto são eliminados permanentemente.

    • ProtectSystem=stricttorna todo o sistema de arquivos somente para leitura do serviço, impedindo a modificação do sistema operacional.

    • ReadWritePathsespecifica os únicos diretórios nos quais o serviço pode gravar.

  6. Pare a execução da instância AWS IoT Greengrass Core e, em seguida, ative e inicie o serviço do sistema.

    sudo systemctl daemon-reload sudo systemctl enable greengrass.service sudo systemctl start greengrass.service
Comportamento de reinicialização e atualização OTA

Nesta solução:

  • O software AWS IoT Greengrass Core é executado como um serviço do sistema e reinicia automaticamente em caso de falha ou reinicialização do dispositivo.

  • As atualizações OTA do software AWS IoT Greengrass Core funcionam. O serviço é reiniciado automaticamente como usuário não root configurado.

Limites de recursos do sistema

Os limites de recursos por componente para memória e CPU funcionam nessa solução da mesma forma que ao executar o software AWS IoT Greengrass Core como root.

Solução 4: configurar AWS IoT Greengrass V2 como root com recursos limitados

Use essa solução quando quiser que o software AWS IoT Greengrass Core seja executado como root, mas com um conjunto reduzido de recursos do Linux. Essa configuração fornece a funcionalidade completa de execução como root e, ao mesmo tempo, limita a superfície de ataque ao restringir os recursos disponíveis para o software e seus componentes.

Desvantagens

Essa solução tem as seguintes considerações:

  • Componentes com recursos RequiresPrivilege limitados — Os componentes usados são RequiresPrivilege executados com o mesmo conjunto limitado de recursos do software AWS IoT Greengrass Core, não com privilégios de root completos.

Pré-requisitos

Essa solução requer:

  • Acesso root

  • systemd no seu dispositivo

Para instalar e executar AWS IoT Greengrass V2 como root com recursos limitados
  1. Conclua as seguintes etapas emInstale o software AWS IoT Greengrass principal com provisionamento automático de recursos: configure o ambiente do seu dispositivo, forneça credenciais e baixe o software AWS IoT Greengrass Core.

  2. Modifique o arquivo de modelo de serviço emGreengrassInstaller/bin/greengrass.service.template, no diretório em que você baixou o software AWS IoT Greengrass Core. Adicione as seguintes linhas à [Service] seção antes de executar o 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
    • CapabilityBoundingSeté um recurso de segurança do systemd que limita os recursos do Linux disponíveis para o software AWS IoT Greengrass Core e todos os seus processos secundários. Ao configurar um conjunto delimitador, você restringe o que o processo e os componentes do núcleo do Greengrass podem fazer, mesmo quando executados como root. Para obter informações sobre cada recurso, consulteCapacidades do Linux exigidas pelo AWS IoT Greengrass V2.

    • ProtectSystem=stricttorna todo o sistema de arquivos somente para leitura do serviço, impedindo a modificação do sistema operacional. Isso fornece um sandboxing do systemd que protege os arquivos do sistema mesmo se um componente malicioso for executado com privilégios elevados.

    • ReadWritePathsespecifica os únicos diretórios nos quais o serviço pode gravar. Além dissoProtectSystem=strict, isso limita o serviço a gravar somente no diretório AWS IoT Greengrass V2 raiz /tmp e.

  3. Execute o instalador com--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 de reinicialização e atualização OTA

Nesta solução:

  • O software AWS IoT Greengrass Core é executado como um serviço do sistema e reinicia automaticamente em caso de falha ou reinicialização do dispositivo.

  • As atualizações OTA do software AWS IoT Greengrass Core funcionam. O software é atualizado e reiniciado automaticamente.

Limites de recursos do sistema

Os limites de recursos por componente para memória e CPU funcionam nessa solução da mesma forma que ao executar o software AWS IoT Greengrass Core como root.

Capacidades do Linux exigidas pelo AWS IoT Greengrass V2

A tabela a seguir descreve os recursos do Linux exigidos pelo software AWS IoT Greengrass Core quando executado em configurações não raiz. Esses recursos são usados nas Soluções 3 e 4.

Capacidades Linux necessárias
Recurso Description Necessário para

CAP_CHOWN

Faça alterações arbitrárias no arquivo UIDs e GIDs

Alteração da propriedade do arquivo dependendo do usuário que está executando o componente

CAP_DAC_OVERRIDE

Ignorar verificações de permissão de leitura, gravação e execução de arquivos

Permitindo que o usuário do Greengrass nucleus execute arquivos quando usados para scripts com RequiresPrivilege

CAP_DAC_READ_SEARCH

Ignorar verificações de permissão de leitura de arquivos e verificações de permissão de leitura e execução de diretórios

Percorrendo a hierarquia de pastas, mesmo para pastas que o usuário do Greengrass nucleus não tem permissão para ler

CAP_FOWNER

Ignore as verificações de permissão em operações que normalmente exigem que o UID do sistema de arquivos do processo corresponda ao UID do arquivo

Ignorando as verificações de propriedade do arquivo

CAP_SETUID

Faça manipulações arbitrárias do processo UIDs

Usando sudo ao executar scripts como um usuário diferente do usuário que executa o núcleo do Greengrass

CAP_SETGID

Faça manipulações arbitrárias do processo GIDs

Usando sudo ao executar scripts como um grupo diferente do grupo que executa o núcleo do Greengrass

CAP_SYS_RESOURCE

Ignorar limites de recursos

Definir limites de recursos em processos de componentes, mesmo que os limites não sejam especificados nas implantações

CAP_AUDIT_WRITE

Gravar registros no registro de auditoria do kernel

Permitindo sudo gravar no registro de auditoria do kernel