SUID funktioniert nicht bei bash (bei der Shell direkt, nicht bei Scripten)

05/07/2008 - 19:16 von Hauke Laging | Report spam
Moin,

ich habe gerade, mal so aus Spaß, bash in mein Homeverzeichnis
kopiert und dann SUID root gemacht. Wenn ich die als User per ./bash
starte, bin ich aber nicht root. Wie kommt das denn? Die Partiton
ist nicht als nosuid gemountet (derselbe Effekt tritt in / auf).

[einige Minuten spàter]
OK, ich habe getrickst:
strace -p $SHELL
und dann in $SHELL exec auf ./bash

Folgendes fàllt auf:
SUID-Version:
execve("/home/hl/bash", ["./bash"...], [/* 88 vars */]) = 0
brk(0) = 0x80096000
fcntl64(0, F_GETFD) = 0
fcntl64(1, F_GETFD) = 0
fcntl64(2, F_GETFD) = 0
access("/etc/suid-debug", F_OK) = -1 ENOENT ...
access("/etc/ld.so.preload", R_OK) = -1 ENOENT ...
open("/etc/ld.so.cache", O_RDONLY) = 3

normale Version:
execve("/bin/bash", ["bash"], [/* 89 vars */]) = 0
brk(0) = 0x80096000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT ...
open("/etc/ld.so.cache", O_RDONLY) = 3

Das unerwartete SUID-Verhalten tritt übrigens auch bei Aufruf mit
exec -a /bin/bash ./bash
auf.

Neben der offensichtlichen
Warum-macht-der-Kernel-den-Prozess-nicht-UID-0-Frage stellt sich
außerdem die, woher zum Henker die bash den Unterschied merkt - ohne
auf irgendwas zurückzugreifen, das man in strace sehen würde. Klar,
wenn der aufruf nicht über /bin/bash erfolgt, könnte man
misstrauisch werden. Aber das ist es nicht. Bei einem
Nicht-SUID-Aufruf von anderer Stelle bleiben die mir nicht
erklàrlichen Eintràge aus.


CU

Hauke
http://www.hauke-laging.de/ideen/
http://zeitstempel-signatur.hauke-laging.de/
Wie können 59.054.087 Leute nur so dumm sein?
 

Lesen sie die antworten

#1 Sven Joachim
05/07/2008 - 19:44 | Warnen spam
Hallo Hauke,

Am 05.07.2008 um 19:16 schrieb Hauke Laging:

Moin,

ich habe gerade, mal so aus Spaß, bash in mein Homeverzeichnis
kopiert und dann SUID root gemacht. Wenn ich die als User per ./bash
starte, bin ich aber nicht root. Wie kommt das denn? Die Partiton
ist nicht als nosuid gemountet (derselbe Effekt tritt in / auf).



/Wie/ die bash das macht, weiß ich auch nicht, dazu muss man wohl den
Quelltext lesen. Aber /dass/ sie die Privilegien abgibt, ist in der
manpage dokumentiert:

If the shell is started with the effective user (group) id not equal
to the real user (group) id, and the -p option is not supplied, no
startup files are read, shell functions are not inherited from the
environment, the SHELLOPTS variable, if it appears in the environment,
is ignored, and the effective user id is set to the real user id. If
the -p option is supplied at invocation, the startup behavior is the
same, but the effective user id is not reset.

Sven

Ähnliche fragen