La première fois sudo
que j'entre sur mon serveur Ubuntu 14.04 est toujours lente. L'invite de mot de passe s'affiche immédiatement, mais après avoir appuyé sur Entrée, il faut environ 10 à 15 secondes pour imprimer la sortie. Toutes les commandes sudo après cela s'exécutent instantanément.
L'exécution de quelque chose comme sudo strace -S time -c sudo echo hi
ne montre rien d'utile dans ce cas, car le sudo de sudo echo hi
est déjà le deuxième sudo et s'exécute rapidement. Si un certain temps s'écoule et que je dois ressaisir le mot de passe dans une session en cours, il est à nouveau lent.
Toutes les solutions que j'ai trouvées consistaient à ajouter votre nom d'hôte comme résolution pour 127.0.0.1 dans le /etc/hosts
fichier, ce que j'ai fait en vain. su root
s'exécute instantanément. La seule chose dont je me souviens avoir changé au cours des derniers jours est le masque de réseau d'un sous-réseau que le serveur achemine, installant samba, dnsutils et bind9. Mais aucun de ces processus n'est en cours d'exécution et le problème persiste, dans l'accès physique, aux sessions ssh ainsi qu'aux sessions tmux.
EDIT: Nouvelle approche
J'ai essayé de courir sudo tcpdump -vvvi any > tcpdump.log
tout en déconnectant tous les NIC. Le journal présente un grand nombre des éléments suivants:
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)
Les mêmes entrées apparaissent avec tcp instad de udp. J'ai remplacé le nom de domaine de notre université par OURLOCALDOMAIN.
Maintenant, je pense que kerberos pourrait avoir quelque chose à voir avec cela, mais j'ai supprimé le /etc/krb5.conf et redémarré, toujours pas de changement. Il me semble que le serveur essaie de se valider sur un serveur central kerberos de notre réseau universitaire. Je sais que quelques années auparavant, cette IP était enregistrée sur un serveur qui exécutait la samba pour notre département. Pourrait-il y avoir une connexion? J'ai changé mon nom d'hôte en celui qui était utilisé à l'époque, aucun changement dans le comportement de sudo. Lmwangi suggère quelque chose à propos de PAM, que je connais peu, donc je ne sais pas comment aborder cela. Je me suis également souvenu que j'étais passé de Heimdal Kerberos à MIT Kerberos lors de l'installation de samba, car j'avais des problèmes lors de l'installation de samba. Je vais également essayer les idées des commentaires dans les prochains jours, mais je voyagerai pendant quelques jours donc cela pourrait prendre un certain temps.
EDIT 2: Résolu
Il y avait une entrée de recherche DNS héritée dans le /etc/network/interfaces
qui a tout gâché. Je me sens très stupide. Tout fonctionne maintenant.
sudo -k
pour supprimer vos informations d'identification mises en cache. J'ai trouvé cela strace -Tro sudo.log sudo echo hi
utile car la dernière colonne indique l'heure de chaque appel. grep
pour uname
et socket
en entrée.
-r
option (qui devrait peut-être être supprimée). Commencez par la recherche pour les longs appels de la -T
possibilité - ils sont ceux au sein du <
et >
- 0,000097 sec dans votre cas.
strace
vous y arrivera éventuellement, mais il s'agit probablement d'un problème de configuration de niveau supérieur. La plupart des longues pauses pendant l'authentification sont dues à l'échec de l'accès aux serveurs distants et à l'attente d'un délai d'attente. Il se peut que le changement de sous-réseau place le serveur d'authentification sur un sous-réseau différent de celui-ci. sudo
enregistre temporairement un enregistrement d'authentification réussie en dessous /var
, c'est pourquoi les invocations suivantes sont instantanément exécutées.
strace
vous permettra de l'exécuter sans le premiersudo
. Il peut également être utile d'utiliser l'-o <file>
option pour enregistrer la sortie dans un fichier pour analyse.