Sie sind auf Seite 1von 5

Usando ACL para permisses avanadas no Linux

Algum um tempo atrs eu me perguntava se s poderiam existir trs permisses nos sistemas Unix-Like, a
permisso de dono, grupo e outros, o que me limitava bastante, principalmente quando se tratavam de fileservers
(servidores de arquivo). Em um sistema Linux (ou Unix), as permisses de arquivos so definidas pelo modo do
arquivo, que contm nove bits que determinam as permisses de acesso ao arquivo, mais trs bits especiais. Este
mecanismo permite definir justamente a permisso para os trs tipos de classes de usurios: o proprietrio do
arquivo, o grupo e outros. Este mecanismo muito simples, e com uma combinao destes bits, muitas
permisses podem ser modeladas.
Utilizvamos Samba na empresa em que trabalhei e precisvamos de mais do que esses trs tipos de permisses
de usurios em certas pastas, o Linux ento j no estava me satisfazendo. A necessidade era definir uma
permisso para um grupo e outra para outro grupo, mas como fazer isso sendo que s poderia existir apenas um
grupo dono daquela pasta ou arquivo?
Eu sabia que o Microsoft Windows j suportava a bastante tempo esse tipo de permisso, desde que a partio do
sistema e/ou qualquer outra que ele fosse administrar estivesse formatada em NTFS, ou seja, voc conseguia
definir para vrios grupos ou vrios usurios o tipo de permisso que ele exercia naquele diretrio, quantas vezes
necessitasse. Um bom exemplo leitura para certos usurios/grupos, leitura e escrita para alguns outros
usurios/grupos, negado para os demais, e o que mais necessitar.
Eu precisava fazer isso, pois algumas aplicaes requerem mais permisses do que este modelo que o Unix
oferece. Iniciei minha pesquisa em forums e diversos sites (alguns em ingls). Foi ento que encontrei as ACL
(Access Control List), um sistema muito interessante onde voc consegue definir qualquer tipo de permisso para
qualquer usurio ou grupo. O Linux j suporta nativamente desde o Kernel 2.6. Com ACL podemos ter um modelo
mais refinado de permisses. Alm do proprietrio do arquivo, do grupo e de outros, que o Unix nos oferece,
usurios e grupos adicionais podem ter o acesso modelado, no sendo identificados pelo sistema, simplesmente
como "outros" .
Comecei a testar e isso me surpreendeu bastante, enfim, voc consegue fazer qualquer permisso do mesmo
modo que voc faz no Windows. E suportado por parties ReiserFS, Ext2, Ext3, JFS e XFS.

Explorando
Quando voc executa o comando $ ls -l em uma pasta qualquer que no est com as definies de ACL voc v
essa sada:

drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x

3
2
2
2

root
root
root
root

root
root
root
root

88 2003-09-15 10:07 dhcp3


136 2007-06-01 11:55 dhcpc
144 2005-03-25 00:59 dictionaries-common
88 2006-02-22 18:50 discover.conf.d

Exemplo de sada do ls -l
Observe que o usurio dono o root e o grupo tambm o root, mas no era isso que eu quero que chame a
ateno, notem na estrutura da primeira coluna: drwxr-xr-x, significa que d um diretrio, os trs primeiros
campos so os privilgios do dono do arquivo, no caso rwx leitura escrita e execuo (para que os diretrios
possam ser acessados, obrigatrio ter a opo x), a segunda parte (do quarto ao sexto campo) o grupo, que
nesse caso est configurado para somente leitura e execuo (r-x), e a terceira parte (do stimo ao nono campo)
so os outros, enfim, qualquer usurio que faa logon nesse computador, tem a mesma permisso do grupo (para
esse caso) que leitura e execuo (r-x).
Quando voc instala as ACL e personaliza e refina a configurao de permisses do diretrio, voc v essa sada
com o comando $ ls -l:

drwxrwxr-x 9 usuariodono grupo 288 2007-09-26 10:10 Pasta1


drwxrwx---+ 2 usuariodono grupo 3208 2007-10-02 17:35 Pasta2
drwxrwx---+ 5 usuariodono grupo 85512 2007-10-03 08:59 Pasta3
drwxr-x--- 2 usuariodono grupo 1448 2007-09-24 17:07 Pasta4

