Ich experimentierte ein bisschen und bemerkte etwas Seltsames: Das Setzen des setuid-Bits auf eine Kopie von bash unter /usr/bin/bash-test
schien keine Wirkung zu haben. Wenn ich eine Instanz von ausführte, wurde mein Ausgangsverzeichnis bash-test
nicht auf festgelegt, /root
und wenn ich den whoami
Befehl von bash-test
ausführte, wurde mein Benutzername nicht als vorhanden gemeldet root
, was darauf hindeutet, dass er bash-test
nicht 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/bash
und 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?
Antworten:
Die Erklärung ist irgendwie nervig: Bash selbst ist der Grund.
strace
ist unser Freund (muss SUID root sein, damit dies funktioniert):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 ...:
Am Ende keine Chance. Sie müssen bash mit der UID root (dh sudo) starten.
Bearbeiten 1
Die Manpage sagt folgendes:
Aber das funktioniert bei mir nicht.
-p
wird nicht einmal unter den Startoptionen erwähnt. Ich habe es auch versucht--posix
; hat auch nicht funktioniert.quelle
In jedem Fall wird ein SUID-Root-Programm nicht mit der Root-Umgebung (
$HOME
Konfiguration für die Shell, was auch immer) ausgeführt, sondern mit Root- Rechten (dh es kann jede Datei löschen, Berechtigungen ändern usw.).quelle