chmod, umask, acl

2

Acho que a resposta é "É assim que funciona", mas imaginei que gostaria de perguntar no caso de estar fazendo algo errado.

Umask padrão da minha conta é 0077 . Eu estou no grupo wheel .

Eu tenho um diretório com esta ACL:

# file: .
# owner: root
# group: wheel
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:wheel:rwx
default:mask::rwx
default:other::r-x

Eu criei um arquivo e as permissões estão definidas corretamente de acordo com a ACL acima.

$ touch z
$ ls -al
drwxrwsr-x+ 2 root      wheel 4,096 Aug  7 12:36 .
drwxr-xr-x. 7 root      root  4,096 Aug  6 17:31 ..
-rw-rw-r--+ 1 ehymowitz wheel     0 Aug  7 12:36 z

Eu agora decido que isso é um executável, então altero as permissões. Desta vez, ele faz não seguir a ACL, segue a umask.

$ chmod +x z
$ ls -al
drwxrwsr-x+ 2 root      wheel 4,096 Aug  7 12:36 .
drwxr-xr-x. 7 root      root  4,096 Aug  6 17:31 ..
-rwxrw-r--+ 1 ehymowitz wheel     0 Aug  7 12:36 z

Preciso especificar a+x para que isso funcione.

$ chmod a+x z
$ ls -al
drwxrwsr-x+ 2 root      wheel 4,096 Aug  7 12:36 .
drwxr-xr-x. 7 root      root  4,096 Aug  6 17:31 ..
-rwxrwxr-x+ 1 ehymowitz wheel     0 Aug  7 12:36 z

Acho que não entendi porque touch cria um arquivo de acordo com a ACL, mas chmod ajusta as permissões ignorando a ACL.

    
por hymie 07.08.2018 / 14:40

2 respostas

1

Você está testemunhando uma das mais sutilezas das permissões do Unix / Linux. As ACLs estão sendo selecionadas quando você chama o comando touch do diretório pai no qual o arquivo está sendo criado. As ACLs incorporam as permissões tradicionais (modos) + as ACLs.

Quando você está usando chmod , você está manipulando apenas os bits MODE dos arquivos ou diretórios nos quais você está agindo. Tenha em mente que estes são discretamente diferentes e, portanto, é preciso ter cuidado ao manipulá-los.

Exemplo

Se você usar strace , poderá ver como chmod funciona. Para começar, vamos criar um arquivo, file_077 :

$ rm afile_077*; umask 077; strace -s 2000 touch afile_077 > afile_077.tr 2>&1

Veja os resultados:

$ ll afile_077
-rw------- 1 user1 user1 0 Aug  7 09:32 afile_077

Altere as permissões no arquivo para a+x :

$ strace -s 2000 chmod a+x afile_077  > afile_077_chmod.tr 2>&1

Veja o log resultante:

$ cat afile_077_chmod.tr 
...
umask(0)                                = 02
stat("afile_077", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
fchmodat(AT_FDCWD, "afile_077", 0711)   = 0
...

Aqui podemos ver que chmod está interrogando o umask e então definindo os bits MODE de acordo. Nunca olha para as ACLs. OBSERVAÇÃO: Lembre-se de que essa interrogação feita por chmod não incorporará a saída de umask em suas operações.

    
por 07.08.2018 / 15:13
2

Recurso explícito do chmod.

man chmod

A combination of the letters ugoa controls which users' access to the file will be changed: the user who owns it (u), other users in the file's group (g), other users not in the file's group (o), or all users (a). If none of these are given, the effect is as if (a) were given, but bits that are set in the umask are not affected.

Se você quiser verificar algumas ideias relacionadas sobre as ACLs, há uma resposta que achei informativa. Ele permite que você veja os detalhes exatos das chamadas do sistema que estão definindo as permissões do arquivo. (Obrigado slm!)

Como o umask afeta as ACLs?

No entanto, não é necessariamente uma boa introdução sobre como esses detalhes podem ser usados. * nix permissões são muito estranhas, uma vez que você começar a querer usar ACLs padrão (ou tradicional set-GID). Atualmente, há uma limitação de que o umask que você deseja para o comportamento mais consistente não é suportado em em sistemas operacionais de estações de trabalho multiusuário que usam systemd (e também o udisks monta sistemas de arquivos FAT com os bits de permissão errados).

ACLs padrão podem ser usadas em servidores de arquivos Unix para estações de trabalho Windows. Eu acho que em alguns casos isso poderia envolver o uso de uma configuração hacky do Samba para efetivamente substituir o umask. É claro que o Linux pode acessar o Samba e, em seguida, você pode se beneficiar dessa substituição hack ^ Wfeature. O mesmo hack pode ser configurado no Linux usando o sistema de arquivos FUSE "bindfs".

(Dito isso, o Linux mv entre pastas no mesmo sistema de arquivos montado nunca respeita ACLs padrão diferentes. O nautilus (GNOME Files) também não implementa ACLs padrão ao mover. O Windows Explorer faz isso).

    
por 07.08.2018 / 14:53

Tags