A página fornece dicas sobre como usar o utilitário de linha de comando sudo
, gerenciar o plug-in sudoers
e evitar ou corrigir problemas.
Causas de problemas
Durante cada execução do comando sudo
, ocorre o seguinte processo para validar os arquivos sudoers
:
- A sintaxe é verificada quanto à precisão.
- O conteúdo é analisado para excluir alguns dos erros lógicos.
- A propriedade e as permissões são verificadas.
A validação dos arquivos sudoers
pode falhar devido a um dos seguintes
erros:
Erros de sintaxe
É necessário seguir regras específicas de sintaxe ao fazer alterações nos arquivos sudoers
. Qualquer desvio dessa sintaxe, incluindo, sem limitação, um caractere ausente ou extra ou uma vírgula inadequada, pode tornar o arquivo inválido. A invalidação do arquivo impossibilita o uso do utilitário sudo
.
Solução
A solução é usar o utilitário visudo
para editar os arquivos sudoers
. Ele valida o conteúdo do arquivo antes de salvar e notifica em caso de problemas. O utilitário visudo
foi criado para editar o arquivo de maneira segura.
Os exemplos a seguir mostram exemplos de sintaxe corretos e incorretos:
Sintaxe correta
user ALL=(ALL) ALL
Sintaxe incorreta
user ALL=(ALL), ALL
Exemplo de erro de sintaxe
$ sudo useradd username
/etc/sudoers:20:17: syntax error
user ALL=(ALL), ALL
^
Erros lógicos
Erros desse tipo podem ser causados por um dos seguintes motivos:
- Equívoco sobre os princípios do plug-in
sudoers
. - Desvios da sintaxe correta.
No entanto, os erros lógicos não são reconhecidos durante a validação, porque eles não violam as regras de sintaxe e, portanto, são difíceis de detectar.
Solução
Leia a documentação oficial com atenção e siga os princípios dela ao editar o arquivo.
O Google também recomenda o uso do utilitário visudo
para editar os arquivos sudoers
, já que ele pode detectar alguns tipos de erros lógicos, como:
- Aliases indefinidos ou não usados
- Referências cíclicas
- Entradas duplicadas
Se algum problema for detectado, você verá uma mensagem de aviso.
Os exemplos a seguir mostram exemplos logicamente corretos e incorretos:
Logicamente correto
barbara ALL=(ALL:ALL) /usr/bin/ls
Logicamente incorreto
barbara ALL=(4LL:ALL) /usr/bin/ls
^
barbara ALL=(ALL;ALL) /usr/bin/ls
^
bar6ara ALL=(ALL:ALL) /usr/bin/1s
^ ^
Permissões incorretas
Além dos erros causados pelo conteúdo dos arquivos sudoers
, as permissões excessivas de arquivos ou a propriedade incorreta também podem causar a falha do utilitário sudo
.
Solução
Você verá uma descrição desses erros na saída do comando sudo
com falha. Leia a descrição da mensagem de erro e faça as correções necessárias.
Este é um exemplo de permissões de arquivo e propriedade corretas
$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
O exemplo a seguir mostra o erro exibido quando há permissões redundantes para o grupo de permissões todos os usuários:
$ ls -l /etc/sudoers
-r--r---w- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit
O exemplo a seguir mostra o erro que é exibido para a propriedade incorreta. Neste exemplo, um usuário com um ID que não é 0
(ou que não seja root
) é o proprietário do arquivo:
$ ls -l /etc/sudoers
-r--r----- 1 user user 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit
Para mais informações sobre a configuração dos arquivos sudoers
, leia
Manual do Sudoers.
Para saber como gerenciar e usar o editor visudo
, leia
Manual do Visudo.
Consequências dos problemas
Problemas nos arquivos sudoers
causam efeitos negativos e podem afetar a funcionalidade de todo o sistema.
O comando
sudo
não funciona mais.Essa é a consequência mais perceptível dos problemas nos arquivos
sudoers
. A consequência disso é a impossibilidade de usar privilégios elevados para os usuários, o que bloqueia a atividade no servidor.No entanto, as consequências mais destrutivas e imprevisíveis são falhas nos aplicativos que dependem do comando
sudo
. Em alguns casos, isso pode fazer com que o aplicativo falhe completamente, levando a um comportamento inesperado, falhas ou perda de dados. Outro exemplo é quando o comandosudo
é chamado por um aplicativo durante a sequência de inicialização do SO e falha. Pode levar a uma falha do SO ou fazer com que a sequência de inicialização fique travada.Possível acesso não autorizado ao sistema.
Outra consequência arriscada é que problemas nos arquivos
sudoers
podem levar ao acesso não autorizado ao sistema. Isso pode acontecer devido a um erro lógico, quando as regras nos arquivossudoers
concedem permissões a alguns usuários ou grupos em excesso.Isso também pode acontecer porque o proprietário do sistema desativa ou enfraquece temporariamente as defesas para fazer login e corrigir o problema.
Recuperação em caso de problemas
Se você perder privilégios de usuário elevados ou não conseguir usar o comando sudo
devido a problemas com os arquivos sudoers
, use a conta de superusuário para recuperação.
Em sistemas operacionais semelhantes ao Unix, o superusuário é uma conta de usuário especial com ID
igual a 0, geralmente chamado de root
. O superusuário tem acesso total aos recursos do sistema e pode executar qualquer tarefa administrativa sem restrições.
Embora a interação com o SO em nome do superusuário geralmente seja considerada
não segura, essa pode ser a única opção para determinadas tarefas, como a recuperação dos
arquivos sudoers
.
Fazer login diretamente enquanto o superusuário expõe o SO ao risco. Para evitar esse risco, o Google recomenda o uso de uma funcionalidade de script de inicialização, já que esse script é executado em nome do superusuário.
Leia mais sobre os scripts de inicialização do Compute Engine.
Para recuperar os arquivos sudoers
com um script de inicialização, faça o seguinte:
Crie uma cópia de backup do script de inicialização atual se ele já estiver em uso. A abordagem de backup depende de como o script de inicialização está configurado.
startup-script
Se o conteúdo do script estiver definido diretamente no valor de metadados, será possível copiá-lo para o bucket do Cloud Storage, o arquivo local ou qualquer outro armazenamento particular temporário.
startup-script-url
Se o conteúdo do script já estiver no armazenamento remoto e o endereço de URL dele for usado, basta remover a chave de metadados
startup-script-url
temporariamente para desativar o script de inicialização atual.Atualize o script de inicialização com a seguinte sequência de comandos:
mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoers
Leia mais sobre o que os comandos fazem
-
mv /etc/sudoers /etc/sudoers.backup.$(date +"%s")
-
Esse comando cria uma cópia do arquivo
/etc/sudoers
com um nome diferente e exclui o arquivo original. O nome do novo arquivo contém um carimbo de data/hora no final para fins de exclusividade (por exemplo,sudoers.backup.1672527600
). -
echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
-
Esse comando cria o arquivo
/etc/sudoers
excluído anteriormente com uma única regra que permite que usuários autorizados do Google Cloud com acesso à VM executem comandos em nome de qualquer usuário do sistema. Essa regra sempre existe por padrão em um arquivo extra/etc/sudoers.d/google_sudoers
. -
chown 0:0 /etc/sudoers
-
Esse comando define o proprietário do arquivo
/etc/sudoers
como um usuário cujo ID é0
e um grupo de proprietários como um grupo cujo ID é0
. -
chmod 0440 /etc/sudoers
-
Esse comando define permissões para o arquivo
/etc/sudoers
como somente leitura e permite que apenas o proprietário e o grupo dele leiam o arquivo.
-
Interrompa a VM, se ela estiver em execução. Reinicie a VM para acionar a execução do script de inicialização.
Сonnect para a VM e edite o arquivo
sudoers
corrompido para recuperá-lo.sudo visudo /etc/sudoers.backup.TIMESTAMP
Salve as alterações e substitua o arquivo
/etc/sudoers
atual pelo arquivo que você acabou de editar.sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
Verifique se o problema original com o uso do comando
sudo
e os privilégios elevados foi corrigido.Remova o script de inicialização temporário e restaure o original se ele tiver sido usado.
.
A seguir
- Saiba como recuperar uma VM inacessível ou corrompida.
- Saiba como adicionar um disco atual a outra VM.