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.d
Verzeichnis. 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, visudo
um Dateien darin zu bearbeiten. Das heißt, wir verlieren das Recht zur Verwendung, sudo
wenn 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.d
bleiben 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
sudo
zum 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, umroot
die 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 visudo
Befehl 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 -f
installiert 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, sudo
Funktionen 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 visudo
diese Dateien bearbeiten. Sie müssen lediglich den Namen der Datei angeben, die Sie mit der -f
Option 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:
Syntax:Beide
visudo
undvisudo -f
Führen Sie die gleiche Syntaxprüfung durch.Berechtigungen/Eigentum: Als hinzugefügte Funktionzur Unterstützung der Administration großer Systeme, Dateien, unter denen bearbeitet wird,
visudo -f
werden 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/sudoers
wird 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 sudo
eine Datei in ignoriert /etc/sudoers
?
Wenn Ihre /etc/sudoers
Datei die Zeile enthält:
#includedir /etc/sudoers.d
Anschließend sudo
werden die Dateien im Verzeichnis gelesen /etc/sudoers.d
.
Ausnahmen sind:
- Dateien, deren Namen auf enden
~
- 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.conf
oder mysudo.txt
ignoriert 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.d
sind (tatsächlich) verkettet. Sie werden mehrere andere Instanzen dieses Musters in sehen /etc
, wie beispielsweise /etc/cron.d
und /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.