você está aqui: Home  → Arquivo de Mensagens

Permissões no Linux - além do chmod

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 07 de janeiro de 2013

As permissões originais para acesso a arquivos e diretórios em sistemas *nix são bem restritas. Basicamente estas permissões definem o que o dono do arquivo ou diretório pode fazer, ou então um grupo de pessoas ou todos os demais.

Se eu quiser dar uma permissão apenas para mais uma pessoa, a minha opção seria criar um grupo de apenas uma pessoa e autorizar este grupo a acessar o arquivo ou diretório. Enfim, fica muito complicado quando precisamos regular o acesso de uma maneira mais detalhada.

Já há muitos anos existe a possibilidade de se fazer este controle mais refinado usando listas de acesso, conhecidas por ACL ou Access Control List.

Por padrão, em sistemas GNU/Linux a partir da versão 2.6, o módulo para controle de acesso por ACLs já faz parte da compilação normal do kernel. Em determinados sistemas não é necessário fazer nada para ativar este recurso, porém em outros tipos de sistema é necessário definir no arquivo /etc/fstab que se deseja implantar o controle de acesso por ACLs.

Instalação

Tudo isto é feito a partir do conjunto de programas contidos no pacote acl. Para instalar em sistemas Debian GNU/Linux e derivados, digite, como root, o seguinte comando:

  # apt-get install acl

Para outros sistemas (Mandriva, CentOS, SuSE, etc), basta utilizar o instalador padrão da distribuição, com o mesmo nome, acl:

  • Mandriva

      # urpmi acl 
    

  • Fedora, CentOS, RedHat:

      # yum install acl
    

  • SuSE

      # yast2 -i acl
    

Como usar

O uso é bastante simples. Embora os programas ofereçam um grande número de opções, para atribuirmos as permissões corretas basta conhecer algumas diretivas.

O pacote acl contém os seguintes arquivos (LinuxMint):

  $ dpkg -L acl
  /.
  /bin
  /bin/setfacl
  /bin/chacl
  /bin/getfacl
  [... várias linhas removidas ...]
  /usr/bin/setfacl
  /usr/bin/chacl
  /usr/bin/getfacl

Para conceder ao usuário "queiroz" acesso de leitura, escrita e gravação no diretório "testes", digitar, como root, o seguinte comando:

  setfacl -m u:queiroz:rwx testes

O comando que define as permissões chama-se setfacl (set file access control list).

Os parâmetros fornecidos também são de fácil compreensão:

-m modifica as permissões de acesso do arquivo ou diretório
u modificações se aplicam a um usuário
queiroz usuário que receberá as permissões de acesso
rwx estão sendo concedidas permissões de leitura (r), gravação (w) e execução (x)
testes nome do arquivo a que terá acesso o usuário queiroz

Uma vez emitido o comando, vamos verificar se está tudo correto. Para isto usamos o comando getfacl:

  $ getfacl testes
  # file: testes
  # owner: root
  # group: root
  user::rwx
  user:queiroz:rwx
  group::r-x
  mask::rwx
  other::r-x

Como podemos ver, o dono do arquivo é o superusuário (root) e o usuário queiroz recebeu permissões de leitura, escrita e execução neste arquivo (user:queiroz:rwx)

Para saber se um arquivo ou diretório possui uma lista de acesso, digite:

  $ ls -l testes 
  -rw-rwxr--+ 1 root root 0 Jan  4 16:29 testes

Observe o sinal de "+" em -rw-rwxr--+. Este sinal indica que o arquivo possui uma lista de acesso (acl) definida.

Se emitirmos o mesmo comando para um diretório temos:

  ls -ld dirtestes
  drwxrwxr-x+ 2 root root 4096 Jan  4 16:31 dirtestes

Podemos notar o mesmo sinal de "+" ao final da lista de permissões padrão.

Importante, o comando setfacl pode ser aplicado recursivamente a uma árvore de diretórios e a todos os arquivos contidos nesta árvore:

  # setfacl -R -m u:queiroz:rwx dirtestes
  # ls -lR dirtestes
  dirtestes:
  total 0
  -rw-rwxr--+ 1 root root 0 Jan  4 16:34 arquivo1.txt
  -rw-rwxr--+ 1 root root 0 Jan  4 16:34 arquivo2.txt
  -rw-rwxr--+ 1 root root 0 Jan  4 16:34 arquivo3.txt
  -rw-rwxr--+ 1 root root 0 Jan  4 16:34 arquivo4.txt
  -rw-rwxr--+ 1 root root 0 Jan  4 16:34 arquivo5.txt

Podemos ver o sinal de "+" nas permissões de todos os arquivos contidos no diretório dirtestes.

Para remover as listas de acesso, emita, como root, o comando:

  setfacl -b -R dirtestes

O comando setfacl aceita também a criação de acls para grupos. Neste caso, basta substituir a diretiva "u" (user) pela diretiva "g" (group):

  # setfacl -R -m g:suporte:rwx dirtestes

No exemplo acima, está sendo concedida permissão de leitura, gravação e execução para o grupo suporte.

Problemas

Como já mencionado, o suporte a ACLs pode variar de distribuição para distribuição. Se ao emitir o comando setfacl você receber uma mensagem como

  $ setfacl -m u:queiroz:r testes
  setfacl: testes: Operation not supported

significa que você precisa habilitar o suporte a ACLs no filesystem em questão.

Para isto, edite o arquivo /etc/fstab e na partição em que se desejar habilitar o uso de ACLs, acrescente a diretiva acl:

  UUID=64f59ab1-d7f4-4fbc-b797-8b3eb7924d34 /home ext3 defaults,acl 0 2

Finalmente, para habilitar o uso das listas de acesso, você precisa montar novamente a(s) partição(ões):

  mount / -o remount,acl

No exemplo acima, a partição raiz foi remontada com a opção acl. Depois disto, tudo deve estar funcionando perfeitamente.

Referências

Saiba mais



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

 

 

Opinião dos Leitores

jeferson
30 Jan 2015, 08:33
Encontramos um problema com o stick bit de exclusão apenas pelo criador do arquivo.
Criamos a Regra para o diretório /dados/servidor/teste_ACL/ para testar
Demos o +t no comando de criação do diretório principal e tudo funciona como o esperado
Porém, ao criar um sub-diretório ele não adquiri os atributos do diretório principal.
Ex. mkdir /dados/servidor/teste_ACL/teste/
neste caso a pasta "teste" subpasta de "teste_ACL" (onde tem o atributo T) não adquiri o atributo, sendo preciso então aciona-lo manualmente. Mas isso só acontece com as subpastas e seus arquivos, os arquivos dentro da pasta principal "teste_ACL" adquirem os atributos.

A minha pergunta é: Tem como eu automatizar o atributos para os subdiretórios do diretório principal?
---
Att,
Jeferson GDInfo
Helton
08 Jan 2013, 15:50
Excelente dica. Também, pode-se copiar as permissões de uma pasta para outra (incluindo os arquivos), usando:
getfacl /teste | setfacl -M- -R /novo_teste
Tafarel Carvalho
07 Jan 2013, 12:15
Muito bom, isto deveria esta no guia foca e nos equivalentes!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script