Exemplo de sada do ls -l
Voc pode observar que o primeiro diretrio Pasta1 ainda est com as permisses comuns do Linux, sem ACL.
Notem os 2 prximos diretrios, no final, onde mostram as permisses comuns, ainda tem um sinal +, que
significa que estes diretrios esto personalizados, ou seja, utilizam ACL. Posteriormente voc ver como saber

afinal qual a permisso real para esse arquivo, ou ainda, o que tem por trs desse sinal de + se voc preferir.

Comeando a Instalao das ferramentas


Para comear a instalao das ferramentas, primeiro veja qual o kernel do seu sistema, para isso utilize o
comando:

# uname -a

A sada desse comando deve ser algo parecido com isso:

Linux computador 2.6.17.6-slh-up-1 #1 PREEMPT Sun Jul 16 02:05:58 CEST 2006 i686
GNU/Linux.

Reparem que o kernel que estou utilizando (meio velhinho por sinal), o 2.6.17.6. Como dito anteriormente, se o
seu kernel for o 2.6, ele j suporta as ACL nativamente, ou seja, no necessita de instalao do mdulo.
Entretanto, se seu kernel no for 2.6 ou superior (por exemplo, kernel 2.4) voc dever instalar o mdulo de ACL e
recompilar o kernel, o que um pouco difcil e trabalhoso, portanto no abordaremos nesse tutorial.
Agora depois de checado e o seu kernel, voc j pode comear a instalao das ferramentas. Irei me aprofundar
mais em distribuies baseadas no debian (apt-get), mas vou comentar sobre distribuies que utilizam urpmi e o
yum.
Para instalar as ferramentas de administrao de ACL no debian ou outras distros que utilzam apt-get voc deve
utilizar o comando:

# apt-get update
# apt-get install acl

Para instalar no mandriva ou outras distros que utilizam o urpmi voc deve utilizar o comando:

# urpmi acl

Para instalar no fedora ou outras distros que utilizam o yum voc deve utilizar o comando:

# yum install acl

Para instalar no SuSE utilize o comando:

# yast2 -i acl

Se voc prefere fazer download das ferramantas e instalar manualmente, voc pode encontrar para download no
site http://acl.bestbits.at/download.html

Habilitando ACL
Depois que as ferramentas de console para uso do ACL forem instaladas, para comear a utilizao voc deve
habilitar a ACL para a partio desejada. Para isso edite o arquivo /etc/fstab, adicione a string "acl" nas opes do
sistema de arquivo desejado:

# vi /etc/fstab

Veja abaixo a string "acl" em negrito nas opes:

# /etc/fstab: filesystem table.


#
# filesystem mountpoint type options dump pass

/dev/sda1 / reiserfs noatime,acl,notail 0 1


/dev/sda2 none swap sw 0 0
Se o seu sistema de arquivos (partio) j est montado, voc pode reinciar o sistema ou simplesmente remontar
a partio:

# mount / -o remount,acl

Configurando ACL
Com a instalao das ferramentas e nenhum erro aps habilitar as ACL para o sistema de arquivos, ento agora
vamos colocar a mo na massa.
Supondo que voc tenha um diretrio e necessite que dois grupos tenham permisses diferentes, ou ainda
personalizar dois usurios para permisses diferentes, vamos imaginar essa situao.
Primeiro vamos criar uma pasta e alterar os donos dela normalmente como se faz:

# mkdir pasta1
# chown user pasta1
# chgrp desenv pasta1

Pronto, criamos o diretrio pasta1 e configuramos para que o usuario "user" seja o dono e o grupo "desenv" seja o
grupo dono, agora vamos definir permisses para a pasta:

# chmod 750 pasta1

