Pesquisa de site

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.