[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Root-Rechte mit sudo



Andre Tann:
> On 25.07.21 17:46, Stefan Klein wrote:
> 
>> Nur das "echo  100" wird von sudo ausgeführt, die Umleitung in die Datei
>> wird von deiner shell interpretiert.
> jetzt wirds interessant, weil wir hier zwei Aussagen haben.
> 
> 1. echo ist ein shell-Builtin, und das wird von der aktuell laufenden Shell
> ausgeführt, auf die das sudo natürlich keinen Einfluß hat. Das war Thomas'
> Hinweis.

Ich bestreite, dass "sudo echo" ein Shell-Builtin ausführt. Die Shell
des ausführenden Users sieht nur das Kommendo "sudo" und übergibt dem
das Argument "echo". Das wird dann von sudo ausgewertet und kann kein
Builtin der aufrufenden Shell starten.

> 2. Die Umleitung wird als der aufrufende User ausgeführt, auf die das sudo
> am Anfang auch keine Auswirkung hat (Stefan).
> 
> Hier verstehe ich jetzt noch nicht ganz, warum die Umleitung im Userkontext
> passiert,

Weil die Umleitung eine Funktion einer Shell ist. "sudo" wird von der
Shell des Users gestartet und bekommt sein stdout passend auf die von
der Shell geöffnete Ausgabedatei umgebogen.

> obwohl sudo am Anfang steht. Wird denn alles nach > in einer
> Subshell ausgeführt? So wie ich es verstehe: wird es nicht. Aber trotz sudo
> passiert die Umleitung dann als User?
> 
> Ich glaube meine eigentliche Frage ist: wer kriegt denn bei
> 
> 	sudo echo ... > datei
> 
> root-Rechte? Nicht das echo, weil das ist ein Builtin,

Doch. Das echo, das durch den sudo-Prozess gestartet wird.

> und die Shell läuft
> schon als user und wird nicht nochmal gestartet, und auch nicht die
> Umleitung, weil die wird ebenfalls von der Shell ausgeführt, die schon mit
> User-Rechten läuft. Sprich: nichts läuft mit root-Rechten? Mit anderen
> Worten:
> 
> 	echo ... > datei
> 	sudo echo ... > datei
> 
> sind genau gleichbedeutend? <kopfkratz>grübel</kopfkratz>

Nein. Die erste Variante startet ein Shell-Builtin mit den Rechten des
Users, die zweite startet (hier) /usr/bin/echo mit den Rechten von root.
Das bringt nur genau gar nichts, weil in beiden Fällen "datei" von der
aufrufenden Shell mit den Rechten des Users geöffnet wird.

Wenn Du eine Ausgbabe mit root-Rechten rausschreiben willst, kannst Du
das bspw. mit tee(1) machen:

$ echo foo | sudo tee /tmp/datei > /dev/null 
$ ls -l /tmp/datei
-rw-r--r-- 1 root root 4 Jul 25 21:17 /tmp/datei
$ cat /tmp/datei
foo

J.
-- 
The houses of parliament make me think of school bullies.
[Agree]   [Disagree]
                 <http://archive.slowlydownward.com/NODATA/data_enter2.html>

Attachment: signature.asc
Description: PGP signature


Reply to: