![O bit Setuid parece não ter efeito no bash](https://rvso.com/image/31653/O%20bit%20Setuid%20parece%20n%C3%A3o%20ter%20efeito%20no%20bash.png)
Eu estava experimentando um pouco e percebi algo estranho: definir o bit setuid em uma cópia do bash localizada em /usr/bin/bash-test
parecia não ter efeito. Quando executei uma instância de bash-test
, meu diretório inicial não estava definido como /root
e quando executei o whoami
comando de bash-test
, meu nome de usuário não foi relatado como sendo root
, sugerindo que bash-test
não estava sendo executado como root. No entanto, se eu definir o bit setuid como ativado whoami
, fui relatado como root em qualquer shell, conforme esperado.
Tentei ativar o bit setuid /usr/bin/bash
também e observei o mesmo comportamento.
Por que o bash não está rodando como root quando eu defino o bit setuid nele? O selinux poderia ter algo a ver com isso?
Responder1
A explicação é meio chata: o próprio bash é o motivo. strace
é nosso amigo (deve ser o próprio SUID root para que isso funcione):
getuid() = 1000
getgid() = 1001
geteuid() = 0
getegid() = 1001
setuid(1000) = 0
setgid(1001) = 0
bash detecta que foi iniciado o SUID root (UID! = EUID) e usa seu poder de root para descartar esse poder, redefinindo o EUID para UID. E mais tarde até FSUID, só para ter certeza...:
getuid() = 1000
setfsuid(1000) = 1000
getgid() = 1001
setfsgid(1001) = 1001
No final: sem chance. Você tem que iniciar o bash com UID root (ou seja, sudo).
Editar 1
A página de manual diz o seguinte:
Se o shell for iniciado com o ID do usuário (grupo) efetivo diferente do ID do usuário (grupo) real e a opção -p não for fornecida, nenhum arquivo de inicialização será lido, as funções do shell não serão herdadas do ambiente, o SHELLOPTS As variáveis , BASHOPTS, CDPATH e GLOBIGNORE, se aparecerem no ambiente, serão ignoradas e o ID do usuário efetivo será definido como o ID do usuário real. Se a opção -p for fornecida na chamada, o comportamento de inicialização será o mesmo, mas o ID do usuário efetivo não será redefinido.
Mas isso não funciona para mim. -p
nem é mencionado entre as opções de inicialização. Eu também tentei --posix
; também não funcionou.
Responder2
Em qualquer caso, um programa raiz SUIDnãoroda com o ambiente do root ( $HOME
, configuração do shell, qualquer que seja), ele roda com o rootpoderes(ou seja, pode excluir qualquer arquivo, alterar qualquer permissão, etc.).