Comando sudo tentando procurar pelo nome do host

15

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.

prathmesh.kallurkar
fonte
@OliverSalzburg Eu reformulei a pergunta corretamente. Por favor, deixe-me saber se há algo errado
prathmesh.kallurkar

Respostas:

16

O /etc/sudoersarquivo 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:

%sudo    kaagini=(ALL) ALL

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/hostscorreto, e é por isso que falha se não estiver certo.

Pode-se argumentar que sudonão precisa se preocupar em fazer uma pesquisa de nome se a parte do host estiver configurada ALL=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.

Paulo
fonte
Obrigado pela resposta. Você pode entrar no arquivo sudoers distribuídos novamente? Veja, eu tenho um sistema operacional em execução no machineA. O arquivo de permissões (/ etc / sudoers) deste sistema operacional deve ser armazenado em outras máquinas. Ou sua resposta significa dizer que o comando sudo pode dizer algo como o usuário John pode sudo da machineA, mas não da machineB ??
Prathmesh.kallurkar
É realmente para facilitar a manutenção. O sudo lê apenas / 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 em cada máquina.
Paul
mais uma pergunta ... o administrador do servidor precisa scp o novo arquivo sudoers toda vez que houver uma alteração no arquivo sudoers principal ou o sudo fornece uma maneira de manter o arquivo sudoers na rede?
Prathmesh.kallurkar
@ prathmesh.kallurkar Não, não existe um método interno de distribuição, mas esse é o linux, então isso é normal. Você usaria rsync ou scp ou outra ferramenta para concluir esta parte.
Paul
11
Eu considero que isso é um bug (se houver apenas TODAS as regras, o sudo não precisará saber o nome do host) e, portanto, registrou bugzilla.sudo.ws/show_bug.cgi?id=916
Matthias Urlichs em
1

Graças ao relatório de bug vinculado registrado por Matthias Urlichs em outro comentário, o seguinte comando resolveu o problema para mim:

Defaults !fqdn

Coloque esta linha no /etc/sudoersarquivo

kjones
fonte
-3

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).

Felipe Alvarez
fonte
3
Você pode expandir sua resposta para explicar o que é marionete, onde você o encontra e como usá-lo para resolver o problema? Da fila de revisão
fixer1234
2
Leia Como recomendo o software para obter algumas dicas sobre como você deve recomendar o software. Você deve fornecer pelo menos um link, algumas informações adicionais sobre o software em si e como ele pode ser usado para resolver o problema na pergunta.
DavidPostill