Warum hat das System /etc/sudoers.d? Wie soll ich es bearbeiten?

48

Letztes Mal fragte ich nach dem Risiko dieser (in / etc / sudoers):

    user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
    %group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Während ich über dieses Problem nachdachte , fand ich das Verzeichnis /etc/sudoers.d . Dateien im Verzeichnis sollten ähnliche Funktionen haben wie / etc / sudoers (was bedeutet, dass die obigen Skripte auch in /etc/sudoers.d immer noch problematisch sind). In einem Artikel wurde jedoch darauf hingewiesen, dass wir das Verzeichnis nicht verwenden sollten, da wir keine visudoDateien bearbeiten können es. Das heißt, wir verlieren das Nutzungsrecht, sudowenn wir im Verzeichnis einen Fehler machen.

Wenn das stimmt, warum haben wir /etc/sudoers.d ? Oder haben wir eine gute Möglichkeit, Dateien in /etc/sudoers.d zu bearbeiten ?

aob
quelle

Antworten:

45

An den Dateien vorgenommene Änderungen /etc/sudoers.dbleiben erhalten, wenn Sie das System aktualisieren. Dies kann verhindern, dass Benutzer beim Upgrade des Systems gesperrt werden. Ubuntu neigt dazu, dieses Verhalten zu mögen. Andere Distributionen verwenden dieses Layout ebenfalls.

Ich habe die Erfahrung gemacht, dass die Regeln für Dateien in diesem Verzeichnis strenger sind als für /etc/sudoers. Dies beinhaltet:

  • Fehler in der Datei sudoscheiterten nicht. Die Datei wurde jedoch ignoriert.
  • Die Berechtigungsregeln scheinen weniger streng zu sein. Hiermit kann die betreffende Gruppe oder eine andere Person die Datei lesen. Ich glaube nicht, dass das mit möglich war /etc/sudoers. Schreibberechtigungen müssen auf rootdie Aufrechterhaltung der Sicherheit beschränkt sein. Die aktuelle Ubuntu-Version von sudo erlaubt Leseberechtigungen für Gruppen oder andere. (Mit dieser Funktion kann der sudo-Zugriff überwacht werden, ohne dass Root-Zugriff erforderlich ist.)

Der visudoBefehl hat nur den Standardwert /etc/sudoers. Jede Datei, die Sie mit dieser -fOption angeben, wird bearbeitet und überprüft . Mit dieser Funktion bearbeite ich Dateien, die automatisch als /etc/sudoersoder in installiert werden /etc/sudoders.d. Es ist jedoch möglich, dass Definitionen aus anderen Dateien nicht gefunden werden. Es ist am besten, die Datei unabhängig zu machen.

Durch die Möglichkeit, eigenständige Dateien zu haben, kann eine Anwendung die sudoFunktion für die Installation aktivieren und sie entfernen, wenn sie deinstalliert wird. Automatisierte Konfigurationstools können diese Funktion ebenfalls verwenden.

Ich habe diese Funktion verwendet, um Änderungen zu isolieren, die erforderlich sind, um bestimmten Benutzergruppen auf bestimmten Systemen Zugriff zu gewähren.

BillThor
quelle
1
Die beiden Eigenschaften von sudoers.d, die Sie erwähnt haben, scheinen wirklich wichtig und hilfreich zu sein. Danke!
aob
Siehe meine Antwort und Warnung darüber, warum dies eigentlich keine Merkmale von sudoers.d sind.
Dragon788
1
Stimme überhaupt nicht der Aussage zu, dass Fehler in der Datei nicht sudozum Scheitern geführt haben. Ich habe sudo auf RHEL mit falscher Syntax in einer Datei von /etc/sudoers.d gebrochen. Dies war mit erheblichem Aufwand zu korrigieren und ich denke, die Empfehlung sollte lauten visudo -f, diese Dateien immer zu bearbeiten.
79E09796
@ 79E09796 Ich habe Dateien in /etc/sudoers.d beschädigt, ohne Probleme mit Regeln in anderen Dateien zu verursachen. YMMV. Wenn Sie die Sudo-Konfiguration, die Sie in das System bringt, unterbrechen, treten Probleme auf. Wenn Sie Zugriff auf einen Neustart des Systems haben, ist es relativ einfach, einen Neustart im Wiederherstellungsmodus durchzuführen und die Datei zu reparieren. Ich bin damit einverstanden, dass es die beste Vorgehensweise ist, Änderungen an Sudo-Konfigurationsdateien mit visodo zu bearbeiten oder zumindest zu überprüfen.
BillThor
62

