Product SiteDocumentation Site

9.3. Gerenciando direitos

O Linux é definitivamente um sistema multiusuá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 porque existem alguns interessantes e relativamente avançados usos desconhecidos.

9.3.1. Proprietários(as) e permissões

Cada arquivo ou diretório tem permissões específicas para três categorias de usuários(as):
  • seu proprietário(a) (simbolizado por u como em "user");
  • seu grupo proprietário(a) (simbolizado por g como em “group”), representando todos os membros do grupo;
  • outros (simbolizado por o como em “other”).
Os três tipos básicos de direitos podem ser combinados:
  • leitura (simbolizado por r como em “read”);
  • escrita (ou modificação, simbolizado por w como em “write”);
  • execução (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 copiar), acesso a escrita permite alterá-lo, e acesso de execução permite rodá-lo (o que só vai funcionar se for um programa).
A directory is handled differently. Read access gives the right to consult the list of its entries (files and directories), write access allows creating or deleting files, and execute access allows “traversal“, the possibility crossing through it (especially to go there with the cd command). Being able to cross through a directory without being able to read it gives permission to access the entries therein that are known by name, but not to find them if you do not know their existence or their exact name.
Três comandos controlam as permissões associadas a um arquivo:
  • chown usuário(a) arquivo muda o(a) proprietário(a) do arquivo;
  • chgrp grupo arquivo altera o grupo;
  • chmod direitos arquivo muda as permissões do arquivo.
Há duas formas de apresentar direitos. Entre elas, 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(as) (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) 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(as) usuários(as). 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(as), 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 1 para execução. Associamos cada combinação de direitos com a soma dos valores. Cada valor é então atribuído a diferentes categorias de usuários(as), colocando-os de ponta a ponta na ordem usual (proprietário(a), grupo, outros).
Por exemplo, o comando chmod 754 arquivo definirá os seguintes direitos: leitura, escrita e execução para o(a) proprietário(a) (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 (zero) significa que não há direitos; assim chmod 600 arquivo concede direito de leitura e gravação ao(à) proprietário(a), e nenhum direito para qualquer outra pessoa. As combinações certas mais frequentes 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(a) proprietário(a) 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 - Listas 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(a) usuário(a) deseja compartilhar um arquivo com outro(a) usuário(a), e esse(a) usuário(a) só deve poder ler o arquivo, mas não escrever nele 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, 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, por exemplo acl(5) contém mais informações.