[gitec] Permissões especiais de shell

Jean Rodrigo Ferri jeanferri at interlegis.gov.br
Thu Aug 31 09:39:55 BRT 2006


Olá Cristiano,

Excelente explicação, esta deveria ir para o Colab! ;-)

Abraço,

-- 
Jean Ferri
Interlegis-DF

Cristiano (CMTimóteo - MG) escreveu:
> Bom gente, boa tarde!!!
> 
> Outro dia enviei a lista um email com uma duvida sobre permissões 
> especiais. A questão era se alguem sabia que permissão deveria definir a 
> um arquivo para que ele durante a execução tivesse poderes de outro 
> usuário (root, por exemplo) e não o que estivesse executando. Bem, achei 
> a solução e vou compartilhar com os amigos (para quem quiser ler mais 
> detalhadamente esta no livro Programação Shell Script - Julio Cezar Neves).
> 
> Seguindo meu exemplo, as pastas de usuário (aqui na CMTimóteo) tem 
> permissão de leitura/escrita/e execução apenas para o dono da pasta. E 
> se alguém quiser copiar um arquivo diretamente para este usuário? De 
> forma normal não seria possível, já que a pasta teria a seguinte permissão:
> 
> $ ls -ld /home/cristiano/
> drwx------  52 cristiano cpd 4096 2006-08-30 14:38 /home/cristiano/
> 
> Bem, eu criei uma rotina que se chama transfere e ao final executei
> 
> $ chmod 755 transfere
> $ ls -l transfere
> -rwxr-xr-x  1 root root 10458 2006-08-30 17:34 transfere
> 
> Só que (apesar da rotina ser executável por qualquer usuário) durante a 
> execução da rotina recebo como erro não ter acesso a pasta do usuário 
> que desejo enviar um arquivo. Então segue como contornar o problema.
> 
> $ chmod 4744 transfere # Observe que o chmod tem 4 algarismos para 
> determinar permissão
> $ ls -l transfere
> -rwsr-xr-x  1 root root 10458 2006-08-30 17:34 transfere  #agora observa 
> a permissão do arquivo.
> 
> Ao executar esta rotina (e somente durante sua execução) o shell terá os 
> poderes de dono alterados para o root (já que o dono do arquivo é o 
> root) podendo então transferir um arquivo da minha pasta para a pasta de 
> qualquer usuário.
> 
> Vale lembrar que o número adicional no chmod segue as seguintes regras:
> 
> 1      Stick bit
> 2      Group-id bit
> 4      User-id bit
> 
> Quando um programa esta com o *Stick bit* ligado, ele não sai da 
> memória, nem faz paginação, devendo ser usado com parcimônia e somente 
> em rotinas frequentemente usadas por muitos usuário simultaneamente.
> 
> O *Group-id bit* comporta-se da mesma forma do *User-id bit*, exceto que 
> o usuário, durante a execução de um programa com o bit em questão 
> ligado, passa ter todos os direitos do grupo ao qual pertence este 
> arquivo de programa.
> 
> E, obviamente, podemos ligar mais de um destes bits simultaneamente 
> obedecendo exatamente a mesma regra para o chmod normal, sendo:
> 
> $ chmod 6755 transfere  # composição do primeiro bit = 4 (User-id bit) + 
> 2 (Group-id bit)
> $ ls -l transfere
> -rwsr-sr-x  1 root root 10458 2006-08-30 17:34 /usr/bin/transfere*
> 
> Por fim entenda que não são em todas as distros que aceitam tal recurso 
> em shell's scripts. Para as distros que não aceitam tal recurso é 
> necessário fazer um programa em C que chamará a rotina que deseja-se 
> executar passando-lhe os parametros devidos, e aplicar o chmod no 
> programa em C


Mais detalhes sobre a lista de discussão Gitec