Wie soll sudo angewendet werden?

24

Ich habe es schon einmal mit der Konfiguration versucht sudo, aber ich hatte nicht allzu viel Glück damit. Wie unterscheidet es sich von su -l -c "x"? Es scheint, dass man über die Konfigurationsdatei festlegen kann, dass ein Benutzer nur auf bestimmte Befehle und mehr zugreifen kann. Ich dachte immer daran sudo, einen Befehl als einen anderen Benutzer oder eine andere Gruppe zu definieren. Da Distributionen wie Ubuntu und Mint es einfach machen, indem sie dem Hauptbenutzer im Wesentlichen einen einfachen Zugang zu root über ein Passwort ermöglichen, bin ich mir nicht sicher, wie die beabsichtigte Verwendung aussehen soll.

Wie füge ich der sudo-Datei einen Benutzer hinzu, der die Berechtigung erhält, nur bestimmte Befehle im Stammverzeichnis auszuführen? Ich möchte auch keine Sicherheitslücken öffnen.

Naftuli Kay
quelle

Antworten:

16

Für die Grundoperation - Ausführen von Befehlen als root - ist der sichtbarste Unterschied zwischen sudo und su, dass sudo das Passwort des aufrufenden Benutzers (dh Ihr Passwort) erfordert, während su das Passwort des Zielbenutzers (dh das root-Passwort) erfordert. Die Auswirkungen auf die Sicherheit wurden bereits in einer früheren Frage ausführlich erörtert: Welches ist der sicherste Weg, um Root-Berechtigungen zu erhalten: sudo, su oder login? .

Sudo bietet zusätzliche Funktionen, die über die von su hinausgehen. Insbesondere können Sie, sobald Sie das Kennwort eines Benutzers haben, einen beliebigen Befehl als dieser Benutzer ausführen. Auf der anderen Seite kann sudo so konfiguriert werden, dass der aufrufende Benutzer nur bestimmte Befehle als ein anderer Benutzer ausführen kann. Dies ist möglich, weil sudo keine Authentifizierung erfordert (außer vielleicht durch Eingabe Ihres Passworts zu bestätigen, dass Sie es sind - dies unterscheidet sich jedoch geringfügig von der Authentifizierung Ihres Benutzers für eine Aufgabe).

Sie ändern die sudo-Konfiguration, indem Sie den visudoBefehl als root ausführen (bearbeiten Sie die Konfiguration niemals direkt). Stellen Sie sicher, dass die Umgebungsvariable EDITORoder VISUALauf Ihren bevorzugten Editor eingestellt ist. Andernfalls erhalten Sie möglicherweise einen unbekannten Editor. Die sudoersManpage ist etwas knapp, hat aber Beispiele. Verwenden Sie die folgenden Zeilen, um dem Benutzer bobdie Ausführung /bin/foo(mit einer beliebigen Anzahl von Argumenten) und /bin/bar --safe(jedoch nicht mit einem anderen Argument) als rootzu ermöglichen:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
Gilles 'SO - hör auf böse zu sein'
quelle
2
sudoist eine tolle Erfindung
Tshepang
1
Ob für sudo das Root-Passwort oder das Root-Passwort erforderlich ist, hängt von der Konfiguration ab. Es kann so oder so eingerichtet werden.
Jonathan M Davis
3
@ Tshepang Amen, Bruder. Wenn ich das root-Passwort freigeben und den Support-Technikern erklären müsste, wie man SU macht und nicht / irgendetwas / anderes macht, als apache2ctl gracefulich denke, würde ich es vorziehen, meine Handgelenke aufzuschneiden und es hinter mich zu bringen.
Shadur
6

Der größte Unterschied ist, dass sudoSie kein root-Passwort benötigen, um einen Befehl als root auszuführen, wie Sie es für tun würden su. Sie benötigen das root-Passwort, um jemanden zur sudoersDatei hinzuzufügen, aber danach kann diese Person alle oder einige (wenn Sie es eingeschränkt haben) als root ausführen, ohne ein weiteres Passwort zu benötigen.

Der andere Unterschied besteht darin, dass Sie, wie Sie bereits bemerkt haben, sudoviel genauer steuern können, welche Befehle ausgeführt werden können.

Einzelheiten zum Format der ausgeführten sudoersDatei man sudoers. Dort finden Sie Beispiele dafür, dass nur bestimmte Befehle als root ausgeführt werden dürfen. Die Grundstruktur jeder Zeile ist:

user_list host_list = cmd_list

cmd_list kann Details darüber enthalten, zu welchem ​​Benutzer der echte Benutzer wechseln darf. Sie können beispielsweise zulassen, dass ein Webmaster zu wwwroot wechselt, um Apache neu zu starten, aber nicht zu root. Es kann auch andere Optionen enthalten, z. B. ob das Benutzerpasswort vor dem Wechsel erforderlich ist (dies ist die Standardeinstellung).

Eine Beispielzeile könnte sein:

joe  ALL=(ALL) ALL

das heißt: lass joe jeden befehl auf jedem host als jeden benutzer ausführen. Eine engere Linie könnte sein:

joe  ALL=(operator) /usr/local/ops/

das heißt: lass joe jeden befehl im verzeichnis / usr / local / ops als benutzer "operator" ausführen.

Es gibt viele Beispiele am Ende der sudoers-Manpage.

Sie sollten /etc/sudoersmit dem Befehl bearbeiten visudo. Dies prüft, ob die Datei legal ist und verhindert, dass Sie sie versehentlich beschädigen.

Dave Jennings
quelle
Ob bei der Verwendung von sudo ein Kennwort erforderlich ist oder nicht, hängt ganz davon ab, wie die sudoersDatei eingerichtet ist. Es kann so eingerichtet werden, dass ein Kennwort erforderlich ist, oder dass kein Kennwort erforderlich ist.
Jonathan M Davis
Weitere gängige Vorgehensweisen, um zu vermeiden, dass die Hauptdatei / etc / sudoers geändert wird, weil IDS sie überwacht und weil ihre Formatierung Ihren Tag ruinieren kann: Verwenden Sie sudo-Snippets als separate Dateien in /etc/sudoers.d. Die Verwendung der Radgruppe für Personen erlaubte jeden Befehl.
bbaassssiiee
2

Neben den anderen Antworten bietet sudo Protokollierungsfunktionen, mit denen Sie verfolgen können, welche Befehle von wem ausgeführt wurden. Dies dient nicht der Sicherheit, da ein böswilliger Benutzer, der sudo-Zugriff erhält, das Protokoll löschen kann. Es ist jedoch sehr nützlich, genau herauszufinden, was Sie oder ein anderer Administrator letzte Woche um 2 Uhr morgens mit trüben Augen getan haben.

JRW
quelle
3
Dies dient Sicherheitszwecken, da sudo die Protokollierung im syslog unterstützt, das in allen wichtigen Sicherheitskonfigurationen so konfiguriert wird, dass es auf einem separaten Remotecomputer protokolliert, sodass die Protokolle bei einer Systembeeinträchtigung nicht ausgeführt werden können.
Arrowmaster
Das Dateiattribut "Nur anhängen" hilft möglicherweise ein bisschen "chattr + a / var / log / secure
bbaassssiiee"