acl - permissões avançadas
DESCRIPTION
ACL - Permissões AvançadasTRANSCRIPT
Usando ACL para permisses avanadas no LinuxAlgum 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.
ExplorandoQuando 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 3 root root 88 2003-09-15 10:07 dhcp3
drwxr-xr-x 2 root root 136 2007-06-01 11:55 dhcpc
drwxr-xr-x 2 root root 144 2005-03-25 00:59
dictionaries-common
drwxr-xr-x 2 root root 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 ferramentasPara 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 ACLDepois 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 ACLCom 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 ACLPara
utilizar as ACL vamos usar 2 comandos basicos,setfaclegetfacl, 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 pasta1Definir 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 -ltotal 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 -ltotal 2
drwxrwxr-x+ 2 root root 1024 2008-05-06 11:41 pasta1Reparem 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-xPodemos 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 exemplosSe 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.txtSe for um
grupo altere para "g:grupo" e assim por diante, infinito o que voc
pode fazer com essas ACL.
Configuraes para o SambaPara 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
restartDistribuies como fedora, mandriva, openSuSE, pode-se
utilizar tambm o um dos seguintes comandos (variando de distribuio
pra distribuio):# service samba restart
# service smb restartConclusoO 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.