Por que o comando sudo demora muito para ser executado?


83

Eu tenho escolhido o Linux (Fedora 10, então 11) nos últimos meses (e gostando imensamente - é como descobrir computadores novamente, tantas coisas para aprender).

Adicionei meu usuário à última linha do arquivo / etc / sudoers, como mostrado abaixo, para que não seja solicitada minha senha ao executar o comando sudo:

MyUserName ALL = (ALL) NOPASSWD: ALL

Agora, toda vez que executo um comando usando o sudo, ele pausa uma quantidade notável de tempo antes de executar a tarefa (~ 10 segundos). Por que isso pode ser e como posso corrigir isso? Estou executando o Sudo versão 1.7.1 no Fedora 11 x86 64.


Tecnicamente, isso conta como editar um script, certo? Um script não é um programa?

6
NOPASSWD: é considerado um risco de segurança e anula o propósito de ter que usar o sudo em primeiro lugar.

Posso comprar isso, mas a questão ainda permanece por que leva tanto tempo.

2
Onde esta máquina obtém usuários e autenticação? LDAP, possivelmente com Kerberos, talvez?
Wzzrd 9/07/2009

Respostas:


123

Eu fiz essa pergunta no SO e ela foi movida para cá. Dito isto, não tenho mais a capacidade de editar a pergunta como se a possuísse ou até mesmo aceitar a resposta correta, mas essa foi a verdadeira razão pela qual e como resolvê-la:

Encontrado aqui O usuário "rohandhruva" lá dá a resposta certa:

Isso acontece se você alterar o nome do host durante o processo de instalação.

Para resolver o problema, edite o arquivo / etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <ADD_YOURS_HERE> 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 <ADD_YOURS_HERE>

3
Muito bem. Um tanto surpreendente que distros como o Fedora não editem o / etc / hosts se você mudar seu nome de host no momento da instalação, mas tanto faz. Isso é open source para você!
Dimo414 5/08/09

Isso corrigiu meu uso lento do sudo, obrigado! Editei o arquivo / etc / hostname e esqueci de editar o arquivo / etc / hosts.
21411 Joe

2
Adicionar seu nome de host à linha 127.0.0.1 ou :: 1 pode fazer com que certos softwares relacionados ao servidor sejam vinculados à interface / nome de host / IP / direito. Um exemplo é o Cloudera Manager, os serviços hadoop obtêm o nome do host errado e confundem o CM porque todos resolvem para o host local. Sugiro ler outra resposta abaixo para uma possível solução. Isso pode ou não causar problemas em uma estação de trabalho autônoma que não terá outros computadores conectados a ela.
ddcruver

1
Também pode ser o /etc/nsswitch.conf (por razões semelhantes). O meu foi definido como "hosts: arquivos DNS" e, portanto, estava procurando meu nome de host em um servidor DNS com um longo tempo limite. Eu mudei para "hosts: files dns" e, agora, ele procurará primeiro no / etc / hosts. Obrigado por esta resposta, o que me levou a procurar no nsswitch.conf!
Alan Porter

1
É ridículo que essa fosse a solução. Por que no mundo o sudocomando precisa olhar o nome do host para funcionar? O que meu nome de host tem a ver sudo echo hello? De qualquer forma, obrigado pela resposta
smac89

24

Verifique se o seu daemon syslog está funcionando corretamente; isso causou o problema para mim.

Execute o seguinte comando

logger 'Hello world'
  1. O comando retorna dentro de um período de tempo razoável?

  2. 'Hello world' aparece /var/log/syslog?

Se não for esse o caso, o daemon syslog travou. Reiniciá-lo deve resolver o seu problema.


9
Surpreendentemente, esse foi o problema para mim. Quem teria pensado isso. A solução para mim foi apenas reiniciar o syslog. service rsyslog restart
MikeKulls

O mesmo aqui. service rsyslog restartcorrigi meus comandos sudo lentos.
Pedro Cordeiro

