Pesquisa de site

Série RHCSA: Usando ACLs (listas de controle de acesso) e montando compartilhamentos Samba/NFS - Parte 7


No último artigo (série RHCSA Parte 6) começamos a explicar como instalar e configurar o armazenamento do sistema local usando parted e ssm.

Também discutimos como criar e montar volumes criptografados com senha durante a inicialização do sistema. Além disso, alertamos você para evitar realizar operações críticas de gerenciamento de armazenamento em sistemas de arquivos montados. Com isso em mente, revisaremos agora os formatos de sistema de arquivos mais usados no Red Hat Enterprise Linux 7 e então prosseguiremos abordando os tópicos de montagem, uso e desmontagem manualmente. e sistemas de arquivos em rede automaticamente (CIFS e NFS), juntamente com a implementação de listas de controle de acesso para seu sistema.

Pré-requisitos

Antes de prosseguir, certifique-se de ter um servidor Samba e um servidor NFS disponíveis (observe que NFSv2 não é mais suportado em RHEL7).

Durante este guia usaremos uma máquina com IP 192.168.0.10 com ambos os serviços rodando nela como servidor, e uma caixa RHEL 7 como cliente com endereço IP 192.168 .0.18. Posteriormente neste artigo, informaremos quais pacotes você precisa instalar no cliente.

Formatos de sistema de arquivos no RHEL 7

A partir do RHEL 7, o XFS foi introduzido como o sistema de arquivos padrão para todas as arquiteturas devido ao seu alto desempenho e escalabilidade. Atualmente ele suporta um tamanho máximo de sistema de arquivos de 500 TB de acordo com os testes mais recentes realizados pela Red Hat e seus parceiros para hardware convencional.

Além disso, XFS habilita user_xattr (atributos de usuário estendidos) e acl (listas de controle de acesso POSIX) como opções de montagem padrão, ao contrário de ext3 ou ext4 (ext2 é considerado obsoleto a partir do RHEL 7), o que significa que você não precisa especificar essas opções explicitamente na linha de comando ou em /etc/fstab ao montar um sistema de arquivos XFS (se você quiser desabilitar tais opções neste último caso, você deve usar explicitamente no_acl e no_user_xattr).

Tenha em mente que os atributos de usuário estendidos podem ser atribuídos a arquivos e diretórios para armazenar informações adicionais arbitrárias, como tipo MIME, conjunto de caracteres ou codificação de um arquivo, enquanto as permissões de acesso para atributos de usuário são definidas pelos bits regulares de permissão de arquivo.

Listas de controle de acesso

Como todo administrador de sistema, seja iniciante ou especialista, está bem familiarizado com permissões regulares de acesso a arquivos e diretórios, que especificam certos privilégios (ler, escrever e executar ) para o proprietário, o grupo e “o mundo” (todos os outros). No entanto, sinta-se à vontade para consultar a Parte 3 da série RHCSA se precisar refrescar um pouco a memória.

No entanto, como o conjunto padrão ugo/rwx não permite configurar permissões diferentes para usuários diferentes, ACLs foram introduzidas para definir direitos de acesso mais detalhados para arquivos e diretórios do que aqueles especificados por permissões regulares.

Na verdade, as permissões definidas pela ACL são um superconjunto das permissões especificadas pelos bits de permissão do arquivo. Vamos ver como tudo isso se traduz e é aplicado no mundo real.

1. Existem dois tipos de ACLs: ACLs de acesso, que podem ser aplicadas a um arquivo ou diretório específico) e ACLs de acesso, que podem ser aplicadas a um arquivo ou diretório específico) e ACLs de acesso, que podem ser aplicadas a um arquivo ou diretório específico) >ACLs padrão, que só podem ser aplicadas a um diretório. Se os arquivos nele contidos não tiverem uma ACL definida, eles herdarão a ACL padrão de seu diretório pai.

2. Para começar, as ACLs podem ser configuradas por usuário, por grupo ou por usuário que não pertence ao grupo proprietário de um arquivo.

3. ACLs são definidas (e removidas) usando setfacl, com -m ou - x opções, respectivamente.

Por exemplo, vamos criar um grupo chamado tecmint e adicionar os usuários johndoe e davenull a ele:

groupadd tecmint
useradd johndoe
useradd davenull
usermod -a -G tecmint johndoe
usermod -a -G tecmint davenull

E vamos verificar se ambos os usuários pertencem ao grupo complementar tecmint:

id johndoe
id davenull

Vamos agora criar um diretório chamado playground dentro de /mnt e um arquivo chamado testfile.txt dentro dele. Definiremos o proprietário do grupo como tecmint e alteraremos suas permissões padrão ugo/rwx para 770 (permissões de leitura, gravação e execução concedidas a ambos o proprietário e o proprietário do grupo do arquivo):

mkdir /mnt/playground
touch /mnt/playground/testfile.txt
chmod 770 /mnt/playground/testfile.txt

Em seguida, mude o usuário para johndoe e davenull, nessa ordem, e grave no arquivo:

echo "My name is John Doe" > /mnt/playground/testfile.txt
echo "My name is Dave Null" >> /mnt/playground/testfile.txt

Até agora tudo bem. Agora vamos fazer com que o usuário gacanepa escreva no arquivo – e a operação de gravação falhará, o que era de se esperar.

Mas e se realmente precisarmos que o usuário gacanepa (que não é membro do grupo tecmint) tenha permissões de gravação em /mnt/playground/testfile.txt?< A primeira coisa que pode vir à sua mente é adicionar essa conta de usuário ao grupo tecmint. Mas isso lhe dará permissões de gravação em TODOS arquivos onde o bit de gravação estiver definido para o grupo, e não queremos isso. Queremos apenas que ele seja capaz de escrever em /mnt/playground/testfile.txt.

touch /mnt/playground/testfile.txt
chown :tecmint /mnt/playground/testfile.txt
chmod 777 /mnt/playground/testfile.txt
su johndoe
echo "My name is John Doe" > /mnt/playground/testfile.txt
su davenull
echo "My name is Dave Null" >> /mnt/playground/testfile.txt
su gacanepa
echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

Vamos dar ao usuário gacanepa acesso de leitura e gravação a /mnt/playground/testfile.txt.

Execute como root,

setfacl -R -m u:gacanepa:rwx /mnt/playground

e você terá adicionado com sucesso uma ACL que permite que gacanepa grave no arquivo de teste. Em seguida, mude para o usuário gacanepa e tente gravar no arquivo novamente:

echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

Para visualizar as ACLs de um arquivo ou diretório específico, use getfacl:

getfacl /mnt/playground/testfile.txt

Para definir uma ACL padrão para um diretório (que seu conteúdo herdará, a menos que seja substituído), adicione d: antes da regra e especifique um diretório em vez de um nome de arquivo:

setfacl -m d:o:r /mnt/playground

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/playground. Observe a diferença na saída de getfacl /mnt/playground antes e depois da alteração:

O Capítulo 20 do Guia oficial de administração de armazenamento do RHEL 7 fornece mais exemplos de ACL, e eu recomendo fortemente que você dê uma olhada nele e tenha-o à mão como referência.