[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: SUID e SGID



 Em 2/10/2010 09:50, Leonardo Carneiro escreveu:
Salve galera, estou com uma dúvida meio básica. Para mim, sempre foi
meio nebuloso a questão de SUID e SGID, portanto resolvi ler algum
material e fazer alguns testes.

A minha dúvida é: quando eu seto o SGID em um executável, e outro
usuário do mesmo grupo for executar, esse processo vai rodar como se
fosse o usuário original ou só vai ter as permissões do outro usuário?

Criei dois usuários: dilma e serra, e coloquei eles dentro do mesmo
grupo brasil. (ok, esse não foi o nome dos usuários, só to colocando
assim pra enxer o saco).

Com a dilma, criei o seguinte script:

#!/bin/bash
whoami
touch PAC2
exit 0

as permissões deste script são: rwsr-sr-- e o user e group owner são
dilma:brasil

E coloquei setei os bits de execução para o usuário, o grupo, e tb
SUID e SGID. Quando eu executo com o usuário dilma, o whoami mostra
dilma, e o owner e group owner do arquivo PAC2 é dilma:brasil. Quando
executo com o serra, o whoami mostra serra, e os user e group owner
são serra:brasil.

Fiz mais um teste e coloquei o serra em mais um grupo, o psdb, e setei
este grupo como primário, mas mantive o serra dentro do grupo brasil.
agora quando eu executo o script, o arquivo PAC2 mostra serra:psdb, e
não serra:brasil, como eu esperava.

Resumindo, o que SUID e SGID fazem? sendo que o usuário ainda executa
como ele mesmo e os arquivos criados ainda são do grupo principal do
usuário, e não do grupo do arquivo.



Então,

Quando um diretório tem o SGID todos os novos arquivos criados terão como grupo o grupo do diretório independente do usuário que criar.

Sobre o SUID, ele só funciona com binários não com scripts em bash, pois você está setando essa permissão para o script bash porém quando você coloca o hashbang no cabeçalho do arquivo ele vai executar com o interpretador do bash e utilizar o arquivo como parâmtero, ex:

/bin/bash /opt/meuscript.sh

Ou seja, estária executando o "bash" e não o script. Neste caso, para funcionar você deveria setar o SUID para o "bash" porém já da pra imaginar o tamanho do transtorno, assim você comprometeria o sistema inteiro visto que o bash seria executado com permissões daquele usuário por todos.

O ideal seria escrever o aplicativo com uma linguagem compilada ou gerar um binário apartir do script (com uma busca rápida no google apareceu o "shc compiler", não sei se funciona mas dependendo do caso vale uma olhada).

A[]'s


Reply to: