Pode bash executar com uid 0 e euid diferente?

0

Eu estava escrevendo um código bash e queria verificar se o script tinha privilégios de root. Todo o código que vejo de outras pessoas apenas verifica $EUID == 0 . É perfeitamente possível executar outros programas com UID = 0 e EUID > 0. O meu código não deve verificar os dois? Ou há algo sobre o bash que impede essa situação (estranha)?

Para aqueles que querem ver essa situação, aqui está uma prova de conceito:

[root@new-host bennett]# cp /bin/sleep .
[root@new-host bennett]# chown bennett sleep
[root@new-host bennett]# chmod 4755 sleep
[root@new-host bennett]# ll sleep 
-rwsr-xr-x. 1 bennett root 32188 Sep  9 02:38 sleep
[root@new-host bennett]# ./sleep 1000 &
[root@new-host bennett]# ps -e -o user= -o ruser= -o comm= | awk '$1 != $2'
bennett  root     sleep

Para recapitular a pergunta: Pode bash encontrar uma situação em que (( $UID == 0 && $EUID > 0 )) , sob nenhuma circunstância? Outros programas podem.

    
por Erik Bennett 09.09.2017 / 09:22

2 respostas

3

Sim:

$ env UID=0 EUID=90 bash -c 'echo $UID $EUID'
0 90

Note que o acima apenas altera os valores das variáveis. O UID real e o EUID não são afetados.

Você deve usar id . Veja por exemplo a pergunta Como impedir que um script seja executado se não for root (e echo" Não executando como root! Saindo ... ")

O ID do usuário efetivo também será diferente do ID real se o script tiver seu bit set-uid definido (e rodar tais scripts set-uid é uma coisa no seu Unix). Nesse caso, o UID será o do usuário invocando o script, enquanto o EUID será o do proprietário do script.

Relacionados: Permitir o setuid em scripts de shell

    
por 09.09.2017 / 09:36
2

O Bash descarta privilégios quando é iniciado, assim você não encontrará muitas vezes um processo bash em execução com diferentes UIDs efetivos e reais. Isso é possível com outras implementações sh.

Observe que, se você quiser testar se o seu script está sendo executado como root, verificar o EUID está correto e você não deve se preocupar com o UID real.

E até mesmo verificar o EUID muitas vezes não está certo. Como você sabe que o acesso root é necessário? Talvez todos os arquivos e dispositivos tenham permissões que permitam a um usuário não root acessá-los e, se você precisar usar algumas ferramentas que exigem privilégios não controlados por permissões de acesso, o script pode estar sendo executado com os recursos necessários ou ser ridicularizado (ou seja, simulado para fins de teste).

    
por 09.09.2017 / 17:12