Como Configurar Lists de Controle de Acesso (ACLs) e Cotas de Disco para Usuários e Grupos

Listas de Controle de Acesso (também conhecidas como ACLs) são um recurso do kernel do Linux que permite definir direitos de acesso mais refinados para arquivos e diretórios do que os especificados pelas permissões regulares ugo/rwx.

Por exemplo, as permissões padrão ugo/rwx não permitem definir permissões diferentes para usuários individuais ou grupos diferentes. Com ACLs, isso é relativamente fácil de fazer, como veremos neste artigo.

Verificando a Compatibilidade do Sistema de Arquivos com ACLs

Para garantir que seus sistemas de arquivos atualmente suportam ACLs, você deve verificar se eles foram montados usando a opção acl. Para fazer isso, usaremos tune2fs para sistemas de arquivos ext2/3/4 conforme indicado abaixo. Substitua /dev/sda1 pelo dispositivo ou sistema de arquivos que deseja verificar:

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

Observação: Com XFS, Listas de Controle de Acesso são suportadas por padrão.

No seguinte sistema de arquivos ext4, podemos ver que as ACLs foram habilitadas para /dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

Se o comando acima não indicar que o sistema de arquivos foi montado com suporte para ACLs, é mais provável devido à opção noacl presente em /etc/fstab.

Nesse caso, remova-o, desmonte o sistema de arquivos e monte-o novamente, ou simplesmente reinicie seu sistema após salvar as alterações em /etc/fstab.

Introduzindo ACLs no Linux

Para ilustrar como as ACLs funcionam, vamos usar um grupo chamado desenvolvedores e adicionar os usuários walterwhite e saulgoodman (sim, sou fã de Breaking Bad!) a ele.:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

Antes de prosseguirmos, vamos verificar se ambos os usuários foram adicionados ao grupo de desenvolvedores:

# id walterwhite
# id saulgoodman
Find User ID in Linux

Vamos agora criar um diretório chamado teste em /mnt, e um arquivo chamado acl.txt dentro (/mnt/test/acl.txt).

Então vamos definir o proprietário do grupo como desenvolvedores e alterar suas permissões padrão ugo/rwx recursivamente para 770 (concedendo assim permissões de leitura, escrita e execução ao proprietário e ao proprietário do grupo do arquivo):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

Como esperado, você pode escrever em /mnt/test/acl.txt como walterwhite ou saulgoodman:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

Até agora tudo bem. No entanto, logo veremos um problema quando precisarmos conceder acesso de escrita a /mnt/test/acl.txt para outro usuário que não está no grupo de desenvolvedores.

Permissões padrão ugo/rwx exigiriam que o novo usuário fosse adicionado ao grupo de desenvolvedores, mas isso lhe daria as mesmas permissões sobre todos os objetos de propriedade do grupo. É aí que as ACLs são úteis.

Configurando ACLs no Linux

Há dois tipos de ACLs: as ACLs de acesso (que são aplicadas a um arquivo ou diretório), e as ACLs padrão (opcionais) (que só podem ser aplicadas a um diretório).

Se arquivos dentro de um diretório onde um ACL padrão foi definido não possuem um ACL próprio, eles herdam o ACL padrão do diretório pai.

Vamos dar ao usuário gacanepa acesso de leitura e escrita ao /mnt/test/acl.txt. Antes de fazer isso, vamos dar uma olhada nas configurações atuais do ACL nesse diretório com:

# getfacl /mnt/test/acl.txt

Em seguida, altere os ACLs no arquivo, use u: seguido pelo nome de usuário e :rw para indicar permissões de leitura / escrita:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

E execute getfacl no arquivo novamente para comparar. A imagem a seguir mostra o “Antes” e “Depois”:

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

Em seguida, precisaremos dar permissões de execução para outros no diretório /mnt/test:

# chmod +x /mnt/test

Lembre-se de que, para acessar o conteúdo de um diretório, um usuário regular precisa de permissões de execução nesse diretório.

O usuário gacanepa agora deve ser capaz de escrever no arquivo. Troque para essa conta de usuário e execute o seguinte comando para confirmar:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Para definir um ACL padrão para um diretório (que seus conteúdos herdarão a menos que sejam sobrescritos de outra forma), adicione d: antes da regra e especifique um diretório em vez de um nome de arquivo:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

O ACL acima permitirá que usuários que não estão no grupo proprietário tenham acesso de leitura aos futuros conteúdos do diretório /mnt/test. Observe a diferença na saída de getfacl /mnt/test antes e depois da alteração:

Set Default ACL to Linux Directory

Para remover um ACL específico, substitua -m nos comandos acima por -x. Por exemplo,

# setfacl -x d:o /mnt/test

Alternativamente, você também pode usar a opção -b para remover TODOS os ACLs de uma só vez:

