Configure listas de controle de acesso (ACLs) POSIX para definir permissões granulares de arquivos e diretórios em um sistema de arquivos NFSv3.
Pré-requisitos
Um sistema de arquivos NFSv3 está montado. Para mais informações, consulte Mount an NFS file system.
-
O recurso NFS ACL está ativado no sistema de arquivos. Sem essa ativação, não é possível usar o comando
setfaclpara definir ACLs POSIX.Faça login no console NAS, acesse a página de detalhes do sistema de arquivos, clique em aba Access Control e ative a chave NFS ACL; ou chame a operação EnableNfsAcl.
Comandos
A tabela a seguir descreve comandos comuns de ACL POSIX.
|
Comando |
Descrição |
|
|
getfacl <filename> |
Consulta a ACL de um arquivo. |
|
|
setfacl -m g::w <filename> |
Concede permissão de gravação ao GROUP. |
|
|
setfacl -m u:player:w <filename> |
Concede permissão de gravação ao usuário player. |
|
|
setfacl -m g:players:rwx <filename> |
Concede permissões de leitura, gravação e execução ao grupo players. |
|
|
setfacl -x g:players <filename> |
Revoga as permissões do grupo players. |
|
|
getfacl file1 \ |
setfacl --set-file=- file2 |
Copia a ACL de file1 para file2. |
|
setfacl -b file1 |
Remove todas as ACEs estendidas de file1. As ACEs base para proprietário, grupo e outros são mantidas. |
|
|
setfacl -k file1 |
Remove todas as ACEs padrão de file1. |
|
|
setfacl -R -m g:players:rw dir |
Concede permissões de leitura e gravação em todos os arquivos e subdiretórios dentro de dir ao grupo players. |
|
|
setfacl -d -m g:players:rw dir1 |
Defina permissões padrão de leitura e gravação para novos arquivos e subdiretórios criados em dir1 para o grupo players. |
Configure ACLs POSIX
Para configure ACLs POSIX visando o controle de acesso:
-
Crie usuários e grupos.
Este exemplo cria três usuários (player, admini, anonym) e dois grupos (players, adminis). Em seguida, atribui o usuário player ao grupo players e o usuário admini ao grupo adminis.
sudo useradd player sudo groupadd players sudo usermod -g players player sudo useradd admini sudo groupadd adminis sudo usermod -g adminis admini sudo useradd anonym -
Configure ACLs POSIX para controlar o acesso a arquivos e diretórios.
Neste cenário, considera-se a criação de um diretório chamado dir0. Para todos os arquivos dentro de dir0, conceda permissão somente leitura ao grupo players, permissões totais (leitura, gravação e execução) ao grupo adminis e nenhuma permissão aos demais usuários.
sudo umask 777 sudo mkdir dir0 sudo setfacl -m g:players:r-x dir0 sudo setfacl -m g:adminis:rwx dir0 sudo setfacl -m u::--- dir0 sudo setfacl -m g::--x dir0 sudo setfacl -m o::--- dir0 sudo setfacl -d -m g:players:r-x dir0 sudo setfacl -d -m g:adminis:rwx dir0 sudo setfacl -d -m u::--- dir0 sudo setfacl -d -m g::--x dir0 sudo setfacl -d -m o::--- dir0Execute
sudo getfacl dir0para verifique a configuração.# file: dir0 # owner: root # group: root user::--- group::--x group:players:r-x group:adminis:rwx mask::rwx other::--- default:user::--- default:group::--x default:group:players:r-x default:group:adminis:rwx default:mask::rwx default:other::--- -
Verifique as permissões.
-
Confirme se o usuário admini possui permissões de leitura e gravação:
sudo su admini -c 'touch dir0/file'sudo su admini -c 'echo 123 > dir0/file' -
Valide se o usuário player tem apenas permissão de leitura.
-
Certifique-se de que o usuário player não consegue crie o arquivo file.
Por exemplo, tente crie um arquivo file no diretório dir0.
-
Execute o seguinte comando:
sudo su player -c 'touch dir0/file' -
Se uma mensagem semelhante à abaixo for retornada, o usuário player não tem permissão para crie o arquivo file.
touch: cannot touch ‘dir0/file’: Permission denied
-
-
Verifique se o usuário player consegue ler dir0/file.
-
Execute o seguinte comando:
sudo su player -c 'cat dir0/file' -
Se a saída abaixo for exibida, o usuário player tem permissão para visualize o conteúdo do arquivo dir0/file.
123
-
-
Teste se o usuário player está impedido de gravar no arquivo.
-
Execute o seguinte comando:
sudo su player -c 'echo 456 >> dir0/file' -
Saída esperada quando a permissão de gravação é negada:
bash: dir0/file: Permission denied
Execute
sudo su player -c 'getfacl dir0/file'para visualize as permissões do usuário player sobre dir0/file.# file: dir0/file # owner: admini # group: adminis user::--- group::--- group:players:r-x group:adminis:rwx mask::rwx other::--- -
-
-
Confirme que o usuário anonym não possui permissões em dir0.
-
Verifique se o usuário anonym não consegue listar arquivos em dir0.
-
Execute o seguinte comando:
sudo su anonym -c 'ls dir0' -
Saída esperada caso a permissão seja negada:
ls: cannot open directory dir0: Permission denied
-
-
Valide se o usuário anonym está impedido de ler o arquivo.
-
Execute o seguinte comando:
sudo su anonym -c 'cat dir0/file' -
Retorno esperado quando a permissão de leitura é bloqueada:
cat: dir0/file: Permission denied
-
-
Teste se o usuário anonym não consegue acessar a ACL do arquivo.
-
Execute o seguinte comando:
sudo su anonym -c 'getfacl dir0/file' -
Mensagem de erro prevista ao tentar o acesso:
getfacl: dir0/file: Permission denied
-
-
-
Revogar permissões de usuário
O exemplo a seguir demonstra como revogar as permissões de um usuário transferindo-o para outro grupo.
Como melhor prática, conceda permissões a grupos em vez de usuários individuais. Para remover o acesso, mova o usuário para um grupo diferente. Os passos abaixo movem o usuário admini do grupo adminis para o grupo adminis2.
-
Crie o grupo adminis2:
sudo groupadd adminis2 -
Transfira o usuário admini do grupo adminis para o adminis2:
sudo usermod -g adminis2 admini -
Verifique a associação de grupo do usuário.
-
Execute o seguinte comando:
id admini -
As informações retornadas serão semelhantes a estas:
uid=1057(admini) gid=1057(admini) groups=1061(adminis2)
-
-
Valide as permissões efetivas do usuário admini.
-
Confirme que o usuário admini perdeu o acesso a dir0.
-
Execute o seguinte comando:
sudo su admini -c 'ls dir0' -
Resultado esperado indicando que o usuário admini não acessa mais dir0:
ls: cannot open directory dir0: Permission denied
-
-
Verifique se o usuário admini não consegue ler dir0/file.
-
Execute o seguinte comando:
sudo su admini -c 'cat dir0/file' -
Saída prevista confirmando a falta de permissão de leitura para dir0/file:
cat: dir0/file: Permission denied
-
-
Teste se o usuário admini está totalmente bloqueado de acessar dir0/file.
-
Execute o seguinte comando:
sudo su admini -c 'getfacl dir0/file' -
Erro retornado quando o acesso é negado ao usuário admini em dir0/file:
getfacl: dir0/file: Permission denied
-
-