O primeiro que sudo
eu entro no meu servidor Ubuntu 14.04 é sempre lento. O prompt da senha é exibido imediatamente, mas depois que eu pressiono enter, leva de 10 a 15 segundos até a saída ser impressa. Todos os comandos sudo após isso são executados instantaneamente.
Executar algo como sudo strace -S time -c sudo echo hi
não mostra nada de útil nesse caso, pois o sudo from sudo echo hi
já é o segundo sudo e executa rapidamente. Se passar algum tempo e for necessário digitar novamente a senha em uma sessão em execução, ela ficará lenta novamente.
Todas as soluções que encontrei foram sobre adicionar seu nome de host como resolução para 127.0.0.1 no /etc/hosts
arquivo, o que eu fiz sem sucesso. su root
executa instantaneamente. A única coisa que me lembro de mudar nos últimos dias é a máscara de rede de uma sub-rede que o servidor está roteando, instalando samba, dnsutils e bind9. Mas nenhum desses processos está em execução e o problema permanece, no acesso físico, nas sessões ssh e nas sessões do tmux.
EDIT: Nova Abordagem
Tentei correr sudo tcpdump -vvvi any > tcpdump.log
enquanto todas as placas de rede estavam desconectadas. O log mostra muitos dos seguintes itens:
18:35:09.453399 IP (tos 0x0, ttl 64, id 49112, offset 0, flags [DF], proto UDP (17), length 76)
localhost.38498 > localhost.domain: [bad udp cksum 0xfe4b -> 0x1050!] 58546+ SRV? _kerberos._udp.KF.OURLOCALDOMAIN.DE. (48)
18:35:09.457412 IP (tos 0x0, ttl 64, id 49113, offset 0, flags [none], proto UDP (17), length 76)
localhost.domain > localhost.38498: [bad udp cksum 0xfe4b -> 0x8fcd!] 58546 ServFail q: SRV? _kerberos._udp.KF.OURLOCALDOMAIN.DE. 0/0/0 (48)
As mesmas entradas são exibidas com o tcp instad do udp. Substituí o nome de domínio da nossa universidade por OURLOCALDOMAIN.
Agora, acho que o kerberos pode ter algo a ver com isso, mas excluí o /etc/krb5.conf e reiniciei, ainda sem alterações. Parece-me que o servidor tenta se validar em um servidor kerberos central da nossa rede universitária. Sei que alguns anos antes, esse IP foi registrado em um servidor que rodava samba para nosso departamento. Poderia haver uma conexão? Mudei meu nome de host para o que era usado na época, nenhuma mudança no comportamento do sudo. Lmwangi sugere algo sobre o PAM, sobre o qual tenho pouco conhecimento, então não sei como abordar isso. Também me lembrei de que mudei de Heimdal Kerberos para MIT Kerberos ao instalar o samba, porque tive problemas durante a instalação do samba. Também vou tentar as idéias dos comentários nos próximos dias, mas viajarei por alguns dias para que possa levar algum tempo.
EDIT 2: Resolvido
Havia uma entrada legada de pesquisa de DNS na /etc/network/interfaces
que estragou tudo. Eu me sinto muito estúpido. Tudo funciona agora.
sudo -k
para remover sua credencial em cache. Achei que strace -Tro sudo.log sudo echo hi
era útil, pois a última coluna mostra a hora em cada chamada. grep
para uname
e socket
como iniciante.
-r
opção (que talvez deva ser removida). Comece procurando as chamadas longas a partir da -T
opção - elas são as que estão dentro de <
e >
- 0,000097 s no seu caso.
strace
você chegará lá eventualmente, mas esse provavelmente é um problema de configuração de nível superior. A maioria das pausas longas durante a autenticação ocorre devido à falha no acesso aos servidores remotos e à espera de um tempo limite. Pode ser que a alteração na sub-rede coloque o servidor de autenticação em uma sub-rede diferente desta. sudo
salva temporariamente um registro de autenticação bem-sucedida por baixo, /var
e é provavelmente por isso que as invocações subsequentes passam instantaneamente.
strace
permitirá que você o execute sem o primeirosudo
. Também pode ajudar a usar a-o <file>
opção para salvar a saída em um arquivo para análise.