Vor Kurzem habe ich die sudoers-Datei und den Hostnamen über /etc/hostname geändert. Nach der Änderung dieser Dateien dauert mein sudo-Befehl sehr lange. Außerdem heißt es, dass sudo den Host kaagini (Hostname meines Computers) nicht auflösen kann.
Warum muss sudo den Hostnamen kennen, um die Berechtigung für etwas zu erteilen?
Meine Sudoers-Datei enthält den Befehl „Defaults env_reset“. Ich habe einige ähnliche Fragen gesehen, aber der Kontext ist hier kein Remote-Login. Der Fehler wird auf einem lokalen Host angezeigt.
Beim ersten Googeln nach dem Problem stellt sich heraus, dass die Datei /etc/hosts den tatsächlichen Hostnamen für 127.0.0.1 enthalten muss. Das hat mein Problem behoben. Aber meine eigentliche Frage ist: Warum verlangen wir das für sudo? Sollte sudo unabhängig vom Ort der Anmeldung funktionieren?
Antwort1
Die /etc/sudoers
Datei ist so konzipiert, dass sie auf mehrere Server verteilt werden kann. Um dies zu erreichen, verfügt jede Berechtigung in der Datei über einen Host-Teil.
Dies ist normalerweise auf eingestellt, ALL=
was bedeutet, dass die Berechtigung für alle Server gültig ist. Es kann jedoch auch auf bestimmte Hosts eingestellt werden:
%sudo kaagini=(ALL) ALL
Damit sudo weiß, ob diese Regel angewendet werden soll, muss es den Host nachschlagen, auf dem es ausgeführt wird. Es verwendet einen Aufruf, der auf die /etc/hosts
Richtigkeit angewiesen ist, weshalb er fehlschlägt, wenn er nicht korrekt ist.
Man könnte argumentieren, dass sudo
eine Namenssuche nicht notwendig ist, wenn der Host-Teil auf „ ALL=
für alle Berechtigungen“ eingestellt ist, aber so funktioniert es einfach nicht – es scheint herauszufinden, wo es ausgeführt wird, bevor die Regeln verarbeitet werden.
Dies dient in erster Linie der Wartungsfreundlichkeit, da sudo nur /etc/sudoers liest, um zu sehen, was der Benutzer auf der aktuellen Maschine tun kann. Als Administrator mit 100 Servern kann dies jedoch die Wartung von 100 verschiedenen /etc/sudoers-Dateien erfordern. Da sudoers einen Host-Teil in den Berechtigungen hat, können Sie eine einzelne sudoers-Datei verwalten und an alle Maschinen verteilen und dennoch präzise festlegen, was Benutzer auf jeder Maschine tun können.
Antwort2
Danke an dieverlinkter Fehlerberichtvon Matthias Urlichs in einem anderen Kommentar eingereicht, der folgende Befehl hat das Problem für mich gelöst:
Defaults !fqdn
Fügen Sie diese Zeile in die /etc/sudoers
Datei ein
Antwort3
Marionetteist eine Konfigurationsmanagement-Software, die in der Lage ist, eine Flotte von Servern automatisch zu konfigurieren, indem sie Puppet-Manifestdateien liest. Eine solche Datei könnte eine Definition Ihrer /etc/sudoers-Datei enthalten, die dann von Ihrem Puppet-„Master“ an alle Ihre Puppet-„Agenten“ gesendet werden kann. Dann erhalten alle Hosts dieselbe Kopie Ihrer /etc/sudoers-Datei, die HOST-Definitionen enthalten kann (und sollte), sodass Sie einigen Benutzern einige Befehle erteilen könneneinige Gastgeber(aber nicht auf anderen).