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?
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:
- Interrompa a instância.
- Separe o volume da raiz.
- Conecte o volume raiz a uma instância de recuperação como volume secundário.
- Monte o volume anexado.
- Desfaça as alterações no arquivo sudoers.
Resolução
Pré-requisitos
- Interromper e reiniciar a instância apaga todos os dados nos volumes de armazenamento da instância. Faça backup de todos os dados do volume de armazenamento da instância que você deseja manter. Para obter mais informações, consulte Determinar o tipo de dispositivo raiz da instância.
- O ato de interromper e iniciar a instância altera o endereço IP público da instância. Ao rotear tráfego externo para sua instância, é prática recomendada usar um endereço IP elástico em vez de um endereço IP público.
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?
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 9 meses