ACL - Permissões avançadas no Linux

ACL – Permissões avançadas no Linux

Introdução

O sistema padrão de permissão de acesso para arquivos e diretórios no Linux pode ser extendido com o uso da ACL – Access Control Lista.

O sistema utilizado aqui é o Debian 8.6, mas aplica-se basicamente em qualquer distribuição Linux.

Três tipos de permissão padrão são definidos em sistemas Linux: (r) leitura, (w) gravação e (x) execução.  Essas permissões são aplicáveis no arquivos e diretórios para o dono, grupo e outros.

As ACLs reduzem um pouco a performance do sistema. Na partição do sistema (/)  as permissões padrões são suficientes. Ative a ACL em partições específicas como a “home” o crie uma para a sua necessidade.

Através das ACLs (Listas de Controle de Acesso) podemos estender essa capacidade adicionando mais donos, grupos e outros mesmo que não correspondam aos originais.

Alguns dos sistemas de arquivos que possuem suporte para ACLs são: Ext2, Ext3, Ext4, ReiserFS, JFS e XFS

A ACL é um recurso do kernel Linux, para verificar se o sistema de arquivos possui essa característica use o comando abaixo

tune2fs -l /dev/sda1 | grep "Default mount options:"

Caso não seja exibida a opção “acl” edite /etc/fstab e acrescente acl em options. Talvez seja necessário instalar o pacote e reiniciar o sistema

apt-get install acl

Obs: Para esse nível de operação do sistema evitei explicar conceitos básicos como criar usuário e grupo, troca de usuário, tipos de permissão, entre outros.

Criando um cenário

Imaginando um cenário relativamente simples, mas que exemplificará o uso de ACLs, temos um servidor de arquivos com um diretório pub (público) onde existem subdiretórios para os departamentos financeiro e comercial com seus respectivos arquivos caixavendas.

  • Diretório pub
    • subdiretório financeiro
      • arquivo caixa
    • subdiretório comercial
      • arquivo vendas

O diretório pub terá permissão de leitura e execução para todos (555/rwx). Nos subdiretórios o controle de acesso é restrito aos seus respectivos grupos.

  • Grupo diretores (acesso ao subdiretório financeiro)
    • Usuário alberto 
    • Usuário augusto
  • Grupo gerentes (acesso ao subdiretório comercial)
    • usuário joao
    • usuário jose

Vamos utilizar a ACL para criar uma exceção para o usuário joao do grupo gerentes do departamento comercial ter permissão de leitura e gravação no arquivo relatório.txt no subdiretório financeiro, mas não poderá ler os outros arquivos neste mesmo diretório

Comando básicos

Uma vez definida a política de segurança (workflow – fluxo de trabalho) vamos criar os usuários, os grupos, a estrutura de diretórios, e definir as permissões de acesso.

Obs.: Os comandos serão executados sendo o diretório corrente /mnt.

Adicionado usuários albertoaugustojoaojose

adduser alberto
adduser augusto
adduser joao
adduser jose

Adicionado os grupos diretores e gerentes

addgroup diretores
addgroup gerentes

Adicionando usuários aos respectivos grupos

usermod -a -G diretores alberto
usermod -a -G diretores augusto
usermod -a -G gerentes joao
usermod -a -G gerentes jose

Criando o diretório pub e subdiretórios financeiro e comercial

mkdir -p pub/{comercial,financeiro}

Definindo permissões para diretórios

chmod 555 pub
chmod 770 pub/{comercial,financeiro}

Utilizando ACL

Existem apenas dois tipos de ACLs:

  • Regras de Acesso – especificam as informações de acesso para um arquivo ou diretório único
  • Regras Padrão – aplicadas apenas a diretórios e especificam informações de acesso padronizadas para todos os arquivos dentro do diretório.

Arquivos que não possuem regras herdam a configuração do diretório pai com base nas permissões padrão.

Conforme brevemente explicado anteriormente é possível definir valores padrões para usuários, grupos e outros, em pastas e arquivos, diferente do dono, grupo e outros padrão do sistema de arquivos.

getfacl – utilizado para visualizar as permissões
setfacl – utilizado para alterar as permissões

Obtendo informações do arquivo planilha.txt com getfacl

getfacl pub/comercial/planilha.txt
# file: pub/comercial/planilha.txt
# owner: jose
# group: jose
user::rw-
group::r--
other::r--

Como podemos observar temos as permissões padrões.

Com o comando setfacl vamos alterar tais permissões

setfacl -m user:joao:rw pub/comercial/planilha.txt

Utilize o parâmetro -m seguido de user,  group, other para adicionar novas permissões para usuários distintos, grupos e outros. Pode-se abreviar user para ugo.

É possível atribuir permissões para usuários e grupos simultaneamente.

setffacl -m u:joao:rw,g:diretores:rw pub/financeiro/relatorio.txt

Observe que será necessário da permissão de leitura e execução no subdiretório financeiro para que joao possa editar o arquivos relatório.txt.

setfacl -m u:joao:rx pub/financeiro

Desta forma, mesmo joao não sendo dono original do arquivo relatório.txt e nem fazendo parte do grupo diretores, estou me referindo das permissões padrões do sistema, terá acesso de leitura e gravação no arquivo, pois, ele também tem permissão de leitura e execução do diretório financeiro através de regras ACLs.

O usuário joao ainda poderá ler outros arquivos nesse subdiretório, mas alterar somente o arquivo relatorio.txt

Obtendo informações com getfacl do sub diretório financeiro e arquivo relatorio.txt

getfacl pub/financeiro
# file: pub/financeiro/
# owner: root
# group: diretores
user::rwx
user:joao:r-x
group::rwx
mask::rwx
other::---

getfacl pub/financeiro/relatorio.txt
# file: pub/financeiro/relatorio.txt
# owner: alberto
# group: alberto
user::rw-
user:joao:rw-
group::r--
group:diretores:rw-
mask::rw-
other::r--

Criando arquivos com o usuário alberto e jose

su alberto
touch pub/financeiro/relatorio.txt
su jose
touch pub/comercial/planilha.txt

Da forma como está configurado até agora, usando a permissões de acesso padrão, o arquivo criado pelo usuário jose no subdiretório comercial terá permissão de somente leitura para o usuário joao que faz parte do mesmo grupo gerentes definido neste subdiretório, a depender da umask definida.

Ainda, no subdiretório financeiro o usuário joao não poderá acessar arquivos, independente da umask definida, pois ele não é o dono do subdiretório, não faz parte do grupo diretores e outros não tem permissão de acesso.

Obs: Obrigado Mike pelo compartilhamento, apesar deste texto (e o site também) ainda estar em construção, finalizarei o mais breve possível.


Publicado

em

por

Tags: