terça-feira, 30 de abril de 2013

Aula 12 - Gerenciamento de Permissões no Linux utilizando ACL


Segue o resumo de comandos e conceitos vistos em Sala de Aula.
Este é um material de apoio aos meus alunos que tem todo embasamento durante as aulas presenciais.

Você pode fazer o exercício desta aula no seguinte link:
http://dailson.blogspot.com.br/2013/04/exercicio-da-aula-12-gerenciamento-de.html 

As respostas deste exercício estão no seguinte link:
http://dailson.blogspot.com.br/2013/04/respostas-do-exercicio-da-aula-12.html

Você pode encontrar todos os resumos de aula no link abaixo:
http://www.dailson.com.br/2009/05/indice-mini-tutoriais-usados-em-aula.html


O Gerenciamento de permissões de usuários do Linux é bastante genérico e chega a um determinado momento que os commandos chown, chgrp e chmod já não satisfazem a uma situação.
Veja este exemplo:
Quero que um grupo inteiro grave em um diretório e dois usuários deste grupo tenham apenas acesso de somente leitura.

Como fazer exceções deste tipo?

Para resolver situações bem particulares como esta, o uso de ACL – Access Control List, (ou Lista de Controle de acessos) é muito bem-vinda.

Para usar ACLs no Linux é necessário instalar um pacote no Linux.

Em distribuições baseadas em Debian/Ubuntu/Mint faça:
# apt-get install acl

Em distribuições baseadas em Redhat/Fedora faça:
# yum install acl

Porém antes de começar a usar, é necessário fazer uma configuração.
1 - Abra o arquivo /etc/fstab

2 - Procure a linha que tem a montagem da sua partição raiz (ou na partição que você deseja usar o ACLs). Na
quarta coluna, basta acrescentar ,acl
Veja um exemplo:

Antes:
/dev/sda1 / reiserfs noatime,notail 0 1

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

Salve o arquivo e digite o seguinte comando no console:
# mount / -o remount,acl

Obs: Nos meus testes usando Debian em máquina virtual no VMWARE PLAYER o comando acima não surtiu efeito. O gerenciamento das ACLs ficaram inconsistentes. Depois de rebootar a máquina virtual, os comandos começaram a funcionar imediatamente. Caso você tenha este mesmo problema, reinicie a máquina.

Para ter certeza que a acl está ativa na partição, digite o comando mount

O Resultado da minha máquina virtual foi o seguinte:

/dev/sda1 on / type ext3 (rw,errors=remount-ro,acl)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
none on /proc/fs/vmblock/mountPoint type vmblock (rw)

Note na primeira linha que a minha partição raiz está com a acl ativada.

Se não houver erros, o comando foi configurado correto.

A partir de agora poderemos atribuir permissões não só ao usuário dono e ao grupo, mas a cada usuário.

Vamos lá!

Vamos aprender a visualizar como estão as permissões de uma pasta.
Vamos criar um diretório chamado pasta_exemplo

# mkdir pasta_exemplo

Vamos definir as seguintes permissões:

# chmod 775 pasta_exemplo

Para fazer a visualização normal, que aprendemos nas aulas 10 e 11 e ver as permissões do sistema.

# ls -ld pasta_exemplo

O resultado é este:
drwxrwxr-x 2 root root 1024 2008-05-06 11:41 pasta_exemplo

Para ficar mais interessante, vamos criar um grupo chamado alunos e colocar tres alunos lá dentro:

# groupadd alunos
# useradd -m -s /bin/bash -g alunos aluno1
# useradd -m -s /bin/bash -g alunos aluno2
# useradd -m -s /bin/bash -g alunos aluno3

Vamos fazer o seguinte: Vamos passar a propriedade da pasta para o grupo alunos e permitir manipulação total desta pasta:

# chgrp alunos pasta_exemplo
# chmod 770 pasta_exemplo

Veja que a partir de agora, a pasta_exemplo tem como grupo dono, o grupo alunos.

# ls -ld pasta_exemplo
drwxrwx--- 2 root alunos 4096 Apr 18 19:26 pasta_exemplo/
Note também que apenas o usuário root e o grupo alunos tem poder total sobre esta pasta.

O Grupo alunos tem três usuários dentro: aluno1, aluno2 e aluno3. Como fazer para por exemplo, deixar que apenas o aluno3 fique com acesso de somente leitura?

Fácil, vamos usar os comandos contidos no pacote acl que acabamos de instalar. O comando que usaremos é o
setfacl

# setfacl -m u:aluno3:r-x pasta_exemplo

Explicando:
setfacl --> comando que altera as acls
-m --> modificar
u: --> especifica que vamos alterar as permissões de um usuário
aluno3 --> o usuário em questão
r-x --> estou tirando o poder de gravação na pasta deste usuário
pasta_exemplo --> o diretório alvo do comando.

Para ver o resultado disso, usaremos o comando getfacl

# getfacl pasta_exemplo
# file: pasta_exemplo
# owner: root
# group: alunos
user::rwx
user:aluno3:r-x
group::rwx
mask::rwx
other::---


Note que todos do grupo tem permissão EXCETO o usuário aluno3

Vamos repetir com o aluno1? Ele só poderá executar. Veja:

# setfacl -m u:aluno1:--- pasta_exemplo

O Resultado:
# getfacl pasta_exemplo/

# file: pasta_exemplo/
# owner: root
# group: root
user::rwx
user:aluno1:---
user:aluno3:r-x
group::r-x
mask::r-x
other::---

Vamos fazer agora com um grupo. O Grupo professores, terá permissão total na pasta

# setfacl -m g:professores:rwx pasta_exemplo/

O Resultado:
# getfacl pasta_exemplo/

# file: pasta_exemplo/
# owner: root
# group: root
user::rwx
user:aluno1:---
user:aluno3:r-x
group::r-x
group:professores:rwx
mask::rwx
other::---

E não tem limite... Você pode ir fazendo suas alterações de acordo com a necessidade.

A partir de agora, quando você der um ls -l na pasta_exemplo, o resultado será este:

drwxrwx---+ 2 root alunos 1024 2008-05-06 11:41 pasta_exemplo

Notou a presença do caracter + ... isso quer dizer que esta pasta tem permissões especiais...

Vamos a alguns exemplos:

Atribuir ao grupo alunos, poder total sobre a pasta
# setfacl -m g:alunos:rwx pasta_exemplo

Exibir as novas permissões:
# getfacl pasta_exemplo

Vamos entrar na pasta_exemplo
# cd pasta_exemplo

Vamos criar um arquivo em branco chamado arquivo.txt
# touch arquivo.txt

Vamos fazer que apenas o usuário aluno1 tenha permissão de modificar este arquivo.
# setfacl -m u:aluno1:rw- arquivo.txt

Para visualizar, faça:

# getfacl arquivo.txt

# file: arquivo.txt
# owner: root
# group: root
user::rw-
user:aluno1:rw-
group::r--
mask::rw-
other::r--

Se preferir, faça os testes, logue com os usuários criados e tente gravar no arquivo ou fazer outras modificações não permitidas.

Obs: este comando aceita os parametros de recursividade como -R

Exemplo:

setfacl -R -m g:alunos:r-x /teste

No exemplo acima, todo os arquivos e subdiretório do diretório /teste será afetado.

Retirando ACLs:

Para retirar ACLs

# setfacl -x u:aluno3 pasta_exemplo

# setfacl -x g:alunos pasta_exemplo

Nenhum comentário:

Postar um comentário