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.



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


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


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.