9.3. Gerenciando Direitos
O Linux é definitivamente um sistema multi-usuário, então é necessário prover um sistema de permissões para controlar um conjunto de operações autorizadas em arquivos e diretórios, o que inclui todos os recursos e dispositivos do sistema (em um sistema Unix, qualquer dispositivo é representado por um arquivo ou diretório). Esse princípio é comum a todos os sistemas Unix, porém o lembrete é sempre útil, especialmente porquê existem alguns interessantes e relativamente avançados usos desconhecidos.
Cada arquivo ou diretório têm permissões específicas para três categorias de usuários:
seu dono (simbolizado por u
como em "user");
o dono do grupo (simbolizado por g
como em “group”), representando todos os membros do grupo;
os outros (simbolizado por o
como em “other”).
Os três tipos de direitos podem ser combinados:
leitura (simbolizado por r
como em “read”);
escrita (ou modificação, simbolizado por w
como em “write”);
executar (simbolizado por x
como em “eXecute”).
No caso de um arquivo,essas permissões são facilmente compreendidas: acesso de leitura permite ler o conteúdo (incluindo copia), acesso a escrita permite alterá-lo, e permissão de executar permite rodá-lo (o que apenas irá funcionar se ele for um programa).
Um diretório é gerenciado de maneira diferente. O acesso a leitura dá o direito de consultar a lista de suas entradas (arquivos e diretórios), acesso a escrita permite criar e apagar arquivos, e acesso a execução permite navegar por ele (especialmente para usar o comando cd
). Sendo possível navegar pelo diretório sem ser capaz de lê-lo, dá a permissão de acessar as entradas dentro dele que são conhecidas por nome, mas não para encontrá-las se você não sabe de sua existência ou nome exato.
Três comandos controlam as permissões associadas a um arquivo:
chown usuário arquivo
muda o dono do arquivo;
chgrp grupo arquivo
altera o grupo;
chmod direitos arquivo
muda as permissões do arquivo.
Há duas formas de apresentar direitos. Entre eles, a representação simbólica é provavelmente o mais fácil de entender e lembrar. Ela envolve os símbolos das letras mencionadas acima. Você pode definir os direitos de cada categoria de usuários (u
/g
/o
), definindo-as explicitamente (com =
), adicionando (+
), ou subtraindo (-
). Assim, as permissões u=rwx,g+rw,o-r
fornecem ao proprietário a permissão de ler, escrever e executar, acrescenta permissão de ler e escrever para o grupo proprietário, e remove a permissão de leitura para outros usuários. Direitos não alterados pela adição ou subtração de tal comando não sofresão alterações. A letra a
, for “all”, para "todos", abrange as três categorias de usuários, de modo que a=rx
concede todas as três categorias os mesmos direitos (leitura e execução, mas não de escrita).
A representação numérica (octal) associa cada direito com um valor: 4 para leitura, 2 para gravação, e um para execução. Nós associamos cada combinação de direitos com a soma das figuras. Cada valor é então atribuído a diferentes categorias de usuários, colocando-os de ponta a ponta na ordem usual (proprietário, grupo, outros).
Por exemplo, o comando chmod 754 arquivo
definirá os seguintes direitos: leitura, escrita e execução para o proprietário (já que 7 = 4 + 2 + 1); leitura e execução para o grupo (já que 5 = 4 + 1); para os outros somente leitura . O 0
significa que não há direitos; assim chmod 600 arquivo
concede direito de leitura e gravação ao proprietário, e nenhum direito para qualquer outra pessoa. As combinações certas mais freqüentes são 755
para arquivos executáveis e diretórios, e 644
para arquivos de dados.
Para representar os direitos especiais, você pode prefixar um quarto dígito para este número de acordo com o mesmo princípio, onde os bits setuid
, setgid
e sticky
são 4, 2 e 1, respectivamente, chmod 4754
associará o setuid
aos direitos descritos anteriormente.
Observe que o uso da notação octal só permite definir todos os direitos de uma só vez em um arquivo; você não pode usá-lo para simplesmente adicionar um novo direito, como acesso de leitura para o proprietário do grupo, uma vez que você deve levar em conta os direitos já existentes e calcular o novo valor numérico correspondente.