Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Por que não consigo executar comandos sudo na minha instância Linux do EC2?

5 minuto de leitura
0

Quando executo comandos sudo na minha instância Linux do Amazon Elastic Compute Cloud (Amazon EC2), recebo um erro.

Breve descrição

O erro a seguir pode ocorrer quando você tenta executar comandos sudo em uma instância Linux do Amazon EC2:

  • "/usr/bin/sudo must be owned by uid 0 and have the setuid bit set"

Esse erro ocorre quando um usuário não raiz possui o arquivo /usr/bin/sudo. O arquivo /usr/bin/sudo deve ter root:root como proprietário.

  • O erro "sudo: /etc/sudoers is world writable"

Esse erro ocorre quando o arquivo /etc/sudoers tem as permissões incorretas. O arquivo sudoers não pode ser gravado em todo o mundo. Se um arquivo puder ser gravado em todo o mundo, todos poderão gravar nele. Por padrão, o modo do arquivo para o arquivo sudoers é 0440. Isso permite que o proprietário e o grupo leiam o arquivo e proíbe que qualquer pessoa escreva no arquivo.

Para corrigir esses erros, use o Console de Série do Amazon EC2 ou um script de dados do usuário.

Resolução

Usar o Console de Série do EC2

Se você ativou o Console de Série do EC2, poderá usá-lo para solucionar problemas de tipos de instância baseados em Nitro compatíveis. O console de série ajuda você a solucionar problemas de inicialização, configuração de rede e problemas de configuração SSH. O console de série se conecta à sua instância sem precisar de uma conexão de rede em funcionamento. Para acessar o console de série, use o console do Amazon EC2 ou a AWS Command Line Interface (AWS CLI).

Antes de usar o console de série, conceda acesso ao console no nível da conta. Em seguida, crie políticas do AWS Identity and Access Management (IAM) que concedam acesso aos seus usuários do IAM. Além disso, todas as instâncias que usam o console de série devem incluir pelo menos um usuário baseado em senha. Se você não conseguir acessar sua instância ou o console de série, siga as instruções na seção Método 2: Usar um script de dados do usuário. Para obter mais informações sobre como configurar o Console de Série do EC2 para Linux, consulte Configurar o acesso ao Console de Série do EC2.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Usar um script de dados do usuário

Use um script de dados do usuário para corrigir erros de sudo nas seguintes distribuições:

  • Distribuições baseadas em Red Hat, como SUSE, CentOS, Amazon Linux 1, Amazon Linux 2, Amazon Linux 2023 e RHEL
  • Distribuições baseadas em Debian, como Ubuntu

Importante: esse procedimento exige que você pare e inicie a instância do EC2. Isso pode resultar em perda de dados, outras instâncias interrompidas e alterações no endereço IP público. Para obter mais informações, acesse O que acontece quando você interrompe uma instância.

  1. Abra o console do Amazon EC2 e, em seguida, selecione sua instância.

  2. Escolha Ações, Estado da instância, Parar.
    Observação: se você não conseguir escolher Parar, a instância já está interrompida ou seu dispositivo raiz é um volume de armazenamento de instâncias.

  3. Escolha Ações, Configurações da instância e Editar dados do usuário.

  4. Copie e cole o seguinte script no campo Editar dados do usuário, em seguida escolha Salvar. Não se esqueça de copiar o script inteiro. Não insira espaços adicionais ao colar o script:
    Distribuições baseadas em Red Hat

    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [scripts-user, always]
    
    --//
    Content-Type: text/x-shellscript; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="userdata.txt"
    
    #!/bin/bash
    PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
    rpm --setugids sudo && rpm --setperms sudo
    find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
    find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
    --//

    Observação: as duas linhas de comando finais recuperam as permissões, o proprietário e o grupo dos plug-ins personalizados da política de segurança sudo no diretório /etc/sudoers.d/.
    Distribuições baseadas em Debian

    Content-Type: multipart/mixed; boundary="//"
    MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [scripts-user, always]
    
    --//
    Content-Type: text/x-shellscript; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="userdata.txt"
    
    #!/bin/bash
    /bin/chown root:root /usr/bin/sudo
    /bin/chmod 4111 /usr/bin/sudo
    /bin/chmod 644 /usr/lib/sudo/sudoers.so
    /bin/chmod 0440 /etc/sudoers
    /bin/chmod 750 /etc/sudoers.d
    find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
    find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
    --//

    As duas linhas de comando finais recuperam as permissões, o proprietário e o grupo dos plug-ins personalizados da política de segurança sudo no diretório /etc/sudoers.d/.
    Importante: as permissões para /usr/bin/sudo diferem em várias distribuições Linux. Antes de definir permanentemente suas permissões, verifique as permissões de uma instância com um sistema operacional semelhante. Execute ls -l /usr/bin/sudo e use as permissões neste exemplo como referência.
    Certifique-se de que sua instância de referência seja uma instalação limpa e não esteja em produção, para que esse arquivo permaneça inalterado.

  5. Inicie a instância, em seguida conecte à instância usando SSH.
    Observação: se você receber um erro de sintaxe, consulte I edited the sudoers file on my EC2 instance and now I'm receiving syntax errors when trying to run sudo commands. How do I fix this?

AWS OFICIAL
AWS OFICIALAtualizada há um ano