Compartilhar via


Entender os bits de modo no Azure NetApp Files

As permissões de acesso a arquivos no NFS limitam o que os usuários e grupos podem fazer uma vez que um volume NAS é montado. Os bits de modo são um recurso importante das permissões de arquivo NFS no Azure NetApp Files.

Bits de modo NFS

As permissões de bits de modo no NFS fornecem permissões básicas para arquivos e pastas, usando uma representação numérica padrão de controles de acesso. Os bits de modo podem ser usados com NFSv3 ou NFSv4.1, mas os bits de modo são a opção padrão para proteger o NFSv3, conforme definido no RFC-1813. A tabela a seguir mostra como esses valores numéricos correspondem aos controles de acesso.

Numérico de bits de modo
1 – executar (x)
2 – gravar (w)
3 – gravar/executar (wx)
4 – ler (r)
5 – ler/executar (rx)
6 – ler/gravar (rw)
7 – ler/gravar/executar (rwx)

Os valores numéricos são aplicados a diferentes segmentos de um controle de acesso: proprietário, grupo e todos os outros, o que significa que não há controles granulares de acesso de usuários no NFSv3 básico. A imagem a seguir mostra um exemplo de como um controle de acesso de bits de modo pode ser construído para uso com um objeto NFSv3.

.

O Azure NetApp Files não dá suporte a ACLs POSIX. Portanto, as ACLs granulares só são possíveis com NFSv3 ao usar um volume com estilo de segurança NTFS e mapeamentos de nomes válidos de UNIX para Windows por meio de um serviço de nomes, como o LDAP do Active Directory. Como alternativa, você pode usar NFSv4.1 com Azure NetApp Files e ACLs do NFSv4.1.

A tabela a seguir compara a granularidade de permissão entre bits de modo NFSv3 e ACLs NFSv4.x.

Bits do modo NFSv3 NFSv4.x ACLs
  • Definir a ID do usuário na execução (setuid)
  • Definir a ID do grupo na execução (setgid)
  • Salvar texto trocado (bit autoadesiva)
  • Permissão de leitura para proprietário
  • Permissão de gravar para proprietário
  • Executar a permissão do proprietário em um arquivo ou procurar (pesquisar) a permissão do proprietário no diretório
  • Permissão de leitura para grupo
  • Permissão de gravação para grupo
  • Executar a permissão do grupo em um arquivo ou procurar (pesquisar) a permissão do proprietário no diretório
  • Permissão de leitura para outras pessoas
  • Permissão de gravação para outras pessoas
  • Executar a permissão de outras pessoas em um arquivo ou procurar (pesquisar) a permissão do proprietário no diretório
  • Tipos de ACE (Permitir/Negar/Auditar)
  • Flags de herança:
  • directory-inherit
  • file-inherit
  • no-propagate-inherit
  • somente herdado
  • Permissões:
  • read-data (arquivos)/list-directory (diretórios)
  • write-data (arquivos)/create-file (diretórios)
  • append-data (arquivos)/create-subdirectory (diretórios)
  • execute (arquivos)/change-directory (diretórios)
  • excluir
  • delete-child
  • atributos de leitura
  • write-attributes
  • read-named-attributes
  • write-named-attributes
  • read-ACL
  • write-ACL
  • write-owner
  • Sincronizar

Para obter mais informações, consulte Entender as listas de controle de acesso ACLs NFSv4.x.

Bits autoadesivos, setuid e setgid

Ao usar os bits de modo com montagens NFS, a propriedade de arquivos e pastas é baseada no uid e gid do usuário que criou os arquivos e pastas. Além disso, quando um processo é executado, ele é executado como o usuário que o iniciou e, portanto, teria as permissões correspondentes. Com permissões especiais (como setuid, setgid, bit autoadesivo), esse comportamento pode ser controlado.

Setuid

O bit setuid é designado por um “s” na parte de execução do bit proprietário de uma permissão. O setuid bit permite que um arquivo executável seja executado como o proprietário do arquivo, em vez de como o usuário que está tentando executar o arquivo. Por exemplo, o /bin/passwd aplicativo tem o setuid bit habilitado por padrão, portanto, o aplicativo é executado como raiz quando um usuário tenta alterar sua senha.

