Il bit setuid sembra non avere alcun effetto su bash


14

Stavo sperimentando un po 'e ho notato qualcosa di strano: impostare il bit setuid su una copia di bash posizionata su /usr/bin/bash-testsembrava non avere alcun effetto. Quando ho eseguito un'istanza di bash-test, la mia directory home non era impostata su /roote quando ho eseguito il whoamicomando bash-test, il mio nome utente non è stato segnalato come tale root, suggerendo che bash-testnon era in esecuzione come root. Tuttavia, se ho impostato il bit setuid su whoami, sono stato segnalato come root in qualsiasi shell, come previsto.

Ho provato a impostare anche il bit setuid e ho /usr/bin/bashosservato lo stesso comportamento.

Perché bash non funziona come root quando imposto il bit setuid su di esso? Selinux potrebbe avere qualcosa a che fare con questo?

linux  bash  setuid 

1
trovi ulteriori informazioni sul setuid in questa domanda.
Anthon,

Vedi anche Setuid Demysified di Chen, Dean e Wagner. È un vecchio documento ma si applica ancora.

Risposte:


21

La spiegazione è in qualche modo fastidiosa: la ragione è la stessa bash. straceè nostro amico (deve essere il SUID root stesso perché funzioni):

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

bash rileva che è stato avviato SUID root (UID! = EUID) e usa il suo potere di root per buttare via questo potere, reimpostando EUID su UID. E più tardi anche FSUID, solo per essere sicuri ...:

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

Alla fine: nessuna possibilità. Devi iniziare bash con UID root (cioè sudo).

Modifica 1

La pagina man dice questo:

Se la shell viene avviata con l'id utente (gruppo) effettivo non uguale all'id utente (gruppo) reale e l'opzione -p non viene fornita, non viene letto alcun file di avvio, le funzioni della shell non vengono ereditate dall'ambiente, gli SHELLOPTS , Le variabili BASHOPTS, CDPATH e GLOBIGNORE, se presenti nell'ambiente, vengono ignorate e l'ID utente effettivo viene impostato sull'ID utente reale. Se l'opzione -p viene fornita al momento dell'invocazione, il comportamento all'avvio è lo stesso, ma l'id utente effettivo non viene ripristinato.

Ma questo non funziona per me. -pnon è nemmeno menzionato tra le opzioni di avvio. Ho anche provato --posix; non ha funzionato neanche.


2

In ogni caso, un programma root SUID non funziona con l'ambiente root ( $HOME, la configurazione per la shell, qualunque cosa), funziona con i poteri di root (vale a dire, può eliminare qualsiasi file, modificare qualsiasi autorizzazione, ecc.).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.