Dúvida sobre funcionamento do SUID [RESOLVIDO]

1. Dúvida sobre funcionamento do SUID [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 24/12/2014 - 17:26h

Olá a galera do viva o linux, gostaria de tirar uma dúvida a respeito de um dos bits especiais de permissões no linux, o SUID.

Pelas definições que encontrei este bit tem efeitos somente em executáveis do linux, e faz com que um determinado binário seja executado com as permissões de seu dono, e não com as de quem executou, como é o tradicional. O problema é que fiz testes para ver realmente isso em funcionamento, porém não funcionou como eu esperava com o executável ping, como segue o exemplo:

-- SUID SETADO NO PING

root@ubuntu:/home/core# ls -lha /bin/ping
-rwsr-xr-x 1 root root 34K 2010-11-15 06:08 /bin/ping

-- PING EXECUTADO COM O USUÁRIO CORE

core@ubuntu:/tmp$ ping 8.8.8.8 -c4
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=56 time=55.4 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=56 time=47.3 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=56 time=60.7 ms
64 bytes from 8.8.8.8: icmp_req=4 ttl=56 time=50.5 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3017ms
rtt min/avg/max/mdev = 47.351/53.534/60.724/5.065 ms

-- EXECUÇÃO AINDA COMO CORE

root@ubuntu:/home/core# ps aux | grep ping | grep -v grep
core 3847 1.0 0.1 1940 508 pts/3 S+ 17:11 0:00 ping 8.8.8.8 -c4


Quando faço o teste com o utilitário shutdown, por exemplo, funciona normalmente:


-- SUID SETADO NO SHUTDOWN

root@ubuntu:/home/core# ls -lha /sbin/shutdown
-rwsr-xr-x 1 root root 50K 2011-04-20 19:49 /sbin/shutdown


-- SHUTDOWN EXECUTADO COM O USUÁRIO CORE

core@ubuntu:/tmp$ shutdown -h 30

Broadcast message from core@ubuntu
(/dev/pts/3) at 17:14 ...

The system is going down for halt in 30 minutes!


-- SHUTDOWN SENDO EXECUTADO COM O USUÁRIO ROOT

root@ubuntu:/home/core# ps aux | grep shutdown | grep -v grep
root 3852 0.1 0.2 4424 1008 pts/3 S+ 17:14 0:00 shutdown -h 30

Por que isso ocorre? O ping não deveria ser executado como root, já que possui o SUID setado e o root é o dono do binário?


  


2. Re: Dúvida sobre funcionamento do SUID [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/12/2014 - 23:03h

bmarquesm escreveu:

Olá a galera do viva o linux, gostaria de tirar uma dúvida a respeito de um dos bits especiais de permissões no linux, o SUID.

Pelas definições que encontrei este bit tem efeitos somente em executáveis do linux, e faz com que um determinado binário seja executado com as permissões de seu dono, e não com as de quem executou, como é o tradicional.


Resumidademente, o Set-User-ID (suid) e o Set-Group-ID (sgid) são úteis para escalada de privilégios em executáveis e são convenientes para compartilhamento de diretórios.

Há um boa referência na Wikipédia[1] e uma outra boa referência no info do coreutils[2].

[1] http://en.wikipedia.org/wiki/Setuid
[2] $ info coreutils 'File permissions' 'Directory Setuid and Setgid'



3. Re: Dúvida sobre funcionamento do SUID [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 25/12/2014 - 10:17h

É, nos docs do coreutils diz que o SUID usado em diretórios tem a mesma função do SGID, só que para o dono do arquivo. Quanto à documentação na Wiki fala também do uso deste em executáveis, que é o que estou testando, porém não vi ocorrer com o utilitário ping, por exemplo. Queria saber por que a definição que é dada, se aplicou ao shutdown e ao ping não, já que os dois binários possuem as mesmas permissões.

—> Parte no link da Wiki que você me passou que fala do SUID em executáveis:

When an executable file has been given the setuid attribute, normal users on the system who have permission to execute this file gain the privileges of the user who owns the file (commonly root) within the created process.[2] When root privileges have been gained within the process, the application can then perform tasks on the system that regular users normally would be restricted from doing. The invoking user will be prohibited by the system from altering the new process in any way, such as by using ptrace, LD_LIBRARY_PATH or sending signals to it (signals from the terminal will still be accepted, however).


4. Re: Dúvida sobre funcionamento do SUID [RESOLVIDO]

Buckminster
buckminster

(usa Debian)

Enviado em 25/12/2014 - 22:23h

Isso acontece porque o SUID (e o GUID) referem-se à permissões de arquivos e diretórios.
O ping procura um determinado IP ou uma URI na rede.

Se tu executares

# ls -lha /bin/ping 8.8.8.8

verás o que estou dizendo.

Se tu executares

# /bin/ping 8.8.8.8 -c4

verás que dará certo.


5. Re: Dúvida sobre funcionamento do SUID [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 26/12/2014 - 09:12h

Executando o ping como root, irá aparecer o root no "ps aux | grep ping" porque o root o executou, assim como se eu executasse um "top -c" com o usuário core, iria aparecer o core, no "ps aux | grep top".

Veja o teste abaixo com o utilitário fdisk:

1 - Permissões padrões:

root@ELOHIM:/sbin# ls -lha fdisk
-rwxr-xr-x 1 root root 104K Jun 9 2012 fdisk

2 - Setei o SUID no fdisk:

root@ELOHIM:/sbin# chmod -cv 4755 fdisk
mode of `fdisk' changed from 0755 (rwxr-xr-x) to 4755 (rwsr-xr-x)

root@ELOHIM:/sbin# !ls
ls -lha fdisk
-rwsr-xr-x 1 root root 104K Jun 9 2012 fdisk


3 - Neste caso, se eu executar /sbin/fdisk -l com qualquer outro usuário do sistema, no "ps aux | grep fdisk" irá aparecer o usuário root como usuário de execução, pois o SUID está setado no fdisk e o root é o dono do arquivo binário /sbin/fdisk. Porque isso não ocorre com o ping, é meu questionamento.


6. Re: Dúvida sobre funcionamento do SUID [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 07/02/2015 - 11:24h

Vi que o SUID só tem efeito em executáveis, e verifiquei que o ping não é um executável propriamente dito, mas sim um objeto compartilhado:

[root@lispbx:~/VIVAOLINUX]# file /bin/ping
/bin/ping: setuid ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

Por isso o SUID não funcionou neste caso específico. Quanto aos utilitários que são executáveis funcionou normalmente, como o sleep:

[root@lispbx:~/VIVAOLINUX]# file /bin/sleep
/bin/sleep: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts