Das Setuid-Bit scheint keine Auswirkung auf die Bash zu haben

14

Ich experimentierte ein bisschen und bemerkte etwas Seltsames: Das Setzen des setuid-Bits auf eine Kopie von bash unter /usr/bin/bash-testschien keine Wirkung zu haben. Wenn ich eine Instanz von ausführte, wurde mein Ausgangsverzeichnis bash-testnicht auf festgelegt, /rootund wenn ich den whoamiBefehl von bash-testausführte, wurde mein Benutzername nicht als vorhanden gemeldet root, was darauf hindeutet, dass er bash-testnicht als Root ausgeführt wurde. Wenn ich jedoch das setuid-Bit aktiviere whoami, wird erwartet, dass ich in einer beliebigen Shell als root angemeldet bin.

Ich habe versucht, das setuid-Bit ebenfalls zu aktivieren /usr/bin/bashund habe dasselbe Verhalten beobachtet.

Warum läuft bash nicht als root, wenn ich das setuid-Bit gesetzt habe? Könnte Selinux etwas damit zu tun haben?


quelle
1
Weitere Informationen zur Setuid finden Sie in dieser Frage.
Anthon
Siehe auch Setuid Demystified von Chen, Dean und Wagner. Es ist ein altes Papier, aber es gilt immer noch.

Antworten:

21

Die Erklärung ist irgendwie nervig: Bash selbst ist der Grund. straceist unser Freund (muss SUID root sein, damit dies funktioniert):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bash erkennt, dass SUID root (UID! = EUID) gestartet wurde und verwendet seine Root-Power, um diese zu entfernen und EUID auf UID zurückzusetzen. Und später sogar FSUID, nur um sicher zu gehen ...:

getuid()                                = 1000
setfsuid(1000)                          = 1000
getgid()                                = 1001
setfsgid(1001)                          = 1001

Am Ende keine Chance. Sie müssen bash mit der UID root (dh sudo) starten.

Bearbeiten 1

Die Manpage sagt folgendes:

Wenn die Shell mit einer effektiven Benutzer- (Gruppen-) ID gestartet wird, die nicht der tatsächlichen Benutzer- (Gruppen-) ID entspricht, und die Option -p nicht angegeben ist, werden keine Startdateien gelesen, Shell-Funktionen werden nicht von der Umgebung, den SHELLOPTS, geerbt Die Variablen, BASHOPTS, CDPATH und GLOBIGNORE werden ignoriert, wenn sie in der Umgebung angezeigt werden, und die effektive Benutzer-ID wird auf die tatsächliche Benutzer-ID festgelegt. Wenn die Option -p beim Aufruf angegeben wird, ist das Startverhalten dasselbe, die effektive Benutzer-ID wird jedoch nicht zurückgesetzt.

Aber das funktioniert bei mir nicht. -pwird nicht einmal unter den Startoptionen erwähnt. Ich habe es auch versucht --posix; hat auch nicht funktioniert.

Hauke ​​Laging
quelle
2

In jedem Fall wird ein SUID-Root-Programm nicht mit der Root-Umgebung ( $HOMEKonfiguration für die Shell, was auch immer) ausgeführt, sondern mit Root- Rechten (dh es kann jede Datei löschen, Berechtigungen ändern usw.).

vonbrand
quelle