Récemment, j'ai changé le fichier sudoers et le nom d'hôte via / etc / hostname. Après avoir modifié ces fichiers, ma commande sudo prend beaucoup de temps. En outre, il indique sudo incapable de résoudre l'hôte kaagini (nom d'hôte de ma machine).
Pourquoi sudo doit-il connaître le nom d'hôte pour autoriser quelque chose ??
Mon fichier sudoers a une commande "Defaults env_reset". J'ai vu des questions similaires, mais le contexte n'est pas une connexion à distance ici. L'erreur s'affiche sur un hôte local.
La recherche initiale du problème indique que le fichier / etc / hosts doit avoir le nom d'hôte réel pour 127.0.0.1. Cela a résolu mon problème. Mais ma vraie question est: pourquoi avons-nous besoin de cela pour sudo ?? Si le sudo fonctionne quel que soit le lieu de connexion.
Réponses:
Le
/etc/sudoers
fichier est conçu pour pouvoir être distribué sur plusieurs serveurs. Pour ce faire, chaque autorisation dans le fichier a une partie hôte.Il est généralement défini sur
ALL=
ce qui signifie que l'autorisation est valide pour n'importe quel serveur, mais il peut être défini sur des hôtes spécifiques:Pour que sudo sache si cette règle doit être appliquée, il doit rechercher l'hôte sur lequel il s'exécute. Il utilise un appel qui repose sur le fait d'
/etc/hosts
être correct, c'est pourquoi il échoue s'il n'est pas correct.On pourrait faire valoir qu'il
sudo
n'a pas besoin de se soucier de faire une recherche de nom si la partie hôte est définie surALL=
pour toutes les autorisations, mais cela ne fonctionne tout simplement pas de cette façon - il semble déterminer où il s'exécute avant de traiter les règles .C'est vraiment pour faciliter la maintenance car sudo ne lit que / etc / sudoers pour voir ce que l'utilisateur peut faire sur la machine actuelle. Mais en tant qu'administrateur avec 100 serveurs, cela peut nécessiter la maintenance de 100 fichiers / etc / sudoers différents. Étant donné que sudoers a une partie hôte dans les autorisations, vous pouvez conserver un seul fichier sudoers et le distribuer à toutes les machines, tout en conservant une granularité sur ce que les utilisateurs peuvent faire sur chaque machine.
la source
Grâce au rapport de bogue lié déposé par Matthias Urlichs dans un autre commentaire, la commande suivante a résolu le problème pour moi:
Placez cette ligne dans le
/etc/sudoers
fichierla source
Puppet est un logiciel de gestion de configuration capable de configurer automatiquement une flotte de serveurs en lisant les fichiers Puppet Manifests. Un tel fichier pourrait inclure une définition de votre fichier / etc / sudoers, qui peut ensuite être poussé vers tous vos "agents" de marionnettes depuis votre "maître" de marionnettes. Tous les hôtes obtiendront alors la même copie de votre fichier / etc / sudoers, qui peut (et devrait) inclure des définitions HOST, vous pouvez donc accorder à certains utilisateurs certaines commandes sur certains hôtes (mais pas sur d'autres).
la source