Das Setuid-Bit scheint keine Auswirkung auf Bash zu haben

Das Setuid-Bit scheint keine Auswirkung auf Bash zu haben

Ich habe ein bisschen experimentiert und etwas Merkwürdiges bemerkt: Das Setzen des Setuid-Bits auf einer Kopie von Bash unter /usr/bin/bash-testschien keine Wirkung zu haben. Als ich eine Instanz von ausführte bash-test, war mein Home-Verzeichnis nicht auf eingestellt , und als ich den Befehl von aus /rootausführte , wurde mein Benutzername nicht als gemeldet , was darauf hindeutet, dass ich nicht als Root ausgeführt wurde. Wenn ich jedoch das Setuid-Bit auf setzte , wurde ich wie erwartet in jeder Shell als Root gemeldet.whoamibash-testrootbash-testwhoami

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

Warum läuft Bash nicht als Root, wenn ich das Setuid-Bit setze? Könnte Selinux damit etwas zu tun haben?

Antwort1

Die Erklärung ist etwas nervig: Bash selbst ist der Grund. straceist 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 gestartet wurde (UID!=EUID) und nutzt seine Root-Berechtigung, um diese Befugnis wegzuwerfen, indem EUID auf UID zurückgesetzt wird. Und später sogar FSUID, nur um sicherzugehen...:

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

Letztendlich: keine Chance. Sie müssen Bash mit der UID root starten (also sudo).

Bearbeiten 1

Auf der Manpage steht 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 übernommen, die Variablen SHELLOPTS, BASHOPTS, CDPATH und GLOBIGNORE werden, falls sie in der Umgebung vorkommen, ignoriert und die effektive Benutzer-ID wird auf die tatsächliche Benutzer-ID gesetzt. Wenn beim Aufruf die Option -p angegeben ist, ist das Startverhalten dasselbe, aber die effektive Benutzer-ID wird nicht zurückgesetzt.

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

Antwort2

Auf jeden Fall ein SUID Root-Programmnichtmit der Root-Umgebung ( $HOME, Konfiguration für die Shell, was auch immer) ausführen, es läuft mit RootBefugnisse(d. h. es kann jede Datei löschen, alle Berechtigungen ändern usw.).

verwandte Informationen