segunda-feira, 15 de julho de 2013

Permissões especiais em arquivos no Linux

Nessa última parte da nossa conversa sobre permissões em arquivos no Linux, vamos ver alguns atributos especiais.

$ ls -l / | grep tmp
drwxrwxrwt  20 root root   600 Jul 15 11:25 tmp
$

Reparem no atributo "t". Ele é chamado de "stick bit" e informa que um arquivo criado nesta pasta só poderá ser alterado e apagado pelo seu criador. A pasta /tmp tem essa característica. Não faz muito sentido ter essa permissão em um arquivo.

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 45396 Mai 25  2012 /usr/bin/passwd
$

O "s" nas permissões de usuário é chamado de "suid" e informa que esse programa rodará com as permissões do dono do arquivo (neste caso o root), independente de quem o tenha executado. Só faz sentido usá-lo em programas executáveis. Isso permite que usuários normais possam fazer tarefas administrativas, ou que requeiram permissões especiais. No exemplo acima, para alterar a senha é necessário ter acesso de escrita no arquivo /etc/shadow.

Quando "s" estiver nas permissões do grupo (sgid) o programa será executado pelo grupo ao qual ele pertence, ao invés do grupo do usuário que o executou. Se colocado em uma pasta, os arquivos criados nesta pasta terão as mesmas permissões da pasta. Muito útil em pastas compartilhadas.

Para alterar essas permissões especiais você pode usar a notação escrita ou a numérica.

$ chmod +t,+s fileone
$ ls -l fileone
-rwsrwxrwt 1 ricardo root 13 Jul  2 12:57 fileone
$

Na notação numérica, t=1, sgid=2, suid=4. Para setar o stick bit, dando permissão total ao dono, leitura e execução ao grupo e aos demais usuários, bata digitar:

# chmod 1755 fileone
# ls -l fileone
-rwxr-xr-t 1 ricardo root 8528 Jul  1  2011 fileone
#

Para setar também o suid, basta somar t (=1) com suid (=4).

# chmod 5755fileone
# ls -l fileone
-rwsr-xr-t 1 ricardo root 8528 Jul  1  2011 fileone
#