Acho que a resposta é "É assim que funciona", mas pensei em perguntar caso estivesse fazendo algo errado.
O umask padrão da minha conta é 0077
. Eu estou no wheel
grupo.
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 crio 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
Agora decido que este é um executável, então altero as permissões. Desta vez, não segue o ACL, segue o 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
Eu preciso especificar a+x
para fazer isso funcionar.
$ 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 entendo porque touch
cria um arquivo de acordo com a ACL, mas chmod
ajusta as permissões ignorando a ACL.
Recurso explícito de chmod.
man chmod
Se você quiser verificar algumas ideias relacionadas sobre ACLs, há uma resposta que achei informativa. Ele permite que você veja os detalhes exatos das chamadas do sistema que estão configurando as permissões de arquivo. (Obrigado slm!)
Como o umask afeta as ACLs?
No entanto, não é necessariamente uma boa introdução de como esses detalhes podem ser usados. * Permissões nix são bem estranhas quando você começa a querer usar ACLs padrão (ou set-GID tradicional). Atualmente, há uma limitação de que o umask que você deseja para o comportamento mais consistente não é suportado em SOs de estações de trabalho multiusuário que usam systemd (e também udisks monta sistemas de arquivos FAT com os bits de permissão errados).
As ACLs padrão podem ser usadas em servidores de arquivos Unix para estações de trabalho Windows. Acho que em alguns casos isso pode envolver o uso de uma configuração hacky do Samba para substituir efetivamente o umask. É claro que o Linux pode acessar o Samba, e então você pode se beneficiar desse recurso de substituição de hack^W. 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 (Arquivos GNOME) também não implementa ACLs padrão em movimento. O Windows Explorer sim).Você está testemunhando uma das mais sutilezas das permissões do Unix/Linux. As ACLs estão sendo selecionadas quando você chama o
touch
comando do diretório pai onde o arquivo está sendo criado. As ACLs incorporam as permissões tradicionais (modos) + as ACLs.Quando você está usando
chmod
, está manipulando apenas os bits MODE dos arquivos ou diretórios nos quais está atuando. Tenha em mente que estes são discretamente diferentes e, portanto, deve-se ter cuidado ao manipulá-los.Exemplo
Se você usar
strace
você pode ver comochmod
funciona. Para começar vamos criar um arquivo,file_077
:Veja os resultados:
Altere as permissões do arquivo para
a+x
:Veja o log resultante:
Aqui podemos ver que
chmod
está interrogandoumask
e, em seguida, configurando os bits MODE de acordo. Ele nunca olha para ACLs. NOTA: Tenha em mente que esta interrogaçãochmod
não é para incorporar a saída deumask
em suas operações.