Pourquoi la commande sudo tarde-t-elle à s'exécuter?


83

J'ai adopté Linux (Fedora 10, puis 11) au cours des derniers mois (et en ai profité énormément - c'est comme si on découvrait des ordinateurs à nouveau, tellement de choses à apprendre).

J'ai ajouté mon utilisateur à la dernière ligne du fichier / etc / sudoers, comme indiqué ci-dessous, afin de ne pas recevoir mon mot de passe lorsque j'exécute la commande sudo:

MyUserName ALL = (ALL) NOPASSWD: ALL

Désormais, chaque fois que j'exécute une commande à l'aide de sudo, il s'interrompt assez longtemps avant d'exécuter la tâche (environ 10 secondes). Pourquoi est-ce possible et comment puis-je résoudre ce problème? J'utilise Sudo version 1.7.1 sur Fedora 11 x86 64.


Techniquement, cela compte comme l'édition d'un script, non? Un script n'est-il pas un programme?

6
NOPASSWD: est considéré comme un risque pour la sécurité et va à l'encontre du but de devoir utiliser sudo en premier lieu.

Je peux acheter cela, mais il reste à savoir pourquoi cela prend si longtemps.

2
D'où provient cette machine, les utilisateurs et l'authentification? LDAP, éventuellement avec Kerberos peut-être?
wzzrd

Réponses:


123

J'ai posé cette question sur SO et cela a été déplacé ici. Cela dit, je ne suis plus en mesure de modifier la question comme si je la possédais, ni même d'accepter la réponse correcte, mais cela s'est avéré être la véritable raison pour laquelle et comment le résoudre:

Ici, l' utilisateur "rohandhruva" trouve la bonne réponse:

Cela se produit si vous modifiez le nom d'hôte au cours du processus d'installation.

Pour résoudre le problème, éditez le fichier / 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
Tout à fait raison. Un peu surprenant que des distributions comme Fedora ne modifient pas / etc / hosts si vous modifiez votre nom d’hôte au moment de l’installation, mais peu importe. C'est open source pour vous!
dimo414

Cela a corrigé ma lente utilisation sudo, merci! J'ai édité / etc / hostname et j'ai juste oublié d'éditer le fichier / etc / hosts.
Joe

2
L'ajout de votre nom d'hôte à la ligne 127.0.0.1 ou :: 1 peut entraîner la liaison de certains logiciels liés au serveur avec le nom d'hôte / IP / interface approprié. Cloudera Manager en est un exemple. Les services hadoop obtiennent le mauvais nom d’hôte et confondent CM parce qu’ils se résolvent tous en localhost. Je suggère de lire une autre réponse ci-dessous pour une solution possible. Cela peut ou non causer des problèmes à un poste de travail autonome auquel aucun autre ordinateur ne sera connecté.
ddcruver

1
Il peut également s'agir de /etc/nsswitch.conf (pour des raisons similaires). Le mien était réglé sur "hôtes: fichiers dns", de sorte qu'il cherchait mon nom d'hôte sur un serveur DNS avec un long délai d'attente. Je l'ai changé en "hosts: files dns" et maintenant, il va d'abord regarder dans / etc / hosts. Merci pour cette réponse qui m'a amené à regarder dans nsswitch.conf!
Alan Porter

1
C'est ridicule que ce soit la solution. Pourquoi dans le monde la sudocommande doit-elle regarder le nom d'hôte pour fonctionner? Qu'est-ce que mon nom d'hôte a à voir sudo echo hello? Quoi qu'il en soit, merci pour la réponse
smac89

24

Vérifiez que votre démon syslog fonctionne correctement. cela a causé le problème pour moi.

Lancer la commande suivante

logger 'Hello world'
  1. Est-ce que la commande revient dans un délai raisonnable?

  2. 'Bonjour tout le monde' apparaît-il /var/log/syslog?

Si ce n'est pas le cas, le démon syslog s'est écrasé. Le redémarrer devrait résoudre votre problème.


9
Étonnamment, c'était le problème pour moi. Qui l'aurait pensé. La solution pour moi était juste de redémarrer syslog. service rsyslog restart
MikeKulls

Pareil ici. service rsyslog restartcorrigé mes commandes sudo lentes.
Pedro Cordeiro

