So führen Sie ein Programm mit Root-Rechten aus, ohne su oder sudo zu verwenden

8

Ich habe ein bashSkript, das mit Root-Rechten ausgeführt werden muss, aber vom normalen Benutzer aufgerufen werden muss.

Der schwierige Teil ist, dass das Skript nicht nach einem Passwort fragen sollte und ich die sudoers- Datei nicht verwenden möchte . Ich möchte die Verwendung von sudo oder su vermeiden .

Ist das möglich?

Stefan
quelle
Mögliches Duplikat von Allow setuid auf Shell-Skripten
Stefan

Antworten:

9

Wenn es sich nicht um ein Bash-Skript, sondern um eine reguläre Anwendung handelt, geben Sie root das Eigentum daran und setzen das setuid-Bit für die Anwendung. Bei der Ausführung ist der effektive Benutzer, unter dem die Anwendung ausgeführt wird, root. Aus Sicherheitsgründen ist dies jedoch in vielen Systemen für Shell-Skripte verboten. Diese Frage hier auf unix.stackexchange.com behandelt Möglichkeiten, wie dies überwunden werden kann.

fschmitt
quelle
Schön, ich habe gerade einen Link dazu gepostet. Hemants Antwort ist eine gute Lösung
Michael Mrozek
Würde Ruby als Shell-Skript zählen?
Stefan
1
@Stefan Ja, alles, was über einen Interpreter ausgeführt wird, funktioniert, da nicht das Skript selbst ausgeführt wird, sondern der Ruby-Interpreter, der nicht festgelegt ist. Sie benötigen eine tatsächliche Binärdatei, um setuid zu verwenden
Michael Mrozek
2
Ich wünschte, ich könnte dies ablehnen, aber leider fehlen mir 25 Reputationspunkte. Es ist eine SEHR SCHLECHTE Idee, normale Benutzer ein Bash-Skript als Root ausführen zu lassen, es sei denn, Sie wissen genau, was Sie tun (und wenn Sie fragen müssen, wie es geht, tun Sie es nicht). Wenn das OP sein Skript hier veröffentlichen würde, würde ich wahrscheinlich mindestens drei Möglichkeiten finden, es auszunutzen. Es gibt einen Grund, warum fast alle Distributionen dies schwierig machen.
Kim
Eines der Hauptprinzipien von Unix ist: "Geben Sie dem Benutzer die Möglichkeit, sich in den Fuß zu schießen" :-)
fschmitt
1

Verwenden Sie sudo. Wenn Sie nicht anrufen müssen sudo /path/to/myscript, schreiben Sie einen einzeiligen Wrapper exec sudo /path/to/myscript "$@". Siehe Zulassen von Setuid für Shell-Skripte , insbesondere Maciej Piechotkas Antwort zur Verwendung von Sudo und meine allgemeinere Diskussion von Setuid-Programmen .

Gilles 'SO - hör auf böse zu sein'
quelle
Die ganze Idee ist, nicht verwenden zu müssen sudo.
Alexej Magura
@AlexejMagura Sudo ist die einfachste Lösung. Dies ist ohne sudo nur schwer möglich (es sei denn, Sie sind bereit, sich mit einer unsicheren Lösung zufrieden zu geben. In diesem Fall können Sie jedem das Root-Passwort geben).
Gilles 'SO - hör auf böse zu sein'