De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Permissões de arquivos e diretórios em Sistemas Unix (setgid, setuid, sticky)
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 06 de Maio de 1997
A última linha de defesa contra invasores do sistema são as permissões
oferecidas pelo sistema. Cada arquivo ou diretório possui três grupos de
bits de permissão a ele associados: um grupo para o usuário ao qual o
arquivo pertence, um grupo para os usuários do grupo ao qual o arquivo está
associado e um grupo para todos os demais usuários. Cada grupo contém três
grupos de bits idênticos que controlam:
Acesso de leitura(read)
Se este bit estiver ligado, o arquivo ou diretório possui acesso de leitura. Em
se tratando de um diretório, esta permissão permite a um usuário ver o conteúdo
de um diretório mas não lhe permite criar novos arquivos no referido diretório.
Acesso de gravação (write)
Se este bit estiver ligado, o arquivo ou diretório pode ser modificado.
Em se tratando de um diretório, a permissão de escrita implica a
capacidade de criar, apagar ou renomear arquivos. Note que a permissão
para remover um arquivo não é determinada pelas permissões do arquivo
mas sim pelas permissões do diretório que o contém.
Acesso de execução (execute)
Se este bit estiver ligado, o arquivo ou diretório pode ser executado
(pesquisado). No caso de um diretório, a permissão de execução implica
que os arquivos nele contidos podem ser acessados
Além destas permissões, existe um quarto bit que se ligado atribui as
seguintes propriedades aos arquivos e diretórios:
setuid
Este bit, se ativado no grupo de permissões do dono do arquivo, indica que
todos os que executarem este programa o estarão fazendo com os privilégios
do proprietário do arquivo. Por exemplo, o programa sendmail
é setuid
root
, o que lhe permite gravar arquivos na fila de mensagens do sistema,
o que é vedado a usuários normais. Este bit não possui significado em arquivos
não executáveis
setgid
Este bit atua da mesma forma que o setuid bit, com a diferença que o
programa será executado com as permissões do grupo ao qual pertence.
sticky
O sticky bit instrui o sistema operacional a atuar diferentemente com
relação à imagem executável do arquivo. É remanescente de versões antigas
do Unix e possui pouco uso hoje. Diretórios que possuem modo 777 que têm
este bit ligado não podem ser removidos (/tmp
por exemplo).
Shell scripts que possuem os bits setuid ou setgid ligados
não são seguros, não importa quantas precauções tenham sido tomadas ao
escrevê-los. Tais scripts nunca devem ser permitidos em qualquer sistema Unix.
Nas versões mais recentes de sistemas Unix foi acrescentado um novo
significado ao sticky bit quando aplicado a diretórios. Quando este bit é
ativado em um diretório, usuários não podem apagar ou renomear arquivos
pertencentes a outros usuários. Isto é tipicamente útil no caso de
diretórios como /tmp
. Normalmente o diretório /tmp
possui acesso universal
para gravação, permitindo que qualquer usuário remova arquivos pertencentes
a qualquer outro usuário. Ativando o sticky bit no diretório /tmp
, os
usuários podem remover apenas seus próprios arquivos. Para ativar o sticky
bit em um diretório, use o comando:
# chmod o+t /tmp
ou
# chmod 1777 /tmp
Ao emitirmos o comando:
# ls -ld /tmp
drwxrwxrwt 4 bin bin 3584 May 5 14:17 /tmp
O caractere t
em drwxrwxrwt
indica que o sticky bit deste
diretório está ligado.
Ao se criar um arquivo normalmente todas as permissões são ativadas. Como
isto raramente é o desejado, o valor do umask
é usado para modificar o grupo
de permissões com as quais um arquivo é criado. Ou seja, da mesma forma com
que o comando chmod
especifica quais bits devem ser ligados, o comando umask
especifica quais bits devem ser desligados.
umask 022