você está aqui: Home  → Arquivo de Mensagens

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


Veja a relação completa dos artigos de Rubens Queiroz de Almeida