GNU/Linux >> Linux Esercitazione >  >> Linux

Setuid Bit sembra non avere alcun effetto su Bash?

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.


Linux
  1. Linux – Suid non ha alcun effetto sulle directory con Linux?

  2. Linux – Ionice non ha alcun effetto sulle scritture non sincronizzate (ovvero le scritture normali)?

  3. Linux – Perché Setuid non funziona??

  4. Fai in modo che lo script bash risponda ai prompt interattivi

  5. Impossibile eseguire script bash anche come root?

Bash Shebang

Come ottenere l'asterisco "*" in Zsh per avere lo stesso comportamento di Bash?

Esegui il comando bash sulla pipeline jenkins

Come installare VIM su Linux quando non ho i permessi di root?

L'account root ha sempre UID/GID 0?

Perché il bit setuid funziona in modo incoerente?