Além das permissões simples de leitura, escrita e execução, existem outras três permissões, conhecidas como permissões especiais por só poderem ser aplicadas a tipos específicos de arquivos, que fornecem um alto nível de segurança ao sistema e privacidade aos usuários.
As permissões especiais são fornecidas pelos chamados bits, a saber: SUID, SGID e STICKY, dos quais trataremos a seguir.
SUID
O bit SUID (Set UID) pode ser aplicado somente para arquivos executáveis, para que eles rodem com as permissões do seu dono, e não com as permissões do usuário que o executou. Dessa forma, suponha um executável que tenha sido criado pelo usuário root com o bit SUID ligado. Então, se o usuário davidson executar esse arquivo, ele rodará como se fosse o root que o estivesse executando.
Isso pode ser útil para permitir que usuários comuns executem programas restritos ao administrador do sistema, como o shutdown, reboot, e outros.
Tomemos como exemplo o shutdown. Ele está localizado no diretório /sbin/, e não pode ser executado por usuários comuns, retornando a seguinte mensagem de erro:
$ /sbin/shutdown
shutdown: you must be root to do that!
Ou seja, "shutdown: você precisa ser root para fazer isso!".
Vamos então ativar o buit SUID para permitir que o usuário davidson possa executar o shutdown:
# chmod 4755 /sbin/shutdown
Ou
# chmod u+s /sbin/shutdown
Observe que utilizamos 4 dígitos para o comando chmod no formato octal. O primeiro dígito, que até então não tínhamos utilizado, é justamente aquele utilizado para as permissões especiais. O número 4 corresponde ao bit SUID. Já no formato literal, utilizamos u+s para ativar (+) a permissão especial de execução (s) para os usuários (u).
Observe agora as novas permissões do /sbin/shutdown:
$ ls -l /sbin/shutdown
-rwsr-xr-x 1 root shutdown 18516 2005-01-04 19:43 /sbin/shutdown
Repare que agora existe um "s" no lugar do "x" nas permissões do dono. Esse é o indicador de que o bit SUID está ligado.
Por fim, vamos criar um atalho para o shutdown no diretório /bin/, para que o usuário davidson possa executá-lo sem precisar digitar o caminho completo:
# ln -s /sbin/shutdown /bin/shutdown
Agora, o usuário davidson e todos os demais usuários do sistema poderão executar normalmente o comando shutdown, como se fosse o root que o estivesse executando.
$ shutdown -h now
SGID
O bit SGID (Set GID), quando aplicado a arquivos executáveis, possui as mesmas funções do bit SUID, com a diferença de que as permissões são atribuídas ao grupo, e não ao usuário. Ele deve ser usado para limitar o acesso a um executável do sistema a um determinado grupo.
Considerando o exemplo anterior, podemos criar um grupo chamado shutdown, e ativar o bit SGID de forma que somente os usuários que pertençam a esse grupo possam executar o utilitário shutdown:
# groupadd shutdown
# chown root:shutdown /sbin/shutdown
Os comandos acima criam o grupo shutdown e o definem como o grupo do utilitário shutdown. Agora, para ativar o bit SGID, utilizamos o chmod na forma octal ou literal:
# chmod 2755 /sbin/shutdown
Ou
# chmod g+s /sbin/shutdown
No formato octal, veja que o número 2 corresponde ao bit SGID, enquanto os outros 3 números correspondem às permissões normais do arquivo. Já no formato literal, utilizamos g+s para ativar (+) a permissão especial de execução (s) para o grupo (g).
As novas permissões do shutdown são agora:
# ls -l /sbin/shutdown
-rwxr-sr-x 1 root shutdown 18516 2005-01-04 19:43 /sbin/shutdown
Observe que o "x" das permissões do grupo foi substituída por um "s", indicando que o bit SGID está ligado.
Por fim, basta criar um link simbólico para o shutdown no diretório /bin/, para que os usuários possam executá-lo sem digitar o caminho completo.
# ln -s /sbin/shutdown /bin/shutdown
Agora, para permitir que algum usuário execute o shutdown, basta adicioná-lo ao grupo shutdown. Por exemplo, vamos adicionar o usuário davidson:
# addgroup shutdown davidson
Assim, o usuário davidson poderá executar o shutdown normalmente, mas os outros usuários não. Sempre que se quiser que determinado usuário execute o shutdown, ele deverá ser adicionado ao grupo shutdown.
O bit SGID também pode ser aplicado a diretórios, e seu efeito neles é forçar os arquivos criados a pertencerem ao mesmo grupo do diretório pai, independente de quem seja o criador do arquivo. Assim, suponha um diretório que pertença ao grupo vendas e possua o bit SGID ligado. Então, todos os arquivos criados dentro desse diretório pertencerão ao grupo vendas, independente do grupo primário do dono do arquivo.
STICKY
O bit STICKY é utilizado em diretórios, para proteção de arquivos de uma forma menos radical, digamos assim. Como você sabe, para evitar que outros usuários apaguem seus arquivos, basta colocá-los dentro de um diretório sem permissão de escrita para os outros usuários. Entretanto, isso também faz com que os usuários não possam criar ou modificar nenhum arquivo dentro desse diretório, e é aí que o bit STICKY entra.
Suponha um diretório chamado documentos que possui o bit STICKY ligado, e com permissões de leitura e escrita para todos os usuários. Dessa forma, qualquer usuário pode criar arquivos dentro desse diretório.
Consideremos que os usuários davidson, fernando e frederico criaram os seguintes arquivos dentro desse diretório:
$ ls -l documentos
-rw-r--r-- 1 davidson davidson 0 2005-03-11 10:43 debian-gnu-linux.sxw
-rw-r--r-- 1 fernando fernando 0 2005-03-11 10:43 macro-linux.sxw
-rw-r--r-- 1 frederico frederico 0 2005-03-11 10:43 software-livre.pdf
Os usuários podem então modificar todos esses arquivos. Mas somente o usuário davidson pode excluir o arquivo debian-gnu-linux.sxw, somente o usuário fernando pode excluir o arquivo macro-linux.sxw e somente o usuário frederico pode excluir o arquivo software-livre.pdf.
Para ligar o bit STICKY num diretório, utilizamos o chmod no formato octal ou literal. Como exemplo, vamos ligar o bit STICKY no diretório documentos/.
$ chmod 1755 documentos
Ou
$ chmod o+t documentos
No formato octal, o número 1 corresponde ao bit STICKY, enquanto os outros 3 dígitos correspondem às permissões simples do diretório. No formato literal, utilizamos o+t, para ativar (+) a restrição da exclusão de arquivos (t) para os outros usuários (o).
Observe agora as novas permissões do diretório documentos/:
$ ls -ld documentos
drwxr-xr-t 2 davidson davidson 160 2005-03-11 10:43 teste
Observe que o bit "x" das permissões dos outros usuários foi substituído por um "t", indicando que o bit STICKY está ligado.
Agora, basta dar permissão de escrita para os outros usuários, para que eles possam criar arquivos dentro desse diretório:
$ chmod o+w documentos
E pronto. Qualquer usuário poderá criar arquivos dentro do diretório documentos/, mas os seus arquivos estarão a salvo, pois ninguém poderá exclui-los a não ser você próprio.