Sudoer - einfache Erklärung erbeten

24

Jedes Mal, wenn ich in der Lage sein möchte, etwas auszuführen, das zu oft ausgeführt werden muss, muss ich sudoerdie Formatierung von googeln /etc/sudoers, um mich erneut daran zu erinnern, was genau der richtige Weg ist, es zu schreiben.

Jetzt sehe ich verschiedene Schreibstile in meiner sudoersDatei, was die Folge verschiedener Google-Ergebnisse im Laufe der Monate ist. Ich habe auch bemerkt, dass das zweite Beispiel (unten) in XFCE zu funktionieren scheint, aber nicht in Cinnamon (Gnome 3). Dies könnte völlig unabhängig sein, aber dennoch möchte ich ein für alle Mal wissen, wie die korrekte Grammatik der Sudoer-Zeile lautet und worin der Unterschied zwischen den angegebenen Beispielen besteht.

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Und wofür sind alle da ALL? Ein Benutzer, ein Befehl, aber ich muss das ALLSchlüsselwort bis zu dreimal verwenden? Mache ich das falsch?

Natürlich Weglassen NOPASSWD:macht Sie Ihr Passwort eingeben , bevor Sie dürfen auf den Befehl, sondern ein Punkt der Verwirrung ist die Verwendung von =und :kann für den letzten Befehl, ist Gegenstand der Leitung von entweder vorangestellt werden =, :, , oder ), verwirrende Grammatik für ähnliche Semantik.

Redsandro
quelle
3
Ich bin auch sehr frustriert von der sudoersSyntax. Noch frustrierender war das Lesen der Manpage: Sie beschreibt die sogenannte prägnante und exakte EBNF-Sprache, Beispiele sind erschöpfend lang. Daher bin ich nicht überrascht, hier so viele Threads zu dieser Datei zu finden.
m-ric
1
Danke dafür. Wollte diese Frage stellen, seit ich vor einigen Jahren auf eine Sudoers-Datei gestoßen bin :-)
vahidg

Antworten:

35

Es ist mehr als nur ein Benutzer und ein Befehl:


redsandro host=(user:group) tag:commands
  • hostGibt die Hostnamen an, für die diese Zeile gültig ist. Sofern Sie die asudoers-Datei nicht für verschiedene Hosts freigeben, für die unterschiedliche Regeln erforderlich sind, ist der spezielle Wert ALL"all hosts" eine gute Wahl.

  • userGibt an, welche Benutzer Sie mit den -uOptionen zum Ausführen des Befehls verwenden können. Wenn Sie dies weglassen, können Sie die -uOption nicht verwenden .

  • groupGibt an, welche Gruppen Sie mit den -gOptionen verwenden können. Wenn Sie es weglassen, können Sie die -gOption nicht verwenden .

Beides userund groupden besonderen Wert ALLals "alle Benutzer / Gruppen" verstehen

Wenn Sie das ganze weglassen , (user:group)was können Sie nicht verwenden , -uund -gdoch nur den Befehl als root ausführen.

  • tag Hier können Sie einige Optionen angeben, z NOPASSWD

So mit dem ersten Beispiel können Sie den Befehl als root ausführen , aber nicht verwenden können -uund -ges wie jeder anderen Benutzer oder eine Gruppe zu laufen.

In Beispiel 2 können Sie den Befehl als root -uausführen oder ihn als anderen Benutzer ausführen.

Mit 3 können Sie den Befehl als root oder Verwendung ausführen -uoder -gden Befehl wie jeder andere Benutzer oder eine Gruppe laufen.

Florian Diesch
quelle
Genau das habe ich gesucht. Ich habe Ihre Antwort akzeptiert und danke Ihnen für Ihre Mühe.
Redsandro
1
Endgültiger Gedanke, kann ich 127.0.0.1oder localhostwie hostfür triviale zusätzliche Sicherheit verwenden?
Redsandro
5
In der Manpage steht: 'Note sudo überprüft nur die tatsächlichen Netzwerkschnittstellen. Dies bedeutet, dass die IP-Adresse 127.0.0.1 (localhost) niemals übereinstimmt. Außerdem stimmt der Hostname "localhost" nur dann überein, wenn dies der tatsächliche Hostname ist, was normalerweise nur bei nicht vernetzten Systemen der Fall ist. '
Florian Diesch
1
Vielen Dank. Kein Hostname für mich, zumal ich die sudoers-Datei auf mehrere Rechner kopieren möchte. ALLes ist.
Redsandro
9

Nehmen wir diesen auseinander:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro ist der Benutzername, dem wir die Erlaubnis geben. Setzen Sie ein% nach vorne, damit es für eine Gruppe gilt.

ALL ist ein Name für diese Regel. Sudoer können viel mehr als nur globale Berechtigungen erteilen. Hier wird es allerdings kompliziert.

= braucht keine Erklärung

ALL: ALL lautet (who_to_run_it_as: what_group_to_run_it_as). Auf diese Weise können Sie die Ausführung eines Befehls zulassen, jedoch nur im Kontext eines bestimmten Benutzers oder einer bestimmten Gruppe.

NOPASSWD: Weist an, die Passwortabfrage auszuschalten.

Mit / path / to / command können Sie bestimmte Befehle path_to_commmand und another_command angeben

Beachten Sie, dass sudo hauptsächlich von Heimanwendern verwendet wird , um zu Root-Berechtigungen zu eskalieren. Es kann jedoch verwendet werden, um den Zugriff auf bestimmte Befehle auf viel detailliertere Weise zu steuern.

RobotHumans
quelle
1
Danke für den Zusatz %und die , another_commandHinweise. Jetzt verstehe ich die %wheelZeile in der Fedora-basierten Distribution.
Redsandro