Vor kurzem habe ich die sudoers-Datei und den Hostnamen über / etc / hostname geändert. Nach dem Ändern dieser Dateien nimmt mein sudo-Befehl viel Zeit in Anspruch. Außerdem heißt es, dass sudo Host-Kaagini (Hostname meines Computers) nicht auflösen kann.
Warum muss sudo den Hostnamen kennen, um die Erlaubnis für etwas zu erteilen?
Meine sudoers-Datei hat 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.
Das anfängliche Googeln nach dem Problem besagt, dass die Datei / etc / hosts den tatsächlichen Hostnamen für 127.0.0.1 haben muss. Dies hat mein Problem behoben. Aber meine eigentliche Frage ist: Warum brauchen wir das für Sudo? Sollte der Sudo unabhängig vom Ort der Anmeldung funktionieren.
Antworten:
Die
/etc/sudoers
Datei kann auf mehrere Server verteilt werden. Um dies zu erreichen, hat jede Berechtigung in der Datei einen Host-Teil.Dies ist normalerweise so eingestellt,
ALL=
dass die Berechtigung für jeden Server gültig ist. Sie kann jedoch auf bestimmte Hosts festgelegt werden:Damit sudo weiß, ob diese Regel angewendet werden soll, muss es den Host suchen, auf dem es ausgeführt wird. Es wird ein Aufruf verwendet, der
/etc/hosts
davon abhängt, dass er korrekt ist. Deshalb schlägt er fehl, wenn er nicht richtig ist.Es könnte argumentiert werden, dass
sudo
es nicht nötig ist, eine Namenssuche durchzuführen, wenn der Host-TeilALL=
für alle Berechtigungen festgelegt ist, aber es funktioniert einfach nicht so - es scheint zu funktionieren, wo es ausgeführt wird, bevor die Regeln verarbeitet werden .Dies dient wirklich der einfachen Wartung, da sudo nur / etc / sudoers liest, um zu sehen, was der Benutzer auf dem aktuellen Computer tun kann. Als Administrator mit 100 Servern sind möglicherweise 100 verschiedene / etc / sudoers-Dateien erforderlich, um sie zu verwalten. Da sudoers einen Host-Teil in den Berechtigungen hat, können Sie eine einzelne sudoers-Datei verwalten und an alle Computer verteilen, ohne jedoch genau zu wissen, was Benutzer auf jedem Computer tun können.
quelle
Dank des verknüpften Fehlerberichts, den Matthias Urlichs in einem anderen Kommentar eingereicht hat, hat der folgende Befehl das Problem für mich gelöst:
Fügen Sie diese Zeile in die
/etc/sudoers
Datei einquelle
Puppet ist eine Konfigurationsverwaltungssoftware, mit der eine Serverflotte automatisch durch Lesen der Puppet Manifests-Dateien konfiguriert werden kann. Eine solche Datei könnte eine Definition Ihrer / etc / sudoers-Datei enthalten, die dann von Ihrem Puppen- "Master" an alle Ihre Marionetten- "Agenten" gesendet werden kann. Dann erhalten alle Hosts dieselbe Kopie Ihrer Datei / etc / sudoers, die HOST-Definitionen enthalten kann (und sollte), sodass Sie einigen Benutzern einige Befehle auf einigen Hosts (aber nicht auf anderen) erteilen können .
quelle