Recentemente, alterei o arquivo sudoers e o nome do host por meio de / etc / hostname. Depois de alterar esses arquivos, meu comando sudo está demorando muito tempo. Além disso, diz sudo incapaz de resolver o host kaagini (nome do host da minha máquina).
Por que o sudo precisa saber o nome do host para fornecer permissão para algo?
Meu arquivo sudoers possui um comando "Padrões env_reset". Vi algumas perguntas semelhantes, mas o contexto não é um login remoto aqui. O erro está sendo exibido em um host local.
A pesquisa inicial do problema diz que o arquivo / etc / hosts deve ter o nome do host real para 127.0.0.1. Isso corrigiu meu problema. Mas minha pergunta real é: por que exigimos isso para o sudo? O sudo deve funcionar independentemente do local de login.
Respostas:
O
/etc/sudoers
arquivo foi projetado para poder ser distribuído entre vários servidores. Para conseguir isso, cada permissão no arquivo tem uma parte do host.Geralmente, isso é definido como o
ALL=
que significa que a permissão é válida para qualquer servidor; no entanto, pode ser definida para hosts específicos:Para que o sudo saiba se essa regra deve ser aplicada, ele precisa procurar o host em que está sendo executado. Ele usa uma chamada que depende do
/etc/hosts
correto, e é por isso que falha se não estiver certo.Pode-se argumentar que
sudo
não precisa se preocupar em fazer uma pesquisa de nome se a parte do host estiver configuradaALL=
para todas as permissões, mas simplesmente não funciona dessa maneira - parece funcionar onde sua execução é anterior ao processamento das regras .Isso é realmente para facilitar a manutenção, pois o sudo apenas lê o / etc / sudoers para ver o que o usuário pode fazer na máquina atual. Mas como administrador com 100 servidores, isso pode exigir 100 arquivos / etc / sudoers diferentes para manter. Como o sudoers possui uma parte do host nas permissões, você pode manter um único arquivo do sudoers e distribuí-lo para todas as máquinas, mas ainda possui granularidade sobre o que os usuários podem fazer em cada máquina.
fonte
Graças ao relatório de bug vinculado registrado por Matthias Urlichs em outro comentário, o seguinte comando resolveu o problema para mim:
Coloque esta linha no
/etc/sudoers
arquivofonte
O Puppet é um software de gerenciamento de configuração capaz de configurar uma frota de servidores automaticamente, lendo os arquivos do Puppet Manifests. Esse arquivo pode incluir uma definição do seu arquivo / etc / sudoers, que pode ser enviado a todos os seus "agentes" fantoches do seu "mestre" fantoche. Todos os hosts obterão a mesma cópia do seu arquivo / etc / sudoers, que pode (e deve) incluir definições HOST, para que você possa conceder a alguns usuários alguns comandos em alguns hosts (mas não em outros).
fonte