Warum verfügt das System über /etc/sudoers.d? Wie soll ich es bearbeiten?

Warum verfügt das System über /etc/sudoers.d? Wie soll ich es bearbeiten?

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

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/etc/sudoers.dVerzeichnis. Dateien im Verzeichnis sollten ähnliche Funktionen haben wie /etc/sudoers(was bedeutet, dass die obigen Skripte auch in problematisch sind /etc/sudoers.d), und in einem Artikel hieß es jedoch, wir sollten das Verzeichnis nicht verwenden, da wir es nicht verwenden können, visudoum Dateien darin zu bearbeiten. Das heißt, wir verlieren das Recht zur Verwendung, sudowenn wir im Verzeichnis einen Fehler machen.

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

Antwort1

An Dateien vorgenommene Änderungen /etc/sudoers.dbleiben erhalten, wenn Sie das System aktualisieren. Dies kann Benutzersperren bei der Aktualisierung des Systems verhindern. Ubuntu neigt dazu, dieses Verhalten zu mögen. Andere Distributionen verwenden dieses Layout ebenfalls.

Meiner Erfahrung nach sind die Regeln für Dateien in diesem Verzeichnis lockerer als für /etc/sudoers. Dazu gehörten:

  • Fehler in der Datei führten nicht sudozum Abbruch. Die Datei wurde allerdings ignoriert.
  • Die Berechtigungsregeln scheinen weniger streng zu sein. Sie erlauben der entsprechenden Gruppe oder anderen, die Datei zu lesen. Ich glaube nicht, dass das mit möglich war /etc/sudoers. Schreibberechtigungen müssen beschränkt werden, um rootdie Sicherheit zu gewährleisten. Die aktuelle Ubuntu-Version von sudo erlaubt Leseberechtigungen für Gruppen oder andere. (Diese Funktion ermöglicht die Überwachung des sudo-Zugriffs, ohne dass Root-Zugriff erforderlich ist.)

Der visudoBefehl ist standardmäßig nur auf eingestellt /etc/sudoers. Er bearbeitet und überprüft alle Dateien, die Sie mit der Option angeben . Ich verwende diese Funktion, um Dateien zu bearbeiten, die automatisch als oder in -finstalliert werden . Definitionen aus anderen Dateien werden jedoch möglicherweise nicht gefunden. Am besten ist es, die Datei unabhängig zu machen./etc/sudoers/etc/sudoders.d

Die Möglichkeit, eigenständige Dateien zu haben, macht es für eine Anwendung einfach, sudoFunktionen bei der Installation zu aktivieren und sie bei der Deinstallation zu entfernen. Automatisierte Konfigurationstools können diese Funktion ebenfalls nutzen.

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

Antwort2

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

visudo -f /etc/sudoers.d/somefilename

Oder bei Bedarf:

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

Dokumentation

Aus man visudo:

-f sudoers
Geben Sie einen alternativen Speicherort für die Sudoers-Datei an. 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 mit der Erweiterung „.tmp“. Nur im Nur-Überprüfungsmodus kann das Argument für -f „-“ sein, was bedeutet, dass Sudoers von der Standardeingabe gelesen wird.

In Summe:

  1. Syntax:Beide visudoundvisudo -f Führen Sie die gleiche Syntaxprüfung durch.

  2. Berechtigungen/Eigentum: Als hinzugefügte Funktionzur Unterstützung der Administration großer Systeme, Dateien, unter denen bearbeitet wird, visudo -fwerden nicht auf Eigentumsrechte oder Berechtigungen überprüft: Dies ermöglicht die Syntaxprüfung einer Datei offline oder als Teil eines Revisionskontrollsystems.

Warum verwenden/etc/sudoers.d/

Normalerweise /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 integriert werden. Indem Sie Ihre lokalen Änderungen in einer Datei im /etc/sudoers.d/Verzeichnis ablegen, vermeiden Sie diesen manuellen Schritt und Aktualisierungen können automatisch durchgeführt werden.

Wann wird sudoeine Datei in ignoriert /etc/sudoers?

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

#includedir /etc/sudoers.d

Anschließend 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) aus Komfortgründen für Paketmanager und (b) damit Sicherungsdateien von Editoren ignoriert werden.

Wichtig: Beachten Sie, dass die oben genannte Ausnahme 2 recht allgemein ist und bedeutet, dass scheinbar sinnvolle Dateinamen wie mysudo.confoder mysudo.txtignoriert werden, da .im Namen enthalten ist.

Antwort3

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 an vorzunehmen /etc/sudoers, die fragil sein könnten.

Die Dateien in /etc/sudoers.dsind (tatsächlich) verkettet. Sie werden mehrere andere Instanzen dieses Musters in sehen /etc, wie beispielsweise /etc/cron.dund /etc/logrotate.d.

Antwort4

Nur ein kurzer Nachtrag zu jeder allgemeinen Antwort ... keine der anderen Antworten hat mein Problem behoben, nämlich dass die Reihenfolge wichtig ist.

Wenn Ihre Zeilen in sudoers, aber nicht in sudoers.d funktionieren, versuchen Sie, #include zu verschieben oder die Reihenfolge Ihrer sudoers.d-Dateien zu ändern (indem Sie ihnen eine Nummer voranstellen). Es scheint, dass das Spezifischste zuerst in der Datei stehen sollte.

Ich hatte so etwas wie:

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

Und das zweite hatte keine Wirkung, da das 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 Verzeichnisses sudoers.d nicht in einer einzelnen Datei befand.

verwandte Informationen