Ja, Sie können visudodiese Dateien bearbeiten. Sie müssen lediglich den Namen der Datei angeben, die Sie mit der -fOption bearbeiten möchten . Zum Beispiel:

visudo -f /etc/sudoers.d/somefilename

Oder wenn nötig:

sudo visudo -f /etc/sudoers.d/somefilename

Dokumentation

Von man visudo:

-f sudoers
Geben Sie den Speicherort der sudoers-Datei an und ändern Sie ihn. Mit dieser Option bearbeitet (oder überprüft) visudo die Sudoers-Datei Ihrer Wahl anstelle der Standarddatei / etc / sudoers. Die verwendete Sperrdatei ist die angegebene sudoers-Datei, an die ".tmp" angehängt ist. Nur im Nur-Check-Modus kann das Argument für -f "-" sein, was anzeigt, dass Sudoer von der Standardeingabe gelesen werden.

In Summe:

  1. Syntax: Beide visudound visudo -f führen dieselbe Syntaxprüfung durch .

  2. Berechtigungen / Besitz: Als zusätzliche Funktion zur Unterstützung der Verwaltung großer Systeme werden Dateien, die unter bearbeitet wurden, visudo -fnicht auf Besitz oder Berechtigungen überprüft. Dies ermöglicht die Syntaxprüfung einer Datei offline oder als Teil eines Revisionskontrollsystems.

Warum verwenden /etc/sudoers.d/

In der Regel /etc/sudoerswird dies vom Paketmanager Ihrer Distribution gesteuert. Wenn Sie Änderungen an dieser Datei vorgenommen haben und der Paketmanager sie aktualisieren möchte, müssen Sie die Änderungen manuell überprüfen und genehmigen, wie sie in die neue Version eingefügt werden. Indem Sie Ihre lokalen Änderungen in eine Datei im /etc/sudoers.d/Verzeichnis einfügen, vermeiden Sie diesen manuellen Schritt und können Aktualisierungen automatisch durchführen.

Wann wird sudoeine Datei ignoriert /etc/sudoers?

Wenn Ihre /etc/sudoersDatei die Zeile enthält:

#includedir /etc/sudoers.d

Dann sudowerden die Dateien im Verzeichnis gelesen /etc/sudoers.d.

Ausnahmen sind:

  1. Dateien, deren Namen auf enden ~
  2. Dateien, deren Namen ein .Zeichen enthalten

Dies geschieht (a) zum Vorteil der Paketmanager und (b), damit Sicherungsdateien von Editoren ignoriert werden.

John1024
quelle
Danke, aber ich habe einen Zweifel. Ist visudo -fsicher
aob
5
Ja, die visudo -fBearbeitung erfolgt auf sichere Weise wie gewohnt visudo. Deshalb haben wir visudound warum es die -fOption bietet .
John1024
Toller Hinweis, wie die Berechtigungen bei der Verwendung ignoriert werden, -fda dies dazu führen kann, dass jemand sie nach /etc/sudoers.d/ kopiert, ohne sie zu überprüfen.
Dragon788
1
DANKE für den Ausnahmeabschnitt. Ich habe meine Datei so benannt /etc/sudoers.d/mysudorules.sudound konnte für mein ganzes Leben nicht herausfinden, warum die darin enthaltenen Regeln nicht angewendet wurden, bevor ich Ihre Antwort gelesen habe.
Zaroth
1
Vielen Dank, dass Sie die Ausnahmen erwähnt haben. Meine Datei unter hat /sudoers.d/mysite.co.uknicht funktioniert und nach dem Umbenennen mysitefunktioniert es! :)
J86
20

Warum haben wir /etc/sudoers.d?

Weil es für automatisierte Tools (wie Chef oder Puppet) einfacher ist, einzelne Dateien in dieses Verzeichnis abzulegen, als Änderungen vorzunehmen /etc/sudoers, die möglicherweise zerbrechlich sind.

Die Dateien in /etc/sudoers.dsind (in der Tat) verkettet. In werden mehrere andere Instanzen dieses Musters angezeigt /etc, z. B. /etc/cron.dund /etc/logrotate.d.

Roger Lipscombe
quelle
Ich wusste nicht, dass es ähnliche Verzeichnisse gibt. Danke.
aob
14