Surpreendentemente, esse foi o problema para mim. Antes disso, toda a solicitação do servidor é muito lenta. Eu só quero saber o porquê?
22617 Michael Jackson

10

É um dos arquivos / diretórios que ele precisa ler em uma montagem em rede ou está de alguma forma ativando a leitura de um dispositivo usb lento? Tente seguir e veja onde é lento; se passar muito rápido, faça

sudo strace -r -o trace.log sudo echo hi

Cada linha começará com o tempo decorrido desde a entrada na chamada do sistema anterior.

(O sudo inicial parece ser necessário; não sei quanto isso perturbará os resultados.)


Valeu. Isso está no HDD, sem USB ou unidade de rede.

@Cuga: e o que você aprendeu com strace?

@oligofren: você precisa fazer sudo strace
ysth

8

Recentemente, descobri que tinha o mesmo problema. Não houve atraso no sudo e, de repente, um atraso de 10 a 20 segundos. Eu determinei o problema específico usando:

 1. chmod u+s /usr/sbin/strace  (as the root user)

Como você:

 1. sudo -K
 2. strace sudo /bin/tcsh

E, em seguida, descubra onde as chamadas do sistema estão suspensas.

No meu caso, descobri que ele estava pendurado em uma tradução de DNS, aparentemente um dos DNSen na minha lista /etc/resolv.confestava muito buzy ou com problemas. Então mudei a ordem de resolução e as coisas funcionaram rapidamente novamente.


Melhor resposta (para mim)! Descobri que meu DBus Broker estava travando ao desconectar a rede e que o sudo / KDE estava se esgotando ao se conectar a ele. Obrigado!
PSSGCSim 13/07

Obrigado, isso me ajudou. Eu também tive que desfazer uma alteração anterior na hostslinha no meu /etc/nsswitch.conf. Eu adicionei "resolve dns" como um prefixo ao hostsvalor. Quando removi esse prefixo, o sudo foi rápido novamente.
mnieber 16/07

5

Não tenho certeza sobre o Fedora, mas usei outros sistemas nos quais o sudo verificava de onde você está conectado, e se o seu DNS não estiver configurado corretamente, pode levar séculos para esgotar o tempo limite. Isso também pode ser visto quando o SSH entra na máquina - leva séculos para surgir um prompt.


5

Eu tinha o mesmo problema, verifiquei /var/log/auth.log e syslog quanto a erros. Acontece que meu servidor LDAP não pôde ser acessado e diminuiu a velocidade de tudo.

Como não usei mais a autenticação baseada em LDAP, removi todas as referências "ldap" do /etc/nsswitch.conf

Desde então, tudo funciona como um encanto novamente.


Por que você publica uma resposta obviamente não relacionada (o OP não usou LDAP) a uma pergunta de cinco anos?
Sven

7
Porque isso pode ajudar alguém. Eu verifiquei todas as coisas mencionadas aqui, mas nada ajudou. Outra pessoa pode se concentrar em procurar a direção certa com a minha resposta, verificando se ele tem algum problema de conexão LDAP como o motivo subjacente do comando sudo lento e sem resposta. É tão relevante quanto as respostas relacionadas ao DNS, pois algo por trás das cobertas está com defeito e não é diretamente visível ao usuário. Considero este site uma fonte geral de conhecimento e não apenas um tipo de site de perguntas / respostas. Trata-se de coletar conhecimentos relevantes.
Sakuraba

6
Também quem no inferno azul é você para desacreditar minha ajuda. Este site funciona porque o compartilhamento de conhecimento é incentivado, e não porque as pessoas estão com votos negativos. Se você não gosta, tem o direito de ignorá-lo.
Sakuraba

5

Em alguns casos, é encontrado que o nome do host (que foi configurado em /etc/sysconfig/ network) não existe no /etc/hostsarquivo; portanto, ao adicionar o arquivo mencionado acima, o arquivo é aberto imediatamente.


3

