![Das Setuid-Bit scheint keine Auswirkung auf Bash zu haben](https://rvso.com/image/31653/Das%20Setuid-Bit%20scheint%20keine%20Auswirkung%20auf%20Bash%20zu%20haben.png)
Ich habe ein bisschen experimentiert und etwas Merkwürdiges bemerkt: Das Setzen des Setuid-Bits auf einer Kopie von Bash unter /usr/bin/bash-test
schien 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 /root
ausfü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.whoami
bash-test
root
bash-test
whoami
Ich habe auch versucht, das Setuid-Bit zu aktivieren /usr/bin/bash
und 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. 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 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. -p
wird 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.).