Ein weiterer Vorteil der Verwendung, visudo -fwie in einigen Antworten erwähnt, besteht darin, dass es eine entsprechende Option gibt -coder --checkdass überprüft wird, ob in einer sudoers.d-Datei oder in einer anderen Datei, die Sie möglicherweise in sudoers.d einfügen möchten, keine ungültigen Informationen enthalten sind. Dies ist in den genannten Fällen mit automatisierten Tools WIRKLICH praktisch, da Sie z

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

Dies überprüft die Datei im Hintergrund (keine Ausgabe aufgrund von -q) und nur, wenn dies KEIN Fehler zurückgibt (Exit 1 bedeutet eine ungültige sudoers-Datei), kopiert es die Datei in sudoers.d, auf diese Weise können Sie die Datei und erstellen Arbeiten Sie daran, ohne es gleich beim ersten Mal richtig machen zu sudo visudo -f /etc/sudoers.d/myfilemüssen.

Auch ein Wort der Vorsicht in Bezug auf diese Aussagen aus den anderen Antworten.

Ich habe die Erfahrung gemacht, dass die Regeln für Dateien in diesem Verzeichnis strenger sind als für / etc / sudoers. Dies beinhaltet:

Fehler in der Datei führten nicht zum Fehlschlagen von sudo. Die Datei wurde jedoch ignoriert. Die Berechtigungsregeln scheinen weniger streng zu sein. Ich erlaube der entsprechenden Gruppe, die Datei zu lesen. Ich glaube nicht, dass das mit / etc / sudo möglich ist.

Dateien in /etc/sudoers.d müssen der gleichen Syntax wie / etc / sudoers folgen, da das System unter den Deckblättern einfach alle Dateien mit der letzten in "winning" zusammenfügt, wenn es mehrere Einträge für dieselbe gibt einzigartige Einstellung.

Wenn die Berechtigungen für Dateien in /etc/sudoers.d/ furchtbar falsch (weltweit beschreibbar) sind, werden sie möglicherweise ignoriert. Dies kann dazu führen, dass ungültige Dateien übersehen werden. Andernfalls können Sie den sudoBefehl ernsthaft unterbrechen, indem Sie ungültige Sudoers verwenden. d-Datei mit korrekten Berechtigungen.

Sie können zulassen, dass die sudoers-Dateien von der Welt gelesen werden können, wenn Sie versehentlich "other" die Schreibberechtigung erteilen, die Sie benötigen, um als anderer Benutzer oder von einem Root-Terminal aus sudo zu schreiben, und diesen Befehl ausführen. Dies kann auch scheitern, wenn die Datei nicht root gehört: root.

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

Ich habe gerade bestätigt, dass ich, wenn ich chmod o+w /etc/sudoers.d/vagrantnicht länger sudo als vagabundierender Benutzer ausführen kann, zur Eingabe meines Kennworts aufgefordert werde und dann fehlschlägt.

Als ich ausgeführt wurde sudo -l, um die angewendeten Befehlsberechtigungen als ein anderer gültiger sudo-Benutzer anzuzeigen, erhielt ich auch eine Warnung zu den Dateiberechtigungen. Dies ist der gleiche Befehl, den ich verwendet habe, um zu bestätigen, dass der "vagabundierende" Benutzer sudo verloren hat, als ich o+wBerechtigungen auf die Datei angewendet habe , die diesen Benutzer sudo-Berechtigungen erteilt hat.

dragon788
quelle
3

Nur eine kurze Ergänzung zu einer allgemeinen Antwort ... Keine der anderen Antworten hat mein Problem behoben.

Wenn Ihre Zeilen in sudoers, aber nicht in sudoers.d funktionieren, versuchen Sie, das Feld #include zu verschieben oder die Reihenfolge Ihrer sudoers.d-Dateien zu ändern (indem Sie eine Zahl voranstellen). Es scheint, dass die spezifischste Sache zuerst in der Akte sein sollte.

Ich hatte so etwas wie:

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

Und der zweite hatte keine Wirkung, da der erste bereits übereinstimmte. NOPASSWD ist keine Bedingung, sondern eine Möglichkeit, die Aktion zu ändern.

Und es war nicht offensichtlich, weil es sich aufgrund des sudoers.d-Verzeichnisses nicht in einer einzelnen Datei befand.

Peter
quelle