Tive um problema semelhante. Corrigi-o colocando o nome do host (por exemplo, mybox) e a saída completa do comando hostname (mybox.mydomain.com). Isso esclareceu tudo. Passou de 2 minutos para abrir / etc / hosts para acesso instantâneo.


3

Caso SELinux

Se o mesmo comando sudo for lento apenas em um daemon e rápido na linha de comando, é provavelmente o SELinux mais provavelmente. (SELinux = módulo do kernel Linux com segurança avançada da NSA, ativado no Fedora por padrão.)

Um caso típico é um servidor http e um script especial para gerenciamento de servidor, restrito em sudoers:

apache ALL=(root_or_user) NOPASSWD: /full/path/the_safe_command

É típico, neste caso, que nada sobre o SELinux seja relatado no log de auditoria ausearch -m avc -ts today, mas o script será rápido se desativarmos temporariamente a imposição por setenforce 0. (e depois ativar novamente por setenforce 1)

As únicas mensagens relevantes no log do sistema (journalcrl) são estas após o atraso de 25 segundos:

... sudo [...] pam_systemd (sudo: session): falha ao criar a sessão: não recebeu uma resposta. As possíveis causas incluem: o aplicativo remoto não enviou uma resposta, a política de segurança do barramento de mensagens bloqueou a resposta, o tempo limite da resposta expirou ou a conexão de rede foi interrompida.
... sudo [...]: pam_unix (sudo: sessão): sessão aberta para raiz do usuário por (uid = 0)

O registro de todas as mensagens silenciosas do SElinux "não faça auditoria" pode ser ativado semodule -DBe desativado novamente por semodule -B.
(Espero escrever em breve um módulo de política do SELinux em breve para este caso aqui ou um método dessa resposta pode ser usado.)


Obrigado por esta informação. A partir das informações aqui, pude encontrar um artigo relacionado que notava a possibilidade de fprintd(a autenticação de impressão digital) o culpado. Removendo fprintde fprintd-pamresolvendo o problema para mim.
KevinO 17/05

@KevinO Satisfeito por ter ajudado a encontrar uma solução. No entanto, eu sabia que meu problema era muito específico e que minha contribuição para a pergunta deveria ser apenas o método para diagnosticar ou excluir uma suspeita sobre o SELinux.
Hynekcer 17/05

Eu absolutamente dei +1! Foi o barramento de mensagens que levou a uma solução. Eu olhei algumas vezes no sudo devagar, mas a sua era a pista que eu precisava.
KevinO 18/05/19

1

Olhando para o sudoersarquivo de amostra que tenho, acredito que deveria haver um espaço após o NOPASSWD:bit.


Eu adicionei um espaço, mas ainda tem o atraso. Obrigado pela sugestão.


1

Após corrigir qualquer problema no host, limpe qualquer cache DNS incorreto se estiver executando um aplicativo de cache DNS como o nscd:

/etc/init.d/nscd force-reload

1

Para mim, foi instalado o krb5-user / config / locales. Percebi isso examinando /var/log/auth.log. Usando o apt-get remove para desinstalar esses pacotes, foi corrigido. Não remova esses pacotes se você estiver em um computador que requer o kerberos (pam_krb5) obviamente.


0

Você está usando LDAP para autenticação?

Nesse caso, você provavelmente deseja usar a política de ligação virtual. Em /etc/ldap/ldap.conf (ou /etc/ldap.conf):

bind_policy soft

0

Parece que você tem algum tipo de tempo limite na sua cadeia de autenticação. Veja como o sudo tenta se autenticar e observe gargalos.


0

Caso Systemd

Para mim, meu sistema ficou sem memória e muitos processos travaram. Meu sistema é baseado no systemd e algo ali havia travado. É difícil lembrar tudo o que fiz, mas:

  • systemctl status <any.service> expiraria
  • Não consegui sudo reboot(baseado no sistema)

Solução

Uma reinicialização corrigiu meu problema, mas para mim foi apenas um bandaid. Você ainda precisa descobrir por que ficou sem memória / travou.

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.