Você não pode definir umask por diretório, é um valor no nível do processo. Se você precisar impedir que outras pessoas leiam arquivos em um diretório, revogue os bits de permissão correspondentes.
Por exemplo, se você tiver um diretório /home/user/directory
com alguns arquivos e diretórios que podem obter permissões como 777 de um processo, defina os bits de permissão /home/user/directory
para algo como 700. Isso tornará impossível a descida de outros usuários (excluindo a raiz do superusuário) no /home/user/directory
.
Sou paranóico e defino as permissões /home/user
para 750, para que apenas eu possa ler, escrever e descer no meu diretório pessoal. Isso tem como conseqüência que pastas como /home/user/Public
não podem ser acessadas por outras pessoas, mas eu posso viver com isso.
Por atualização da sua pergunta: ainda assim, você não pode controlar isso no sistema de arquivos (exceto usando um tipo de sistema de arquivos diferente como o FAT, que é fortemente desaconselhável), é necessário fazer isso no seu aplicativo da web. Se o seu aplicativo da web estiver codificado em PHP, você poderá alterar o umask on the fly usando a umask
função:
<?php
umask(0022);
// other code
?>
Você pode colocar isso em um arquivo de configuração, como o arquivo que contém a senha de conexão com o banco de dados (pensando em aplicativos como o Wordpress).
Lembre-se de que é um valor do processo, alguns servidores da Web permitem que você o defina em seus arquivos de configuração; caso contrário, você pode modificar os scripts de inicialização para definir o umask desejado. Lembre-se de que permissões são 755
e 644
são bastante perigosas para aplicativos da web; se o código for sensível, todos poderão lê-lo.