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.