Étonnamment, c'était le problème pour moi. Avant cela, toute la requête pour le serveur est si lente. Je veux juste savoir pourquoi?
Michael Wang

10

L'un des fichiers / répertoires qu'il doit lire sur un montage en réseau ou déclenche-t-il en quelque sorte la lecture à partir d'un périphérique USB lent? Essayez strace et voyez où c'est lent; si ça passe trop vite, fais

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

Chaque ligne commence par le temps écoulé depuis la saisie du précédent appel système.

(Le sudo initial semble être nécessaire; je ne sais pas dans quelle mesure cela va perturber les résultats.)


Merci. Ceci est sur le disque dur tho, pas de lecteur USB ou réseau.

@Cuga: et qu'as-tu appris de strace?

@oligofren: vous devez faire sudo strace
ysth

8

J'ai récemment constaté que j'avais le même problème. Il n'y avait pas eu de retard sudo et tout d'un coup, environ 10 à 20 secondes. J'ai déterminé le problème spécifique en utilisant:

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

Comme vous-même:

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

Et trouvez ensuite où les appels système sont en attente.

Dans MON cas, j’ai trouvé qu’il était en attente d’une traduction DNS. Apparemment, l’un des DNSen de ma liste /etc/resolv.confétait très animé ou a mal tourné. J'ai donc changé l'ordre de résolution et les choses ont vite fonctionné.


Meilleure réponse (pour moi)! J'ai découvert que DBus Broker se bloquait lors de la déconnexion du réseau et que sudo / KDE était sur le point de s'y connecter. Merci!
PSSGCSim

Merci, cela m'a aidé. J'ai également dû annuler une modification antérieure de la hostsligne dans mon fichier /etc/nsswitch.conf. J'avais ajouté "résoudre le DNS" comme préfixe à la hostsvaleur. Lorsque j'ai supprimé ce préfixe, sudo était à nouveau rapide.
Mnieber le

5

Je ne suis pas sûr à propos de Fedora, mais j'ai utilisé d'autres systèmes sur lesquels sudo vérifierait d'où vous êtes connecté. Si votre DNS n'est pas configuré correctement, le délai peut être long. Cela se voit également lorsque SSH entre dans la machine - il faut beaucoup de temps pour arriver à une invite.


5

J'ai le même problème, j'ai vérifié les erreurs dans /var/log/auth.log et syslog. Il s'avère que mon serveur LDAP n'a pas pu être atteint et cela a tout ralenti.

Je n'utilisais plus l'authentification basée sur LDAP, j'ai donc supprimé toutes les références "ldap" de /etc/nsswitch.conf

Depuis lors, tout fonctionne à nouveau comme un charme.


Pourquoi postez-vous une réponse manifestement non liée (le PO n’a pas utilisé LDAP) à une question vieille de cinq ans?
Sven

7
Parce que cela pourrait aider n'importe qui. J'ai vérifié toutes les choses qui ont été mentionnées ici, mais rien n'a aidé. Ma réponse pourrait permettre à quelqu'un d'autre de regarder dans la bonne direction en vérifiant s'il a des problèmes de connexion LDAP en tant que raison sous-jacente de la commande sudo lente et qui ne répond pas. Il est aussi pertinent que les réponses liées au DNS en ce que quelque chose derrière les couvertures est en cause, ce qui n'est pas directement visible pour l'utilisateur. Je considère ce site comme une source générale de connaissances et non pas simplement comme un type de site Web à simple question / réponse. Il s'agit de recueillir des connaissances pertinentes.
Sakuraba

6
De plus, qui êtes-vous dans l'enfer bleu pour discréditer mon aide? Ce site fonctionne parce que le partage des connaissances est une incitation, pas parce que les gens sont votés. Si vous ne l'aimez pas, alors vous avez le droit de l'ignorer.
Sakuraba

5

Dans certains cas, il se trouve que le nom d’hôte (qui a été configuré dans /etc/sysconfig/ network) n’existe pas dans le /etc/hostsfichier; Ainsi, lors de l'ajout du fichier susmentionné, le fichier s'ouvre rapidement.


3

