O umask não pode adicionar permissões, apenas servidores para mascarar alguns dos bits de permissão definidos pelo processo que criou o arquivo em questão.
The umask is used by
open(2)
,mkdir(2)
, and other system calls that create files to modify the permissions placed on newly created files or directories. Specifically, permissions in the umask are turned off from the mode argument toopen(2)
andmkdir(2)
.
touch
cria arquivos com permissões 0666
, como a maioria dos outros aplicativos faz quando não cria algo explicitamente conhecido como privado ou algo que deve ser executável (nesse caso eles usariam 0600
ou 0777
respectivamente). Se o umask
pudesse ser usado para forçar a adição de bits de permissão, coisas como clientes de e-mail e ssh-keygen
estariam com problemas: eles não teriam como criar arquivos que só podem ser acessados pelo proprietário!
$ umask 027; rm xxx; strace -etrace=open touch xxx 2>&1 | grep xxx ; ls -l xxx
open("xxx", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-r----- 1 itvirta itvirta 0 Jun 3 20:40 xxx
Se providenciarmos que o arquivo seja criado com permissões mais amplas, também vemos os bits de execução:
$ umask 027; rm yyy;
$ perl -MFcntl -e 'sysopen F, "yyy", O_WRONLY|O_CREAT, 0777'
$ ls -l yyy
-rwxr-x--- 1 itvirta itvirta 0 Jun 3 20:40 yyy*
Da mesma forma, poderíamos criar um diretório sem o x
bits definido ...
$ perl -MFcntl -e 'mkdir "ddd", 0666'
$ ls -ld ddd
drw-r----- 2 itvirta itvirta 4096 Jun 3 20:45 ddd/