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).
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). Conseguir navegar pelo diretório sem ser capaz de lê-lo dá a permissão de acessar as entradas dentro dele que são conhecidas pelo nome, mas não para encontrá-las se você não souber de sua existência ou nome exato.
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.