Alguém pode me explicar como umask
afeta a máscara padrão dos arquivos recém-criados se as ACLs estiverem ativadas? Existe alguma documentação sobre isso?
Exemplo:
$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx . # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc x.c -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx #effective:rw-
group::---
mask::rw-
other::---
Eu esperaria mask:rwx
. Na verdade, depois de definir umask
como, por exemplo 027
, recebo o comportamento esperado.
linux
permissions
posix
acl
jofel
fonte
fonte
mask::rw-
. Mas essa não é realmente a sua pergunta, correto?mask::rw-
e nãomask::rwx
qual era a máscara padrão do diretório.Respostas:
Encontrei este exemplo, intitulado: ACL e MASK no linux . Neste artigo, são demonstrados os seguintes exemplos, que acho que ajudam a entender como as ACLs e
umask
interagem entre si.fundo
Quando um arquivo é criado em um sistema Linux, as permissões padrão
0666
são aplicadas, e quando um diretório é criado, as permissões padrão0777
são aplicadas.exemplo 1 - arquivo
Suponha que definimos nossa umask como 077 e toque em um arquivo. Podemos usar
strace
para ver o que realmente está acontecendo quando fazemos isso:Neste exemplo, podemos ver que a chamada do sistema
open()
é feita com as permissões 0666, no entanto, quandoumask 077
é aplicada pelo kernel, as seguintes permissões são removidas (---rwxrwx
) e ficamos com orw-------
aka 0600.exemplo - diretório 2
O mesmo conceito pode ser aplicado aos diretórios, exceto que, em vez das permissões padrão serem 0666, elas são 0777.
Desta vez, estamos usando o
mkdir
comando Omkdir
comando então chamou a chamada do sistemamkdir()
. No exemplo acima, podemos ver que omkdir
comando chamou amkdir()
chamada de sistema com as permissões padrão0777
(rwxrwxrwx
). Desta vez, com uma umask das022
seguintes permissões são removidas (----w--w-
), então ficamos com 0755 (rwxr-xr-x
) quando os diretórios foram criados.exemplo 3 (aplicando a ACL padrão)
Agora vamos criar um diretório e demonstrar o que acontece quando a ACL padrão é aplicada a ele, juntamente com um arquivo dentro dele.
Agora vamos criar o arquivo
aclfile
:Agora obtenha permissões do arquivo recém-criado:
Observe a máscara
mask::rw-
. Por que não émask::rwx
como quando o diretório foi criado?Verifique o
luvly
arquivo de log para ver quais permissões padrão foram usadas para a criação do arquivo:É aqui que fica um pouco confuso. Com a máscara definida para
rwx
quando o diretório foi criado, você esperaria o mesmo comportamento para a criação do arquivo, mas não funciona dessa maneira. É porque o kernel está chamando aopen()
função com as permissões padrão de0666
.Resumir
chmod
.Referências
fonte
chmod("file",0760)
->mask:rw
,chmod("file",0770)
->mask:rwx
). Talvez eu deva começar uma nova pergunta sobre isso ...por questões de segurança, o sistema operacional linux não permite a criação automática de um arquivo com um bit de execução. Isso evita que os invasores cibernéticos gravem programas nesses arquivos e os executem se tiverem acesso ao seu servidor. É apenas uma precaução de segurança. Você sempre terá que definir manualmente o bit de execução nos arquivos após criá-los com o utilitário chmod
fonte