GNU/Linux >> Znalost Linux >  >> Linux

Zdá se, že Setuid Bit nemá žádný vliv na Bash?

Trochu jsem experimentoval a všiml jsem si něčeho divného:nastavení bitu setuid na kopii bash umístěnou na /usr/bin/bash-test zdálo se, že nemá žádný účinek. Když jsem spustil instanci bash-test , můj domovský adresář nebyl nastaven na /root a když jsem spustil whoami příkaz z bash-test , moje uživatelské jméno nebylo hlášeno jako root , což navrhuje bash-test neběžel jako root. Pokud však nastavím bit setuid na whoami , byl jsem podle očekávání hlášen jako root v libovolném prostředí.

Zkusil jsem nastavit bit setuid na /usr/bin/bash a pozorovali stejné chování.

Proč bash neběží jako root, když na něm nastavím bit setuid? Může s tím mít něco společného selinux?

Přijatá odpověď:

Vysvětlení je trochu nepříjemné:důvodem je bash samotný. strace je náš přítel (aby to fungovalo, musí být samotný root SUID):

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

bash detekuje, že byl spuštěn SUID root (UID!=EUID) a použije svou sílu root k tomu, aby tuto moc zahodil a resetoval EUID na UID. A později dokonce FSUID, pro jistotu…:

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

Nakonec:bez šance. Musíte spustit bash s kořenem UID (tj. sudo).

Úprava 1

Manová stránka říká toto:

Pokud je shell spuštěn s efektivním id uživatele (skupiny), které se nerovná skutečnému id uživatele (skupiny), a není zadána volba -p, nečtou se žádné spouštěcí soubory, funkce shellu nejsou zděděny z prostředí, SHELLOPTS Proměnné , BASHOPTS, CDPATH a GLOBIGNORE, pokud se v prostředí vyskytují, jsou ignorovány a efektivní ID uživatele je nastaveno na skutečné ID uživatele. Pokud je při vyvolání zadána volba -p, chování při spuštění je stejné, ale skutečné ID uživatele se neresetuje.

Ale tohle mi nefunguje. -p není ani uveden mezi možnostmi spuštění. Zkoušel jsem také --posix; také nefungovalo.


Linux
  1. Linux – Suid nemá žádný vliv na adresáře s Linuxem?

  2. Linux – Proč Setuid nefunguje?

  3. Jak dosáhnout toho, aby hvězdička „*“ v Zsh měla stejné chování jako Bash?

  1. Nemůžete spouštět bash skripty ani jako root?

  2. Spusťte příkaz bash na jenkins pipeline

  3. Má účet root vždy UID/GID 0?

  1. Je možné mít adresářovou historii bash

  2. Má bash příkaz color, jak je vidět v MS-Windows CMD?

  3. Proč setuid bit funguje nekonzistentně?