Compartilhar via


Entender os bits de modo nos Arquivos NetApp do Azure

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

Bits do modo NFS

As permissões de bit 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 na RFC-1813. A tabela a seguir mostra como esses valores numéricos correspondem aos controles de acesso.

Modo de bit numérico
1 – executar (x)
2 – Escreva (w)
3 – Gravar/Executar (WX)
4 – Ler (R)
5 – Leitura/Execução (Rx)
6 – Leitura/Gravação (RW)
7 – Leitura/Gravação/Execução (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 de acesso de usuário granulares em vigor para NFSv3 básico. A imagem a seguir mostra um exemplo de como um controle de acesso de bit de modo pode ser construído para uso com um objeto NFSv3.

.

Os Arquivos NetApp do Azure não oferecem suporte a ACLs POSIX. Assim, ACLs granulares só são possíveis com NFSv3 ao usar um volume de estilo de segurança NTFS com mapeamentos de nome UNIX para Windows válidos por meio de um serviço de nomes, como o LDAP do Active Directory. Como alternativa, você pode usar o NFSv4.1 com os Arquivos do Azure NetApp e as 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 ID do usuário na execução (setuid)
  • Definir ID do grupo na execução (setgid)
  • Salvar texto trocado (bit adesivo)
  • permissão Leitura para o proprietário
  • Permissão de gravação para o proprietário
  • Executar permissão para proprietário em um arquivo; ou procurar (pesquisar) permissão para proprietário no diretório
  • permissão Leitura para grupo
  • Permissão de gravação para grupo
  • Executar permissão para grupo em um arquivo; ou procurar (pesquisar) permissão para grupo no diretório
  • permissão Leitura para os outros
  • Permissão de gravação para outras pessoas
  • Executar permissão para outras pessoas em um arquivo; ou procurar (pesquisar) permissão para outros no diretório
  • Tipos de ACE (Permitir/Negar/Auditar)
  • Sinalizadores de herança:
  • herdança de diretório
  • herança-arquivo
  • não-propagar-herdar
  • somente herança
  • 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
  • excluir-filho
  • atributos de leitura
  • atributos de gravação
  • atributos de nome-leitura
  • atributos de nome-de-gravação
  • leitura-ACL
  • gravação-ACL
  • proprietário da gravação
  • Sincronizar

Para obter mais informações, consulte Noções básicas sobre listas de controle de acesso do NFSv4.x ACLs.

Sticky bits, setuid e setgid

Ao usar bits de modo com montagens NFS, a propriedade de arquivos e pastas é baseada no uid e do usuário que criou os arquivos e gid 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, , setgidsticky bit), esse comportamento pode ser controlado.

Setuid

O setuid bit é 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 tentando executar o arquivo. Por exemplo, o aplicativo tem o bit habilitado por padrão, portanto, o /bin/passwd setuid aplicativo é executado como root 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 bit é restaurado, o aplicativo passwd é executado como o proprietário (root) e funciona corretamente, mas apenas para o setuid 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.

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

Observação

"S" maiúsculo significa que o bit executável não foi definido, como se as permissões no diretório fossem "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

Para arquivos, setgid se comporta de forma semelhante a setuid—executáveis executados usando as permissões de grupo do proprietário do grupo. Se um usuário estiver no grupo de proprietários, esse usuário terá acesso para executar o executável quando setgid estiver definido. Se não estiverem no grupo, não terão acesso. Por exemplo, se um administrador quiser limitar quais usuários podem executar o mkdir comando em um cliente, ele poderá usar setgid.

Normalmente, /bin/mkdir tem 755 permissões com propriedade 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 comando, altere o grupo que possui o aplicativo, altere as permissões para /bin/mkdir 750 e, em seguida, adicione o mkdir mkdir bit setgid ao 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 do group1, ele não terá acesso para executar mkdiro .

User1 é membro do 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, pode executar mkdir, mas user2 não pode, user1 uma vez que user2 não está no 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

Pedaço pegajoso

O bit adesivo é usado apenas para diretórios e, quando usado, controla quais arquivos podem ser modificados nesse diretório, independentemente de suas permissões de bit de modo. Quando um bit pegajoso é definido, somente os proprietários de arquivos (e a raiz) podem modificar arquivos, mesmo que as permissões de arquivo sejam mostradas como "777".

No exemplo a seguir, o diretório "sticky" vive em um volume do Azure NetApp Fils e tem permissões abertas, mas o bit sticky é 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 estão arquivos de propriedade de diferentes usuários. Todos 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 a pasta pai tem um bit fixo definido, somente os proprietários do arquivo 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, não é possível modificar nem excluiruser1-file, user2 pois eles não possuem o arquivo e o bit adesivo é 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 squash root para um usuário diferente por meio de uma regra de política de exportação do Azure NetApp Files. Para obter mais informações, consulte Esmagamento de raiz.

Umask

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

  • Executar = 1
  • Leitura = 2
  • Escrever = 4

As permissões totais são determinadas adicionando ou subtraindo uma combinação das anteriores. 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 do UNIX.

O Umask é uma funcionalidade que permite a um administrador restringir o nível de permissões permitidas a um cliente. Por padrão, o umask para a maioria dos clientes é definido como 0022. 0022 significa que os arquivos criados a partir desse cliente recebem esse umask. O umask é subtraído das permissões base do objeto. Se um volume tiver permissões 0777 e for montado usando NFS para um cliente com um umask de 0022, os objetos gravados do cliente para esse 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, arquivos criados com um 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