# ls -la /bin/passwd 
-rwsr-xr-x 1 root root 68208 Nov 29  2022 /bin/passwd

Se o setuid bit for removido, a funcionalidade de alteração de senha não funcionará corretamente.

# ls -la /bin/passwd
-rwxr-xr-x 1 root root 68208 Nov 29  2022 /bin/passwd
user2@parisi-ubuntu:/mnt$ passwd
Changing password for user2.
Current password: 
New password: 
Retype new password: 
passwd: Authentication token manipulation error
passwd: password unchanged

Quando o setuid bit é restaurado, o aplicativo passwd é executado como o proprietário (raiz) e funciona corretamente, mas apenas para o usuário que executa o comando passwd.

# chmod u+s /bin/passwd
# ls -la /bin/passwd
-rwsr-xr-x 1 root root 68208 Nov 29  2022 /bin/passwd
# su user2
user2@parisi-ubuntu:/mnt$ passwd user1
passwd: You may not view or modify password information for user1.
user2@parisi-ubuntu:/mnt$ passwd
Changing password for user2.
Current password: 
New password: 
Retype new password: 
passwd: password updated successfully

Setuid não tem efeito sobre diretórios.

Setgid

O setgid bit pode ser usado em arquivos e diretórios.

Nos diretórios, o setgid pode ser usado como uma forma de herdar o grupo proprietário de arquivos e pastas criados abaixo do diretório pai com o conjunto de bits. Como setuid, o bit executável é alterado para um "s" ou um "S".

Observação

O “S” maiúsculo significa que o bit executável não foi definido, por exemplo, se as permissões no diretório forem “6” ou “rw”.

Por exemplo:

# chmod g+s testdir
# ls -la | grep testdir
drwxrwSrw-  2 user1 group1     4096 Oct 11 16:34 testdir
# who
root     ttyS0        2023-10-11 16:28
# touch testdir/file
# ls -la testdir
total 8
drwxrwSrw- 2 user1 group1 4096 Oct 11 17:09 .
drwxrwxrwx 5 root  root   4096 Oct 11 16:37 ..
-rw-r--r-- 1 root  group1    0 Oct 11 17:09 file

Quanto aos arquivos, o setgid se comporta de forma semelhante a setuid-executáveis são executados usando as permissões do proprietário do grupo. Se um usuário estiver no grupo de proprietários, ele tem acesso para executar o arquivo quando o setgid é definido. Se eles não estiverem no grupo, eles não obterão acesso. Por exemplo, se um administrador quiser limitar quais usuários podem executar o mkdir comando em um cliente, eles poderão usar setgid.

Normalmente, /bin/mkdir tem 755 permissões com propriedade do usuário root. Isso significa que qualquer pessoa pode executar mkdir em um cliente.

# ls -la /bin/mkdir 
-rwxr-xr-x 1 root root 88408 Sep  5  2019 /bin/mkdir

Para modificar o comportamento para limitar quais usuários podem executar o mkdir comando, altere o grupo que possui o mkdir aplicativo, altere as permissões para /bin/mkdir 750 e adicione o bit setgid a mkdir.

# chgrp group1 /bin/mkdir
# chmod g+s /bin/mkdir
# chmod 750 /bin/mkdir
# ls -la /bin/mkdir
-rwxr-s--- 1 root group1 88408 Sep  5  2019 /bin/mkdir

Como resultado, o aplicativo é executado com permissões para group1. Se o usuário não for membro, group1o usuário não obterá acesso para execução mkdir.

User1 é um membro de group1, mas user2 não é:

# id user1
uid=1001(user1) gid=1001(group1) groups=1001(group1)
# id user2
uid=1002(user2) gid=2002(group2) groups=2002(group2)

Após essa alteração, user1 pode executar mkdir, mas user2 não pode, pois user2 não está em group1.

# su user1
$ mkdir test
$ ls -la | grep test
drwxr-xr-x  2 user1 group1     4096 Oct 11 18:48 test

# su user2
$ mkdir user2-test
bash: /usr/bin/mkdir: Permission denied

Bit autoadesivo

