Bearbeiten der Sudoers-Datei, um die Befehle eines Benutzers einzuschränken

8

Ist es möglich, die sudoers-Datei so zu bearbeiten, dass ein Benutzer sudo für jeden Befehl außer für einen bestimmten verwenden kann? Ich glaube, dass die sudoers-Datei so eingerichtet werden kann, dass ein Benutzer nur eine bestimmte Liste von Befehlen ausführen kann.

BEARBEITEN: Die Befehle, die ich wirklich wegnehmen möchte, sind Anhalten und Neustarten. Dies lässt mich denken, dass es spezielle Systemaufrufe für Anhalten und Neustart gibt. Können Sie einem Benutzer Systemaufrufe wegnehmen? Wenn nicht, liegt es daran, dass das Unix-Berechtigungssystem über Systemaufrufe abstrahiert und dies vernachlässigt?

devin
quelle

Antworten:

5

Eine andere Sichtweise ist, dass Benutzer, die einen weitgehend uneingeschränkten Root-Zugriff haben, leicht vollen Root-Zugriff erhalten können.

Während Sie möglicherweise in der Lage sind, etwas herauszufinden, würde es leicht umgangen werden.

SElinux ist jedoch ein möglicher Weg, obwohl das Lernen viel erfordert.

LapTop006
quelle
3

Um das zu tun, was Sie wollen (lassen Sie das Benutzerformular laufen, halten Sie es an, starten Sie es neu und fahren Sie es herunter), müssen Sie sich mit SElinux-Dingen befassen, um zu verhindern, dass der Benutzer diese Systemaufrufe ausführt. Andernfalls führt der Benutzer zuerst / bin / sh und dann / bin / halt aus, ohne sudo zu durchlaufen.

pjz
quelle
2
Oder eines von zig Programmen, aus denen Sie eine Shell oder einen eigenen Scrip erhalten können.
Ronald Pottol
3

Protokollieren Sie alles, was sie über sudo tun. Vermutlich haben Sie eine Möglichkeit, den Punkt zu verdeutlichen, es nicht noch einmal zu tun.

Defaults logfile=/var/log/sudolog 

protokolliert alle Befehle, die sie ausführen, google ein bisschen für weitere Informationen.

Ronald Pottol
quelle
Sie benötigen eine zentralisierte Protokollierung und müssen sie anschreien, wenn sie eine Shell ausführen. Eine Shell kann beispielsweise von einem Editor bezogen werden. oder Mann Mann usw.
James
3

Ja und Nein ... Sie können verhindern, dass ein Benutzer eine bestimmte Datei ausführt, indem Sie der Datei einen Knall (!) Vorstellen. Sie können jedoch nicht verhindern, dass ein Benutzer die Datei an einen anderen Speicherort kopiert und von dort aus ausführt.

User_Alias    ADMINS = peter, bob, bunny, %operator

ADMINS        ALL    = !/usr/bin/su, !SHELLS

Gewähren des Zugriffs auf bestimmte Dateien als anderer Benutzer

Jeremy Viet
quelle
Beispiel für das Festlegen der "SHELLS" oben: Cmnd_Alias ​​SHELLS = / bin / sh, / bin / ksh, / bin / bash, / bin / zsh, \ / bin / csh, / bin / tcsh, \ / usr / bin / login, / usr / bin / su
pulcher
Mit einer Reihe von Dienstprogrammen können Sie Befehle als root ausführen (tar, links und nmap über meinem Kopf). Ich denke also, die wirkliche Lösung besteht darin, entweder a) Whitelist-Befehle, die Sie als root ausführen möchten, oder b) nur zu mieten Jemand, dem Sie vertrauen
Einige Linux Nerd
2

Wenn der Benutzer wirklich neu starten möchte, wird er einen Weg finden. sudo -s, sudo -i, sudo $EDITOR /etc/sudoers... können entfernen Ihre Einschränkungen verwendet werden.

Und auf Unix-ähnlichen Systemen dürfen Sie das System neu starten, solange Sie root sind (UID 0). Wenn Sie einen Weg finden, diese Systemaufrufe einzuschränken, können Sie dies tun:

Benutzer $ echo b | sudo tee / proc / sysrq-trigger

oder eine Variation davon. Oder starten Sie neu, indem Sie eine Kernel-Panik auslösen. Oder...

Wenn Sie über Root-Zugriff verfügen, können Sie in der Regel alle vorhandenen Einschränkungen entfernen.

user1686
quelle
Es ist schade, dass Linux keine Sicherheitsebenen mehr hat. Sie waren nicht perfekt, aber Mann, waren sie einfach einzurichten. Sie haben einen Neustart nicht verhindert, aber viele andere Dinge verhindert. Und da sie so einfach waren, konnten Sie sie auf allen Systemen verwenden. Keine Anpassungen und dergleichen erforderlich.
Thomas
Waren sie nicht in BSD, nicht in Linux?
user1686
1

sicher, als root call visudo und verhindern, dass 'user' / sbin / halt ausführt:

user ALL=(ALL) NOPASSWD: !/sbin/halt
ThorstenS
quelle
Ich glaube, dass die Anfrage nach einer Liste von Befehlen war, die der Benutzer NICHT ausführen darf
Wayne
1

Auf diese Weise besteht das Risiko: Oft gibt es Möglichkeiten, dieselbe Aktion auszuführen. Zum Beispiel führt Telnit 6 oder Init 6 auch einen Neustart durch. Möglicherweise gibt es eine Möglichkeit, den Kernel zum Core-Dump zu zwingen und auch neu zu starten.

Julien
quelle
1

In der folgenden Zeile sollte der Benutzer "jim" alles außer / usr / bin / kill und / usr / bin / su ausführen lassen.

jim          ALL= !/usr/bin/kill,!/usr/bin/su
Jeff Atwood
quelle
0

Dies ist ungetestet und YMMV, aber wie wäre es, wenn Sie eine cmd_list der Befehle einrichten, die nicht ausgeführt werden sollen, und dann! Cmd_list für die angegebene Gruppe / den angegebenen Benutzer verwenden?

Ich habe keinen Zugriff, um dies zu testen, und habe mir gerade die Online- Handbuchseite im Sudoers-Handbuch angesehen, sodass mich einige Experten hier korrigieren, wenn ich falsch liege

Wayne
quelle