Quando altero o arquivo sudoers na minha instância do EC2, recebo erros de sintaxe ao executar comandos sudo. Como faço para corrigir isso?

4 minuto de leitura
0

Alterei manualmente o arquivo sudoers na minha instância do Amazon Elastic Compute Cloud (do Amazon EC2). Agora, recebo um erro de sintaxe semelhante ao seguinte ao executar comandos sudo su ou comandos que exigem acesso privilegiado do usuário: “/etc/sudoers: syntax error near line xx” “sudo: parse error in /etc/sudoers near line xx” “sudo: no valid sudoers sources found, quitting” “sudo: unable to initialize policy plugin”

Breve descrição

Esse erro de sintaxe ocorre quando você altera manualmente o arquivo /etc/sudoers para alterar o usuário sudo e adicionar caracteres indesejados ao arquivo. O resultado será uma instância danificada incapaz de executar sudo su ou comandos que exigem acesso privilegiado do usuário. Para corrigir esse erro de sintaxe, siga as seguintes etapas:

  1. Interrompa a instância.
  2. Separe o volume da raiz.
  3. Conecte o volume raiz a uma instância de recuperação como volume secundário.
  4. Monte o volume anexado.
  5. Desfaça as alterações no arquivo sudoers.

Resolução

Pré-requisitos

Observação: não use um editor de texto como vi, vim ou nano para alterar manualmente o arquivo sudoers em uma instância em execução à qual você possa se conectar. Execute o comando visudo para alterar o arquivo /etc/sudoers nas instâncias às quais você pode se conectar. O comando visudo verifica erros de análise enquanto você faz alterações e alerta sobre problemas que você introduz no arquivo antes de salvá-las.

1.    Abra o console do Amazon EC2.

2.    No painel de navegação, escolha Instâncias.

3.    Selecione a instância prejudicada, escolha Estado da instância e, em seguida, escolha Interromper instância.

4.    No pop-up Interromper instância, escolha Interromper.

5.    Na guia Armazenamento, clique no ID do volume do nome do dispositivo raiz.

6.    Na página Volumes, selecione o volume, escolha Ações e, em seguida, escolha Desanexar volume.

7.    No pop-up, escolha Desanexar. Verifique se Estado do volume está Disponível.

8.    Inicie uma nova instância do EC2 na mesma zona de disponibilidade da instância original. A nova instância se torna sua instância de resgate.

9.    Depois que a instância de recuperação for iniciada, no painel de navegação, escolha Volumes.

10.    Selecione o volume raiz desanexado da instância original. Escolha Ações e, em seguida, Anexar volume.

11.    Em Instância, selecione o ID da instância de recuperação e insira o nome do dispositivo. Em seguida, escolha Anexar volume.

12.    Com seu par de chaves, use SSH para se conectar à instância.

13.    Para verificar o nome do dispositivo do volume conectado, execute o comando lsblk.

lsblk

Exemplo de saída:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTxvda    202:0    0    8G  0 disk
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  500G  0 disk
└─xvdf1 202:81   0  500G  0 part

14.    Crie um diretório de montagem e, em seguida, monte com privilégios de raiz.
Amazon Linux, Ubuntu e Debian:

sudo mount /dev/xvdf1 /mnt

Amazon Linux 2023, Amazon Linux 2, CentOS 7 ou 8, SUSE Linux 12, e RHEL 7.x ou 8.x:

sudo mount -o nouuid /dev/xvdf1 /mnt

verifique o ponto de montagem no console para ver o volume recém-conectado. O ponto de montagem geralmente é /dev/xvdf1.

15.    Execute Chroot no diretório montado.

for dir in {/dev,/dev/pts,/sys,/proc}; do sudo mount -o bind $dir /mnt$dir; donechroot /mnt

16.    Para alterar o arquivo subdoers, execute o comando visudo:

visudo

Ao alterar o arquivo, você pode reverter as alterações feitas que causaram o erro de sintaxe. Ou você pode copiar o arquivo da instância de recuperação e substituir o arquivo /mnt/etc/sudoers por um arquivo correto conhecido:

Crie um backup do arquivo original.

sudo mv /mnt/etc/sudoers /mnt/etc/sudoers.backup

Copie o arquivo para a instância.

sudo cp /etc/sudoers /mnt/etc/sudoers

17.    Depois de alterar ou substituir o arquivo sudoers, desmonte o volume.

for dir in {/dev,/dev/pts,/sys,/proc}; do umount /mnt$dir; donesudo umount /mnt

18.    Associe o volume à instância original. Especifique o ponto de montagem como /dev/xvda ou /dev/sda1, pois esse é o volume raiz da instância original.

19.    Inicie a instância original.

20.    Use SSH para se conectar à instância e executar comandos sudo.

Informações relacionadas

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

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses