usando Set uid para executar um comando root do usuário não root

3

Considere os dois arquivos a seguir. O bit UID executável de summarize foi definido, para que outro usuário pertencente a outro grupo possa executar o executável de resumo que usa o arquivo customers.dat.

-rw-------  steve  sales  customers.dat
-rwsr-xr-x  steve  sales  summarize

Agora considere os dois arquivos a seguir:

-rwxrwx--- 1 root   root   5974 May 17 13:53 1.out
-rwsrwsrwx 1 root   root   5970 May 17 14:03 a.out

Ambos são executáveis, e eu quero que outro usuário execute a.out , que chama 1.out usando a chamada system("./1.out"); .

Mas estou sempre recebendo permissão de erro negado

sh: ./1.out: Permission denied

Para mim, os dois cenários parecem iguais. Por que recebo o erro de permissão negada? Estou faltando alguma coisa?

    
por ashishsony 17.05.2012 / 11:34

1 resposta

4

Extrato de Programas e vulnerabilidades Set-UID :

– Recall that system() invokes /bin/sh first. In Fedora, it execv /bin/sh with arguments "sh", "-c" and the user provided string.

– In Fedora, /bin/sh (actually bash) ignores the Set-UID bit option. Therefore, when invok- ing system (cmd) in a Set-UID program, cmd will not be executed with the root privilege, unless cmd itself is a Set-UID program. The following code in bash drops the Set-UID bit. Actually, I cannot think of any legitimate reason why we need to allow Set-UID shell program. Fedora is doing the right thing; many other Unix OSes have not done this.

De acordo com isso, 1.out não está definido como uid e a.out descarta privilégios antes de executá-lo.

    
por 17.05.2012 / 12:08