Sunday, June 29, 2008

Lista de Controle de Acesso - ACLs

Permissões de arquivos


Quando falamos em permissões de arquivos em Linux, logo imaginamos a utilização do comando chmod, seja com o formato "literal", seja com o formato octal, que definem os três grupos conhecidos de permissões: dono, grupo e outros.

As permissões podem ser habilitadas ou desabilitadas, sendo que podem ser, de leitura (r), de escrita (w) e de execução (x). Quando desabilitadas, as permissões exibem o símbolo - no local onde deveria estar aquela permissão em particular.

Como exemplo, podemos ver a saída do comando ls -l
-rw-r--r-- 1 fulano fulano       260 2008-05-25 17:37 teste

... que indica, pelo primeiro caractere (-) que estamos lidando com um arquivo comum. Os três caracteres seguidos indicam as permissões do dono do arquivo (usuários fulano), nesse caso fulano tem permissão de leitura e escrita, mas não pode executar o arquivo teste.

Os três caracteres seguintes indicam as permissões do grupo dono do arquivo, que não por coincidência tem o mesmo nome do dono. No nosso caso temos permissão de leitura, somente.

Os últimos três caracteres indicam as permissões dos usuários que não o dono ou que não sejam integrantes do grupo dono do arquivo. Que indicam, no exemplo, apenas leitura.

Dessa maneira, podemos indicar para o sistema operacional apenas para essas três "criaturas" do sistemas. Mas e os outros? Como fazer para definir diferentes permissões para usuários ou grupos de usuários? É possível?

Sim, é possível determinar uma permissão para um único usuário do sistema, seja para um arquivo ou diretório. Para isto basta que seja habilitado o suporte a ACL no Linux, inserindo no arquivo /etc/fstab a opção acl no campo options do ponto de montagem que terá o controle de permissões mais refinado. Um bom candidato para tal mudança é a partição onde montamos o diretório /home e um exemplo da linha a ser alterada pode ser o seguinte:

/dev/sda5  /home  ext3 acl,defaults 0   0

Feita a alteração podemos executar o seguinte comando como root para remontar o /home:
mount -o remount /home


Dando permissões diferentes para usuários direntes


Digamos que o nosso amigo divide o computador com mais três pessoas que resolveram não usar o mesmo login para usar o micro. Vamos dar nomes aos usuários: josé, maria, joão e roberta.
Imaginemos que o usuário josé gostaria de ceder permissão de leitura e escrita para maria, mas não gostaria que joão pudesse ver o conteúdo do arquivo, coisa que roberta pode fazer.

Como o diretório /home agora tem suporte a acl, josé pode criar seu relatório de trabalho (relatório.odt) no seu diretório Documentos (/home/jose/Documentos/relatório.odt).

Em primeiro lugar podemos verificar como estão as permissões do arquivo, com acl. Para isso usamos o comando getfacl.
getfacl ~/Documentos/relatório.odt

A saída do comando deve ser a seguinte:
getfacl: Removing leading '/' from absolute path names
# file: home/jose/Documentos/relatório.odt
# owner: jose
# group: jose
user::rw-
group::r--
other::r--

Usamos o comando setfacl para determinarmos permissões individuais para usuários ou coletivas para grupos.

Então, para darmos permissão de escrita para a usuária maria no arquivo relatório.odf, devemos executar a seguinte linha de comando:
setfacl -m u:maria:rw ~/Documentos/relatório.odt

Se quisermos dar permissão de escrita e leitura para a usuária maria nos arquivos do diretório existente ~/Documentos/maria e todos os arquivos que nele forem criados, basta usar o comando:
setfacl -dm u:maria:rw ~/Documentos/maria/

E quando não quisermos que maria acesse o diretório com aquelas permissões, podemos retirá-las com o comando:
setfacl -x u:maria ~/Documentos/maria/

Para setarmos permissões para grupos de usuários, devemos substituir o u:nome_de_usuario:premissões por g:nome_do_grupo:permissões

Referências


http://www.suse.de/~agruen/acl/linux-acls/online/
man getfacl
man setfacl
http://www.infowester.com/linmount.php

Por hoje é só.

Saúde e Paz a todos.

No comments: