Stavo sperimentando un po' e ho notato qualcosa di strano:impostare il bit setuid su una copia di bash situata in /usr/bin/bash-test
sembrava non avere alcun effetto. Quando ho eseguito un'istanza di bash-test
, la mia home directory non era impostata su /root
e quando ho eseguito whoami
comando da bash-test
, il mio nome utente non è stato segnalato come root
, suggerendo che bash-test
non era in esecuzione come root. Tuttavia, se imposto il bit setuid su whoami
, mi è stato segnalato come root in qualsiasi shell, come previsto.
Ho provato a impostare il bit setuid su /usr/bin/bash
anche e osservato lo stesso comportamento.
Perché bash non viene eseguito come root quando ho impostato il bit setuid su di esso? Selinux potrebbe avere qualcosa a che fare con questo?
Risposta accettata:
La spiegazione è un po' fastidiosa:bash stesso è il motivo. strace
è nostro amico (deve essere SUID root stesso affinché 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 eliminare questo potere, reimpostando EUID su UID. E poi anche FSUID, tanto per essere sicuri…:
getuid() = 1000
setfsuid(1000) = 1000
getgid() = 1001
setfsgid(1001) = 1001
Alla fine:nessuna possibilità. Devi avviare bash con root UID (cioè sudo).
Modifica 1
La pagina man dice questo:
Se la shell viene avviata con l'id utente effettivo (gruppo) diverso dall'id utente reale (gruppo) e l'opzione -p non viene fornita, non viene letto alcun file di avvio, le funzioni della shell non vengono ereditate dall'ambiente, le SHELLOPTS Le variabili , BASHOPTS, CDPATH e GLOBIGNORE, se compaiono nell'ambiente, vengono ignorate e l'ID utente effettivo viene impostato sull'ID utente reale. Se l'opzione -p viene fornita al momento della chiamata, il comportamento di avvio è lo stesso, ma l'ID utente effettivo non viene reimpostato.
Ma questo non funziona per me. -p
non è nemmeno menzionato tra le opzioni di avvio. Ho anche provato --posix
; non ha funzionato neanche.