O bit autoadesivo é usado somente nos diretórios e, quando usado, controla quais arquivos podem ser modificados nesse diretório, independentemente das permissões de bit do modo. Quando um bit autoadesivo é definido, somente os proprietários de arquivos (e raiz) podem modificar arquivos, mesmo que as permissões de arquivo sejam mostradas como “777”.

No exemplo a seguir, o diretório “autoadesivo” reside em um volume do Azure NetApp Fils e tem permissões abertas, mas o bit autoadesivo está definido.

# mkdir sticky
# chmod 777 sticky
# chmod o+t sticky
# ls -la | grep sticky
drwxrwxrwt  2 root  root       4096 Oct 11 19:24 sticky

Dentro da pasta há arquivos pertencentes a usuários diferentes. Todas têm 777 permissões.

# ls -la
total 8
drwxrwxrwt 2 root     root   4096 Oct 11 19:29 .
drwxrwxrwx 8 root     root   4096 Oct 11 19:24 ..
-rwxr-xr-x 1 user2    group1    0 Oct 11 19:29 4913
-rwxrwxrwx 1 UNIXuser group1   40 Oct 11 19:28 UNIX-file
-rwxrwxrwx 1 user1    group1   33 Oct 11 19:27 user1-file
-rwxrwxrwx 1 user2    group1   34 Oct 11 19:27 user2-file

Normalmente, qualquer pessoa seria capaz de modificar ou excluir esses arquivos. Mas como o diretório pai tem o bit sticky ativado, somente os proprietários dos arquivos podem fazer alterações nos arquivos.

Por exemplo, user1 não pode modificar nem excluir user2-file:

# su user1
$ vi user2-file
Only user2 can modify this file.
Hi
~
"user2-file"
"user2-file" E212: Can't open file for writing
$ rm user2-file 
rm: can't remove 'user2-file': Operation not permitted

Por outro lado, user2 não podem modificar nem excluir user1-file, pois não possuem o arquivo e o bit autoadesivo é definido no diretório pai.

# su user2
$ vi user1-file
Only user1 can modify this file.
Hi
~
"user1-file"
"user1-file" E212: Can't open file for writing
$ rm user1-file 
rm: can't remove 'user1-file': Operation not permitted

Root, no entanto, ainda pode remover os arquivos.

# rm UNIX-file 

Para alterar a capacidade da raiz de modificar arquivos, você deve esmagar a raiz para um usuário diferente por uma regra de política de exportação do Azure NetApp Files. Para obter mais informações, consulte esmagamento raiz.

Umask

Em operações NFS, as permissões podem ser controladas por meio de bits de modo, que utilizam atributos numéricos para determinar o acesso a arquivos e pastas. Esses bits de modo determinam atributos especiais, de leitura, gravação, execução e de leitura. Numericamente, as permissões são representadas como:

  • Executar = 1
  • Leitura = 2
  • Gravação = 4

O total de permissões é determinado adicionando ou subtraindo uma combinação do anterior. Por exemplo:

  • 4 + 2 + 1 = 7 (pode fazer tudo)
  • 4 + 2 = 6 (leitura/gravação)

Para obter mais informações, consulte a Ajuda de Permissões UNIX.

Umask é uma funcionalidade que permite que um administrador restrinja o nível de permissões permitidas a um cliente. Por padrão, a umask para a maioria dos clientes é definida como 0022. 0022 significa que os arquivos criados a partir desse cliente são atribuídos a essa umask. A umask é subtraída das permissões base do objeto. Se um volume tiver permissões 0777 e for montado usando NFS em um cliente com uma umask de 0022, os objetos gravados do cliente nesse volume terão acesso 0755 (0777 – 0022).

# umask
0022
# umask -S
u=rwx,g=rx,o=rx 

No entanto, muitos sistemas operacionais não permitem que arquivos sejam criados com permissões de execução, mas permitem que as pastas tenham as permissões corretas. Assim, os arquivos criados com uma umask de 0022 podem acabar com permissões de 0644. O exemplo a seguir usa o RHEL 6.5:

# umask
0022
# cd /cdot
# mkdir umask_dir
# ls -la | grep umask_dir
drwxr-xr-x.  2 root     root         4096 Apr 23 14:39 umask_dir

# touch umask_file
# ls -la | grep umask_file
-rw-r--r--.  1 root     root            0 Apr 23 14:39 umask_file

Próximas etapas