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.
9.3.1. Owners and Permissions
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”).
Three basic types of rights can be combined:
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 tem o nome conhecido, 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 a 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 sofrerão alterações. A letra a
, para "todos" (“all” em inglês), abrange as três categorias de usuários, de modo que a=rx
concede a 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).
For instance, the chmod 754 file
command will set the following rights: read, write and execute for the owner (since 7 = 4 + 2 + 1); read and execute for the group (since 5 = 4 + 1); read-only for others. The 0
(zero) means no rights; thus chmod 600 file
allows for read/write rights for the owner, and no rights for anyone else. The most frequent right combinations are 755
for executable files and directories, and 644
for data files.
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.
9.3.2. ACLs - Lista de Controle de Acesso
Muitos sistemas de arquivos, por ex. Btrfs, Ext3, Ext4, JFS, XFS, etc., suportam o uso de Listas de Controle de Acesso (ACLs). Eles estendem os recursos básicos de propriedade e permissão de arquivo, descritos na seção anterior, e permitem um controle mais refinado de cada objeto (arquivo). Por exemplo: Um usuário deseja compartilhar um arquivo com outro usuário e esse usuário só deve poder ler o arquivo, mas não escrevê-lo ou alterá-lo.
Para alguns dos sistemas de arquivos, o uso de ACLs é ativado por padrão (por exemplo, Btrfs, Ext3, Ext4). Para outros sistemas de arquivos ou sistemas mais antigos, ele deve ser ativado usando a opção de montagem acl
- diretamente no comando mount
ou em /etc/fstab
. Da mesma forma, o uso de ACLs pode ser desativado usando a opção de montagem noacl
. Para sistemas de arquivos Ext*, também é possível usar o comando tune2fs -o [no]acl /dev/device
para ativar/desativar o uso de ACLs por padrão. Os valores padrão para cada sistema de arquivos geralmente podem ser encontrados em suas páginas de manual homônimas na seção 5 (sistema de arquivos(5)) ou em mount(8).
Depois de ativar as ACLs, as permissões podem ser definidas usando o comando setfacl(1), enquanto getfacl( 1) permite recuperar as ACLs para um determinado objeto ou caminho. Esses comandos fazem parte do pacote acl. Com setfacl
também é possível configurar arquivos ou diretórios recém-criados para herdar permissões do diretório pai. É importante observar que as ACLs são processadas em sua ordem e que uma entrada anterior adequada à situação tem precedência sobre entradas posteriores.
Se um arquivo tiver ACLs definidas, a saída do comando ls -l
mostrará um sinal de adição após as permissões tradicionais. Ao usar ACLs, o comando chmod
se comporta um pouco diferente e umask
pode ser ignorado. A extensa documentação, e. g. acl(5) contém mais informações.