GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Setuid Bit scheint keinen Einfluss auf Bash zu haben?

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.


Linux
  1. Ich habe einen Benutzer zu einer Gruppe hinzugefügt, aber Gruppenberechtigungen für Dateien haben immer noch keine Wirkung?

  2. Linux – Suid hat keinen Einfluss auf Verzeichnisse mit Linux?

  3. Verwenden Sie das Setuid-Bit richtig?

  4. Linux Setuid funktioniert nicht?

  5. Wie lässt sich Type-Ahead auf die Bash-Verlaufssuche anwenden (Strg-R)?

Bash Shebang

Kann ich ein Skript immer als root ausführen lassen?

Hat das Root-Konto immer UID/GID 0?

Ist es möglich, einen verzeichnisbewussten Bash-Verlauf zu haben?

Hat Bash einen Farbbefehl, wie in MS-Windows CMD zu sehen?

Warum funktioniert das Setuid-Bit inkonsistent?