# setfacl -b /mnt/test

Para mais informações e exemplos sobre o uso de ACLs, consulte o capítulo 10, seção 2, do Guia de Segurança do openSUSE (também disponível para download gratuitamente em formato PDF).

Definir Quotas de Disco no Linux para Usuários e Sistemas de Arquivos

O espaço de armazenamento é outro recurso que deve ser usado e monitorado com cuidado. Para isso, quotas podem ser definidas com base em um sistema de arquivos, seja para usuários individuais ou para grupos.

Dessa forma, um limite é estabelecido para o uso de disco permitido para um determinado usuário ou grupo específico, e você pode ter a certeza de que seus discos não serão preenchidos até a capacidade por um usuário descuidado (ou mal-intencionado).

A primeira coisa que você deve fazer para habilitar quotas em um sistema de arquivos é montá-lo com as opções usrquota ou grpquota (para quotas de usuário e grupo, respectivamente) em /etc/fstab.

Por exemplo, vamos habilitar quotas baseadas em usuário em /dev/vg00/vol_backups e quotas baseadas em grupo em /dev/vg00/vol_projects.

Observe que o UUID é usado para identificar cada sistema de arquivos.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Desmonte e remonte ambos os sistemas de arquivos:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

Em seguida, verifique se as opções usrquota e grpquota estão presentes na saída de mount (veja destaque abaixo):

# mount | grep vg00
Check Linux User Quota and Group Quota

Por fim, execute os seguintes comandos para inicializar e habilitar quotas:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

Dito isso, vamos agora atribuir cotas ao nome de usuário e grupo que mencionamos anteriormente. Você pode posteriormente desativar as cotas com quotaoff.

Configurando Quotas de Disco no Linux

Vamos começar configurando uma ACL em /home/backups para o usuário gacanepa, que lhe dará permissões de leitura, escrita e execução nesse diretório:

# setfacl -m u:gacanepa:rwx /home/backups/

Então com,

# edquota -u gacanepa

Vamos definir o limite suave limite=900 e o limite rígido limite=1000 blocos (1024 bytes/bloco * 1000 blocos = 1024000 bytes = 1 MB) de uso de espaço em disco.

Também podemos estabelecer um limite de 20 e 25 como limites suave e rígido no número de arquivos que esse usuário pode criar.

O comando acima abrirá o editor de texto ($EDITOR) com um arquivo temporário onde podemos definir os limites mencionados anteriormente:

Linux Disk Quota For User

Essas configurações farão com que um aviso seja exibido para o usuário gacanepa quando ele atingir os limites de 900 blocos ou 20 inodes por um período de carência padrão de 7 dias.

Se a situação de acima da cota não tiver sido resolvida até então (por exemplo, removendo arquivos), o limite suave se tornará o limite rígido e esse usuário será impedido de usar mais espaço de armazenamento ou criar mais arquivos.

Para testar, vamos fazer com que o usuário gacanepa tente criar um arquivo vazio de 2 MB chamado test1 dentro de /home/backups:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

Como você pode ver, a operação de gravação no arquivo falha devido à cota de disco ter sido excedida. Como apenas os primeiros 1000 KB são gravados no disco, o resultado neste caso provavelmente será um arquivo corrompido.

Da mesma forma, você pode criar uma ACL para os grupos de desenvolvedores para dar aos membros desse grupo acesso rwx ao /home/projects:

# setfacl -m g:developers:rwx /home/projects/

E definir os limites de cota com:

# edquota -g developers

Assim como fizemos com o usuário gacanepa anteriormente.

O período de carência pode ser especificado em segundos, minutos, horas, dias, semanas ou meses, executando:

# edquota -t

e atualizando os valores em Período de carência de bloco e Período de carência de inode.

Ao contrário do uso de bloco ou inode (que são definidos por usuário ou grupo), o período de carência é definido em todo o sistema.

Para relatar cotas, você pode usar quota -u [usuário] ou quota -g [grupo] para uma lista rápida ou repquota -v [/caminho/para/sistema_de_arquivos] para um relatório mais detalhado e formatado.

É claro que você vai querer substituir [usuário], [grupo] e [/caminho/para/sistema_de_arquivos] pelos nomes de usuário / grupo específicos e pelo sistema de arquivos que deseja verificar.

Resumo

Neste artigo, explicamos como definir Listas de Controle de Acesso e cotas de disco para usuários e grupos. Usando ambos, você poderá gerenciar permissões e uso de disco de forma mais eficaz.

Se você deseja aprender mais sobre cotas, você pode consultar o Quota Mini-HowTo no Projeto de Documentação do Linux.

Naturalmente, você também pode contar conosco para responder perguntas. Basta enviá-las usando o formulário de comentários abaixo e teremos o maior prazer em dar uma olhada.

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/