Como definir listas 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 Linux que permite definir direitos de acesso mais refinados para arquivos e diretórios do que aqueles especificados pelas permissões regulares ugo/rwx.
Por exemplo, as permissões padrão ugo/rwx não permitem definir permissões diferentes para diferentes usuários ou grupos individuais. 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 suportem atualmente 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 você deseja verificar:
tune2fs -l /dev/sda1 | grep "Default mount options:"
Nota: Com o XFS, as listas de controle de acesso são suportadas imediatamente.
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, provavelmente é devido à opção noacl estar presente em /etc/fstab.
Nesse caso, remova-o, desmonte o sistema de arquivos e monte-o novamente ou simplesmente reinicie o sistema após salvar as alterações em /etc/fstab.
Apresentando ACLs no Linux
Para ilustrar como funcionam as ACLs, usaremos um grupo chamado developers e adicionaremos os usuários walterwhite e saulgoodman (sim, sou fã de Breaking Bad! ) para isso.:
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 test em /mnt, e um arquivo chamado acl.txt dentro de (/mnt/test/acl .txt).
Em seguida, definiremos o proprietário do grupo como desenvolvedores e alteraremos suas permissões padrão ugo/rwx recursivamente para 770 (concedendo assim leitura, gravação e execução permissões concedidas 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, em breve veremos um problema quando precisarmos conceder acesso de gravação a /mnt/test/acl.txt para outro usuário que não esteja no grupo de desenvolvedores.
As permissões padrão ugo/rwx exigiriam que o novo usuário fosse adicionado ao grupo de desenvolvedores, mas isso daria a ele as mesmas permissões sobre todos os objetos pertencentes ao grupo. É precisamente aí que as ACLs são úteis.
Configurando ACLs no Linux
Existem dois tipos de ACLs: ACLs de acesso (que são aplicadas a um arquivo ou diretório) e ACLs padrão (opcionais), que só podem ser aplicadas a um diretório .
Se os arquivos dentro de um diretório onde uma ACL padrão foi definida não tiverem uma ACL própria, eles herdarão a ACL padrão de seu diretório pai.
Vamos dar ao usuário gacanepa acesso de leitura e gravação a /mnt/test/acl.txt. Antes de fazer isso, vamos dar uma olhada nas configurações atuais da ACL nesse diretório com:
getfacl /mnt/test/acl.txt
Em seguida, altere as ACLs no arquivo, use u:
seguido do nome de usuário e :rw
para indicar permissões de leitura/gravação:
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 o “Depois”:
getfacl /mnt/test/acl.txt
A seguir, precisaremos conceder a outros permissões de execução no diretório /mnt/test:
chmod +x /mnt/test
Tenha em mente que para acessar o conteúdo de um diretório, um usuário normal precisa de permissões de execução nesse diretório.
O usuário gacanepa agora deve ser capaz de gravar no arquivo. Mude 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 uma ACL padrão para um diretório (que seu conteúdo será herdado, a menos que seja substituído 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/
A ACL acima permitirá que usuários que não estejam no grupo proprietário tenham acesso de leitura ao conteúdo futuro do diretório /mnt/test. Observe a diferença na saída de getfacl /mnt/test antes e depois da alteração:
Para remover uma ACL específica, 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 TODAS as ACLs em uma única etapa:
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 gratuito em formato PDF ).
Definir cotas de disco Linux em usuários e sistemas de arquivos
O espaço de armazenamento é outro recurso que deve ser utilizado e monitorado com cuidado. Para fazer isso, as cotas podem ser definidas com base no sistema de arquivos, seja para usuários individuais ou para grupos.
Assim, é colocado um limite no uso do disco permitido para um determinado usuário ou grupo específico, e você pode ter certeza de que seus discos não serão lotados por um usuário descuidado (ou mal-intencionado).
A primeira coisa que você deve fazer para habilitar cotas em um sistema de arquivos é montá-lo com as opções usrquota ou grpquota (para cotas de usuário e grupo, respectivamente) em /etc/fstab.
Por exemplo, vamos ativar cotas baseadas em usuários em /dev/vg00/vol_backups e cotas baseadas em grupos 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 do mount (veja destacado abaixo):
mount | grep vg00
Por fim, execute os seguintes comandos para inicializar e habilitar cotas:
quotacheck -avugc
quotaon -vu /home/backups
quotaon -vg /home/projects
Dito isto, vamos agora atribuir cotas ao nome de usuário e grupo que mencionamos anteriormente. Posteriormente, você poderá desativar as cotas com quotaoff.
Configurando cotas de disco Linux
Vamos começar definindo uma ACL em /home/backups para o usuário gacanepa, o que lhe dará permissões de leitura, gravação e execução nesse diretório:
setfacl -m u:gacanepa:rwx /home/backups/
Então com,
edquota -u gacanepa
Faremos os blocos soft limit=900 e hard limit=1000 (1024 bytes/bloco * 1000 blocos=1024000 bytes=1 MB ) do uso do espaço em disco.
Também podemos colocar um limite de 20 e 25 como limites suaves e rígidos no número de arquivos que este usuário pode criar.
O comando acima irá iniciar 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 mostrado ao usuário gacanepa quando ele atingir os limites de 900 blocos ou 20 inodes para um padrão período de carência de 7 dias.
Se a situação de excesso de cota não tiver sido eliminada até então (por exemplo, removendo arquivos), o limite flexível se tornará o limite rígido e este usuário será impedido de usar mais espaço de armazenamento ou criar mais espaço de armazenamento. 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 do arquivo falha porque a cota do disco foi 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 a /home/projects:
setfacl -m g:developers:rwx /home/projects/
E defina 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 para qualquer número de segundos, minutos, horas, dias, semanas ou meses por meio da execução.
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 blocos ou inodes (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 [user]
ou quota -g [group]
para uma lista rápida ou repquota -v [/path/to /filesystem]
para um relatório mais detalhado (detalhado) e bem formatado.
Claro, você desejará substituir [user]
, [group]
e [/path/to/filesystem]
por usuário específico/nomes de grupos e sistema de arquivos que você 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 as permissões e o uso do disco com mais eficiência.
Se quiser saber mais sobre cotas, você pode consultar o Quota Mini-HowTo no The Linux Documentation Project.
Escusado será dizer que você também pode contar conosco para responder a perguntas. Basta enviá-los usando o formulário de comentários abaixo e teremos o maior prazer em dar uma olhada.