A página oferece sugestões sobre a utilização do utilitário de linha de comandos sudo
, a gestão do plug-in sudoers
e a prevenção ou a correção de problemas que surjam.
Causas dos problemas
Durante cada execução do comando sudo
, ocorre o seguinte processo
para validar os ficheiros sudoers
:
- A sintaxe é verificada quanto à correção.
- O conteúdo é analisado para excluir alguns dos erros lógicos.
- A propriedade e as autorizações são verificadas.
A validação dos ficheiros sudoers
pode falhar devido a qualquer um dos seguintes erros:
Erros de sintaxe
Tem de seguir regras de sintaxe específicas quando faz alterações aos sudoers
ficheiros. Qualquer desvio desta sintaxe, incluindo, entre outros, um caráter em falta ou adicional, ou uma vírgula inadequada, pode tornar o ficheiro inválido. A invalidação do ficheiro torna impossível usar o utilitário sudo
.
Solução
A solução é usar o utilitário visudo
para editar os ficheiros sudoers
. Valida o conteúdo do ficheiro antes de guardar e envia uma notificação em caso de problemas. O utilitário visudo
foi criado para editar o ficheiro de forma segura.
Os exemplos seguintes 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
Os erros deste tipo podem dever-se a um dos seguintes motivos:
- Uma má compreensão dos 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 não violam as regras de sintaxe e, por isso, são difíceis de detetar.
Solução
Tem de ler atentamente a documentação oficial e seguir os respetivos princípios quando editar o ficheiro.
A Google também recomenda que use o utilitário visudo
para editar os ficheiros sudoers
, uma vez que pode detetar alguns tipos de erros lógicos, como:
- Aliases não definidos ou não usados
- Referências cíclicas
- Entradas duplicadas
Se forem detetados problemas, é apresentada uma mensagem de aviso.
Os exemplos seguintes mostram amostras logicamente corretas e incorretas:
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
^ ^
Autorizações incorretas
Além dos erros causados pelo conteúdo dos ficheiros sudoers
, as respetivas autorizações de ficheiros excessivas ou a propriedade incorreta também podem fazer com que a utilidade sudo
falhe.
Solução
Vê uma descrição destes erros no resultado do comando com falha.sudo
Leia a descrição da mensagem de erro e faça as correções necessárias.
Segue-se um exemplo das autorizações e da propriedade dos ficheiros corretas
$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
O exemplo seguinte mostra o erro apresentado quando existem autorizações redundantes para o grupo de autorizações todos os utilizadores:
$ 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 seguinte mostra o erro que é apresentado para a propriedade incorreta. Neste exemplo, um utilizador com um ID que não seja 0
(ou um utilizador que não seja root
) é o proprietário do ficheiro:
$ 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 ficheiros sudoers
, leia o
manual do Sudoers.
Para saber como gerir e usar o editor visudo
, leia o manual do Visudo.
Consequências dos problemas
Os problemas nos ficheiros sudoers
causam efeitos negativos e podem afetar a funcionalidade de todo o sistema.
O comando
sudo
já não funciona.Esta é a consequência mais percetível dos problemas nos ficheiros
sudoers
. A consequência disto é a incapacidade de usar privilégios elevados para os utilizadores, o que bloqueia a respetiva atividade no servidor.No entanto, as consequências mais destrutivas e imprevisíveis são as falhas das aplicações que dependem do comando
sudo
. Em alguns casos, isto pode fazer com que a aplicação falhe completamente, o que leva a um comportamento inesperado, falhas de sistema ou perda de dados. Outro exemplo é quando o comandosudo
é chamado por uma aplicação durante a sequência de arranque do SO e falha. Pode levar a uma falha do SO ou fazer com que a sequência de arranque fique bloqueada.Possível acesso não autorizado ao sistema.
Outra consequência arriscada é que os problemas nos ficheiros
sudoers
podem levar a um acesso não autorizado ao sistema. Isto pode acontecer devido a um erro lógico quando as regras nos ficheirossudoers
concedem permissões excessivas a alguns utilizadores ou grupos.Isto também pode acontecer porque o proprietário do sistema desativa ou enfraquece temporariamente as defesas do sistema para iniciar sessão e corrigir o problema.
Recuperação em caso de problemas
Se perder os privilégios de utilizador elevados ou não conseguir usar o comando sudo
devido a problemas com os ficheiros sudoers
, use a conta de superutilizador para a recuperação.
Nos sistemas operativos semelhantes ao Unix, o superutilizador é uma conta de utilizador especial com um ID igual a 0, que normalmente se denomina root
. O superutilizador tem acesso total aos recursos do sistema e pode realizar qualquer tarefa administrativa sem restrições.
Embora a interação com o SO em nome do superutilizador seja geralmente considerada
insegura, pode ser a única opção para determinadas tarefas, como a recuperação dos
ficheiros sudoers
.
Iniciar sessão diretamente como superutilizador expõe o SO a riscos. Para evitar este risco, a Google recomenda que use uma funcionalidade de script de arranque, uma vez que este script é executado em nome do superutilizador.
Leia mais sobre os scripts de arranque do Compute Engine.
Para recuperar os ficheiros sudoers
com um script de arranque, faça o seguinte:
Crie uma cópia de segurança do script de arranque atual, se já estiver em utilização. A abordagem de cópia de segurança depende da forma como o script de arranque está configurado.
startup-script
Se o conteúdo do script estiver definido diretamente no valor dos metadados, pode copiar o conteúdo do script para o contentor do Cloud Storage, para o ficheiro local ou para qualquer outro armazenamento privado temporário.
startup-script-url
Se o conteúdo do script já estiver no armazenamento remoto e o respetivo endereço URL for usado, pode remover temporariamente a chave de metadados
startup-script-url
para desativar o script de arranque atual.Atualize o script de arranque 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")
-
Este comando cria uma cópia do ficheiro
/etc/sudoers
com um nome diferente e elimina o ficheiro original. O nome do novo ficheiro contém uma data/hora no final para garantir a exclusividade (por exemplo,sudoers.backup.1672527600
). -
echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers
-
Este comando cria o ficheiro eliminado anteriormente
/etc/sudoers
com uma única regra que permite que os utilizadores Google Cloud autorizados com acesso à VM executem quaisquer comandos em nome de qualquer utilizador do sistema. Esta regra existe sempre por predefinição num ficheiro adicional/etc/sudoers.d/google_sudoers
. -
chown 0:0 /etc/sudoers
-
Este comando define o proprietário do ficheiro
/etc/sudoers
como um utilizador cujo ID é0
e um grupo de proprietários como um grupo cujo ID é0
. -
chmod 0440 /etc/sudoers
-
Este comando define as autorizações do ficheiro
/etc/sudoers
como só de leitura e permite que apenas o respetivo proprietário e grupo de proprietários leiam o ficheiro.
-
Pare a VM, se estiver em execução. Reinicie a VM para acionar a execução do script de arranque.
Estabeleça ligação à VM e edite o ficheiro
sudoers
danificado para o recuperar.sudo visudo /etc/sudoers.backup.TIMESTAMP
Guarde as alterações e substitua o ficheiro
/etc/sudoers
atual pelo ficheiro que acabou de editar.sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
Certifique-se de que o problema original com a utilização do comando
sudo
e os privilégios elevados foi corrigido.Remova o script de arranque temporário e restaure o original, se tiver sido usado.
What's Next?
- Saiba como recuperar uma VM inacessível ou danificada.
- Saiba como adicionar um disco existente a outra VM.