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:

'''</PRE> <PRE class=comandos>ls -ld dirtestes <span class=saida>drwxrwxr-x+ 2 root root 4096 Jan 4 16:31 dirtestes</span> </PRE>

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

Referências

Saiba mais



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