Eu estava experimentando um pouco e notei 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 /root
e, quando executei o whoami
comando bash-test
, meu nome de usuário não foi relatado como sendo root
, sugerindo que bash-test
não estava sendo executado como raiz. No entanto, se eu ativar o bit setuid whoami
, fui relatado como sendo root em qualquer shell, conforme o esperado.
Tentei definir o bit setuid /usr/bin/bash
também e observei o mesmo comportamento.
Por que o bash não está sendo executado como root quando eu defino o bit setuid? O selinux pode ter algo a ver com isso?
Respostas:
A explicação é meio irritante: o próprio bash é o motivo.
strace
é nosso amigo (deve ser o próprio root SUID para que isso funcione):o bash detecta que foi iniciado o SUID root (UID! = EUID) e usa seu poder de raiz para jogar fora esse poder, redefinindo o EUID para o UID. E depois até o FSUID, só para ter certeza ...:
No final: sem chance. Você precisa iniciar o bash com a raiz do UID (ou seja, sudo).
Editar 1
A página do manual diz o seguinte:
Mas isso não funciona para mim.
-p
nem sequer é mencionado entre as opções de inicialização. Eu também tentei--posix
; também não funcionou.fonte
De qualquer forma, um programa raiz SUID não é executado com o ambiente raiz (
$HOME
configuração do shell, o que seja), é executado com poderes root (isto é, pode excluir qualquer arquivo, alterar permissões, etc.).fonte