J'ai eu un problème similaire, je l'ai résolu en plaçant le nom d'hôte (par exemple, mybox) et la sortie complète de la commande hostname (mybox.mydomain.com). Cela l'a éclairci. Allé de 2 minutes pour ouvrir / etc / hosts à un accès instantané.


3

Affaire SELinux

Si la même commande sudo est lente uniquement dans un démon et rapide sur la ligne de commande, cela est probablement causé par SELinux . (SELinux = module du noyau Linux Security-Enhanced NSA, activé par défaut dans Fedora.)

Un cas typique est un serveur http et un script spécial pour la gestion de serveur, restreint à sudoers:

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

Il est typique dans ce cas que rien ne concerne SELinux dans le journal d'audit ausearch -m avc -ts today, mais le script se déroule rapidement si nous désactivons temporairement l'application par setenforce 0. (puis de nouveau activé par setenforce 1)

Les seuls messages pertinents dans le journal système (journalcrl) sont ceux-ci après le délai de 25 secondes:

... sudo [...] pam_systemd (sudo: session): Echec de la création de session: N'a pas reçu de réponse. Les causes possibles sont les suivantes: l’application distante n’a pas envoyé de réponse, la stratégie de sécurité du bus de messages a bloqué la réponse, le délai de réponse a expiré ou la connexion réseau a été rompue.
... sudo [...]: pam_unix (sudo: session): session ouverte pour l'utilisateur root par (uid = 0)

La journalisation de tous les messages silencieux "sans audit" de SElinux peut être activée semodule -DBet désactivée de nouveau semodule -B.
(J'espère que j'écrirai bientôt un module de politique SELinux bientôt pour ce cas ou une méthode de cette réponse pourra être utilisée.)


Merci pour cette information. À partir des informations ici, j'ai pu ensuite trouver un article connexe qui mentionnait la possibilité fprintd(de l'authentification par empreinte digitale) du coupable. Supprimer fprintdet fprintd-pamrésoudre le problème pour moi.
KevinO

@KevinO Heureux que cela vous ait aidé à trouver une solution. Je savais cependant que mon problème était très spécifique et que ma contribution à la question ne devrait porter que sur la méthode permettant de diagnostiquer ou d’exclure un soupçon concernant SELinux.
Hynekcer

Je lui ai absolument donné un +1! C'est le bus de messages qui a conduit à une solution. J'avais regardé sudo lent à quelques reprises, mais le tien était l'indice dont j'avais besoin.
KevinO

1

En examinant le sudoersfichier exemple que j'ai, je pense qu'il est censé y avoir un espace après le NOPASSWD:bit.


J'ai ajouté un espace, mais il a toujours le décalage. Merci pour la suggestion.


1

Après avoir résolu les problèmes d'hôte, assurez-vous d'effacer tout cache DNS défectueux si vous exécutez une application de mise en cache DNS telle que nscd:

/etc/init.d/nscd force-reload

1

Pour moi, c’est krb5-user / config / locales en cours d’installation. J'ai remarqué cela en examinant /var/log/auth.log. Utiliser apt-get remove pour désinstaller ces paquets l'a corrigé. Ne supprimez pas ces paquets si vous êtes sur un ordinateur nécessitant kerberos (pam_krb5) évidemment.


0

Utilisez-vous LDAP pour l'authentification?

Si tel est le cas, vous souhaiterez probablement utiliser une stratégie de liaison souple. Dans /etc/ldap/ldap.conf (ou /etc/ldap.conf):

bind_policy soft

0

On dirait que vous avez une sorte de délai d'attente dans votre chaîne d'authentification. Vérifiez comment sudo tente de s'authentifier et surveillez les goulots d'étranglement.


0

Affaire Systemd

Pour moi, mon système était à court de mémoire et de nombreux processus se sont bloqués. Mon système est basé sur systemd et quelque chose s’est écrasé. Il m'est difficile de me souvenir de tout ce que j'ai fait, mais:

  • systemctl status <any.service> expirerait
  • Je ne pouvais pas sudo reboot(basé sur systemd)

Solution

Un redémarrage a corrigé mon problème, mais pour moi, ce n'était qu'un pansement. Vous devez toujours découvrir pourquoi vous avez manqué de mémoire / bloqué.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.