Agora configuramos para que o dono do diretrio (usuario "user") tenha acesso total (rwx), o grupo tenha acesso
somente de leitura (r-x) e os outros no tenham nenhum acesso (---) (deny).
Vamos agora refletir, como que eu poderia definir para que mais usurios tivessem controle total (rwx) sendo que
eu preciso que o grupo "desenv" fique com permisses de acesso para somente de leitura? Na verdade no existe
como, se voc precisa que mais um grupo acesse com controle total (rwx), voc teria que trocar as permisses de
acesso do grupo "desenv" para controle total (rwx), e acrescentar usurios que necessitam de controle total no
grupo "desenv" e mudar a permisso, de modo que o grupo "desenv" obtenha controle total a pasta. Esse tipo de
problema acaba, graas a flexibilidade das ACL.

Personalizando/refinando permisses de arquivo com ACL


Para utilizar as ACL vamos usar 2 comandos basicos, setfacl e getfacl, o set para definir e o get para saber
quais foram as permisses definidas (ou seja o que tem por trs do +)
Supondo que eu tenha o grupo "edita" e quero que esse grupo tenha controle total para a pasta1, voc deve
utilizar o seguinte comando:
Primeiramente vamos criar o diretrio

# mkdir pasta1
Definir para controle total do grupo e usurio (root), e leitura e execuo para outros

# chmod 775 pasta1/


Agora vamos executar o comando ls -l para ver o como est sendo exibido:

# ls -l
total 2
drwxrwxr-x 2 root root 1024 2008-05-06 11:41 pasta1

Vamos ento aplicar uma ACL simples para que o grupo edita possa ter execuo total

# setfacl -m g:edita:rwx pasta1/


Executando o comando ls -l

# ls -l
total 2
drwxrwxr-x+ 2 root root 1024 2008-05-06 11:41 pasta1
Reparem que agora existe um + aps os 9 digitos binrios, o que significa que existem permisses extras alm do
j permitido por padro.
Vamos pegar o resultado agora com o comando getfacl, ele ir nos mostrar como esto aplicadas as ACL (o que
tem por trs do +).

# getfacl pasta1/
# file: pasta1
# owner: root
# group: root
user::rwx
user:root:rwx
group::rwx
group:edita:rwx
mask::rwx
other::r-x
Podemos observar que as ACL foram corretamente aplicadas, de modo que o grupo edita capaz de editar, ler e
listar o contedo da pasta1.
Agora essa pasta est com as ACL definidas, portanto, podemos testar, entrando com os usurios bloqueados,
usurios que so aceitos somente para leitura, usurios que so aceitos para controle total (leitura e escrita e etc).

Mais exemplos
Se necessitar que um usurio tenha apenas permisso de leitura em um determinado arquivo voc pode usar a
seguinte sintaxe abaixo:

# setfacl -m u:usuario:r-- arquivo.txt


Se for um grupo altere para "g:grupo" e assim por diante, infinito o que voc pode fazer com essas ACL.

Configuraes para o Samba


Para que o samba consiga interpretar corretamente as ACL voc deve seguir o exemplo abaixo:
Adicione o parmetro map acl inherit = Yes no compartilhamento no qual voc deseja ativar ACL (ou na pasta
compartilhada que voc alterou permisses e deseja efetivar as ACL).
Por padro eu crio o meu compartilhamento da maneira descrita abaixo:

[compartilhado]
comment = compartilhado
path = /compartilhado
read only = No
create mask = 0777
force create mode = 0777
directory mask = 0777
force directory mode = 0777
map acl inherit = Yes
No esquea depois de alterar as ACL de reiniciar o samba para que ele aplique as configuraes corretas.

# /etc/init.d/samba restart
Distribuies como fedora, mandriva, openSuSE, pode-se utilizar tambm o um dos seguintes comandos (variando
de distribuio pra distribuio):

# service samba restart


# service smb restart

Concluso
O que podemos observar que com as ACL a combinao, personalizao e refinamento necessrio para
permisses tornam-se quase infinitas. A forma de organizao bastante malevel e de fcil administrao. Mas, o
mais utilizado para isso seria num sistema de um servidor de arquivos, pois um ambiente compartilhado onde se
deseja que existam diversos perfis, e um determinado usurio ou grupo no deve ter acesso a alguma pasta.
Em breve estarei escrevendo um outro artigo para que vocs possam fazer as ACL e alteraes direto no seu
gerenciador de Janelas (KDE e GNOME) com ferramentas que eles j suportam.

Das könnte Ihnen auch gefallen