De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
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:
# urpmi acl
# yum install acl
# yast2 -i acl
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:
$ sudo 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:
$ sudo 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.
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 ext4 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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários