Permissões especiais: stick e suid bit

No post anterior, falei sobre a umask para definir permissão padrão para criação de novos arquivos e diretórios. E ainda estou devendo as duas permissões especiais stick bit e suid bit.

Estamos lá, felizes da vida como adm da Zion… quando o neo, por descuido apagou um arquivo da trinity:

$ rm report.txt
rm: remover arquivo comum vazio `report.txt’? y
`report.txt’ removido

Hmm… isso não é bom. Usuários apagando arquivos de outros… não é legal. Então, como adm, vamos resolver esse problema usando a permissão especial stick bit.

A permissão stick bit em um diretório faz com que só o dono do arquivo e somente ele apague o arquivo que ele criou! Um exemplo de diretório que usa essa permissão, é o /tmp. Vejam:

# ls -ld /tmp/
drwxrwxrwt 4 root root 4096 Mai 15 21:39 /tmp/

Reparem o ‘t‘ no lugar do ‘x‘ no bloco de permissão de outros… esse ‘t’ indica que a permissão stick bit esta ativa para o diretório… e ai, só quem for o dono do arquivo poderá apagar o arquivo que criou!

No nosso caso, vamos aplicar então, a permissão stick bit ao diretório private… pra evitar que o neo apague outro arquivo da trinity… ou então ela por vingança apague um arquivo do neo😛 .

# cd /mnt

# chmod +t private/

# ls -l
total 8
drwxr-xr-x 2 root generics 4096 Mai 15 21:21 generics
drwxrws–T 2 root private  4096 Mai 16 11:52 private

Acima, so pedimos para acrescentar a permissão stick bit para todos os blocos de permissão (dono, grupo e outros) utilizando a forma literal… se fosse utilizar a forma octal, o comando seria:

# chmod 3770 private/

Acima, colocamos o 3 porque já existe a permissão de sgid bit que tem o valor 2… e precisamos acrescentar a permissão stick bit que tem valor 1. E temos também que acrescentar as demais permissões que já existiam para o diretório (770).

Vocês devem ter reparado que tem uma diferença entre o stick bit do diretório /tmp e do /mnt/private:

# ls -ld /tmp/
drwxrwxrwt 4 root root 4096 Mai 15 21:39 /tmp/

# ls -ld /mnt/private/
drwxrws–T 2 root private 4096 Mai 16 11:53 /mnt/private/

Essa diferença entre os t’s nos diretórios é que, quando não tem permissão no bloco de outros, a stick bit é indica com o T maiúsculo; e quando existe permissão no bloco de outros, é indicada com t minúsculo.

Vamos ver se isso funciona… a trinity criou o arquivo reports2.txt e o neo, tenta apagar:

$ rm reports2.txt
rm: remover arquivo comum vazio `reports2.txt’? y
rm: imposível remover `reports2.txt’: Operação não permitida

Bem… com isso vimos que a stick bit funciona!

Falando agora sobre a permissão especial suid bit… ela é uma permissão utilizada em arquivos executáveis! Sua função é permitir que um usuário que não seja o dono do arquivo execute como se fosse o dono!

Por exemplo… no terminal que estamos logados como trinity, executamos o comando init, que é o comando que manipula o runlevel do sistema:

$ init
-su: init: command not found

Vejam que a saída do comando é not found… O init é um comando de administração do sistema e a única pessoa que pode executar esse comando é root! Vamos ver como está a permissão do comando init:

# ls -l /sbin/init
-rwxr-xr-x 1 root root 31296 Ago 12  2008 /sbin/init

A permissão padrão desse comando está como 755… vamos adicionar a permissão de suid bit:

# chmod u+s /sbin/init

# ls -l /sbin/init
-rwsr-xr-x 1 root root 31296 Ago 12  2008 /sbin/init

Acima, usei o modo literal para definir a permissão de suid… como é uma permissão para usuários… acrescentamos somente a permissão o bloco de permissão do usuário. Reparem no ‘s’ no local do ‘x’ para execução do comando.

Se fosse para definir a permissão em modo octal, o suid tem valor 4, então ficaria assim:

# chmod 4755 /sbin/init

Sendo que o 4 indica que é permissão do suid, e 755 são as permissões originais do arquivo.

Agora, se a trinity for fazer um teste… se digitar somente o comando init, irá aparecer not found novamente… mas se ela informar o caminho completo do arquivo, vejam o que acontece:

$ /sbin/init
Usage: init {-e VAR[=VAL] | [-t SECONDS] {0|1|2|3|4|5|6|S|s|Q|q|A|a|B|b|C|c|U|u}}b

Hummm… se a trinity executar o comando de forma certa, agora ela também pode manipular o runlevel do sistema…

Vamos voltar o arquivo para a permissão original:

# chmod u-s /sbin/init

# ls -l /sbin/init
-rwxr-xr-x 1 root root 31296 Ago 12  2008 /sbin/init

Usando a forma literal, basta retirar a permissão… se for usar a forma octal:

# chmod 0755 /sbin/init

O exemplo que coloquei, foi apenas para mostrar que arquivos com permissão suid da poderes que talvez não devam ser dados para qualquer usuário… Imaginem, um agente smith, com poderes para manipular o runlevel do sistema?

Mas ainda assim, no sistema existem alguns comandos que precisam de suid e já vem até setado por padrão no sistema. Um exemplo, é o comando passwd que permite que o usuário troque sua própria senha:

# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 31640 Nov 22 14:01 /usr/bin/passwd

Se retirarmos o suid desse comando, somente o root poderá trocar a senha dos usuários, o que pode não ser tão conveniente…

Para descobrir quais arquivos estão com suid no sistema, podemos usar o find:

# find / -perm +4000

Com a lista dos comandos, você como adm, pode definir quais arquivos realmente tem necessidade de ter suid, e também se algum usuário mal-intencionado não colocou nenhum arquivo com suid que possa ser prejudicial ao sistema!

É isso aí… com os comandos que vimos nos posts de administração de usuários e permissões… já conseguimos colocar um pouco de ordem no sistema! Até o próximo post!

1 Response to “Permissões especiais: stick e suid bit”


  1. 1 Ed Paro 24/11/2011 às 11:31 AM

    muito bom parabens


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




Follow Nix on WordPress.com
maio 2009
S T Q Q S S D
« abr   jun »
 123
45678910
11121314151617
18192021222324
25262728293031

Flickr Photos

Fast-flying Falcon

Mais fotos

%d blogueiros gostam disto: