Ich habe ein bisschen herumexperimentiert und etwas Seltsames bemerkt:Setzen des setuid-Bits auf einer Kopie von bash, die sich unter /usr/bin/bash-test
befindet schien keine Wirkung zu haben. Als ich eine Instanz von bash-test
ausgeführt habe , mein Home-Verzeichnis wurde nicht auf /root
gesetzt und als ich whoami
ausgeführt habe Befehl von bash-test
, mein Benutzername wurde nicht als root
gemeldet , was darauf hindeutet, dass bash-test
lief nicht als root. Wenn ich jedoch das setuid-Bit auf whoami
setze , wurde ich wie erwartet als root in irgendeiner Shell gemeldet.
Ich habe versucht, das Setuid-Bit auf /usr/bin/bash
zu setzen auch und beobachtete das gleiche Verhalten.
Warum läuft bash nicht als root, wenn ich das setuid-Bit darauf setze? Könnte Selinux etwas damit zu tun haben?
Akzeptierte Antwort:
Die Erklärung ist etwas nervig:Bash selbst ist der Grund. strace
ist unser Freund (muss selbst SUID-Root sein, damit dies funktioniert):
getuid() = 1000
getgid() = 1001
geteuid() = 0
getegid() = 1001
setuid(1000) = 0
setgid(1001) = 0
bash erkennt, dass es als SUID-Root (UID!=EUID) gestartet wurde, und verwendet seine Root-Power, um diese Power wegzuwerfen, wodurch EUID auf UID zurückgesetzt wird. Und später sogar FSUID, nur um sicherzugehen…:
getuid() = 1000
setfsuid(1000) = 1000
getgid() = 1001
setfsgid(1001) = 1001
Am Ende:keine Chance. Sie müssen Bash mit UID-Root (d. h. sudo) starten.
Bearbeiten 1
Die Manpage sagt folgendes:
Wenn die Shell mit der effektiven Benutzer- (Gruppen-) ID gestartet wird, die nicht gleich der tatsächlichen Benutzer- (Gruppen-) ID ist, und die Option -p nicht angegeben ist, werden keine Startdateien gelesen, Shell-Funktionen werden nicht von der Umgebung, den SHELLOPTS, geerbt , BASHOPTS, CDPATH und GLOBIGNORE-Variablen werden ignoriert, wenn sie in der Umgebung erscheinen, und die effektive Benutzer-ID wird auf die tatsächliche Benutzer-ID gesetzt. Wenn die Option -p beim Aufruf angegeben wird, ist das Startverhalten dasselbe, aber die effektive Benutzer-ID wird nicht zurückgesetzt.
Aber das funktioniert bei mir nicht. -p
wird nicht einmal unter den Startoptionen erwähnt. Ich habe es auch mit --posix
versucht; hat auch nicht funktioniert.