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:"

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

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

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

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:

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

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:

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

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/