sudo-Befehl, der versucht, nach dem Hostnamen zu suchen

15

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.

prathmesh.kallurkar
quelle
@OliverSalzburg Ich habe die Frage richtig umformuliert. Bitte lassen Sie mich wissen, wenn etwas nicht stimmt
prathmesh.kallurkar

Antworten:

15

Die /etc/sudoersDatei 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:

%sudo    kaagini=(ALL) ALL

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/hostsdavon abhängt, dass er korrekt ist. Deshalb schlägt er fehl, wenn er nicht richtig ist.

Es könnte argumentiert werden, dass sudoes nicht nötig ist, eine Namenssuche durchzuführen, wenn der Host-Teil ALL=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.

Paul
quelle
Danke für die Antwort. Können Sie noch einmal auf die verteilte Sudoers-Datei zugreifen? Siehe, ich habe ein Betriebssystem auf MaschineA ausgeführt. Sollte die Berechtigungsdatei (/ etc / sudoers) für dieses Betriebssystem auf anderen Computern gespeichert werden. Oder Ihre Antwort bedeutet zu sagen, dass der Befehl sudo etwas sagen kann, wie Benutzer John von Maschine A sudo kann, aber nicht von Maschine B?
prathmesh.kallurkar
Es ist wirklich zur Erleichterung der Wartung. sudo liest nur / etc / sudoers, 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, haben jedoch weiterhin eine genaue Übersicht darüber, was Benutzer auf jedem Computer tun können.
Paul
Noch eine Frage ... muss der Serveradministrator die neue sudoers-Datei jedes Mal scp, wenn sich die Haupt-sudoers-Datei ändert, oder bietet sudo eine Möglichkeit, die sudoers-Datei über das Netzwerk zu verwalten?
prathmesh.kallurkar
@ prathmesh.kallurkar Nein, es gibt keine integrierte Verteilungsmethode, aber dies ist Linux, also ist dies normal. Sie würden rsync oder scp oder ein anderes Tool verwenden, um diesen Teil zu erledigen.
Paul
1
Ich halte das für einen Fehler (wenn es nur ALLE Regeln gibt, muss sudo seinen Hostnamen nicht kennen) und habe daher bugzilla.sudo.ws/show_bug.cgi?id=916
Matthias Urlichs
1

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:

Defaults !fqdn

Fügen Sie diese Zeile in die /etc/sudoersDatei ein

kjones
quelle
-3

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 .

Felipe Alvarez
quelle
3
Können Sie Ihre Antwort erweitern, um zu erklären, was Marionette ist, wo Sie sie finden und wie Sie sie verwenden, um das Problem zu lösen? Aus der Überprüfungswarteschlange
fixer1234
2
Bitte lesen Sie Wie empfehle ich Software, um einige Tipps zu erhalten, wie Sie Software empfehlen sollten. Sie sollten mindestens einen Link, einige zusätzliche Informationen zur Software selbst und zur Verwendung zur Lösung des Problems in der Frage angeben.
DavidPostill