Por algumas razões óbvias, preciso definir o umask
valor para uma pasta específica. Como alguém pode fazer isso?
Obrigado antecipadamente!
ATUALIZAÇÃO 1
O motivo pelo qual preciso usar umask para uma pasta específica é o seguinte. Eu tenho um aplicativo Web e, quando ele cria algum arquivo, a permissão padrão é 700. Mas eu preciso de pelo menos 755 permissões para esse arquivo. Acho que poderia explicar o problema mais claramente agora.
permissions
umask
Bakhtiyor
fonte
fonte
Respostas:
você poderia usar
setfacl
Onde
name
está o nome do grupoPara descobrir em quais grupos você ou um usuário específico pertence, consulte No unix / linux, como você descobre em qual grupo um determinado usuário está via linha de comando?
fonte
setfacl
tenha mudado. Estou recebendo um erro informando que-m
não é uma opção válida.setfacl
não mudou. Provavelmente você não forneceu o nome do grupo adequado (depois-m
).setfacl
é para listas de controle de acesso e nãoumask
. Uma solução melhor, mas não realmente o que foi solicitado, eu não acho.sudo setfacl -Rdm ...
(Omita o R para recursão) deve funcionar. @ Wyatt8740 (correto). Para ter certeza, execute:,man setfacl
e digite/-modify
. Você precisa usarsudo
.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: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
e644
são bastante perigosas para aplicativos da web; se o código for sensível, todos poderão lê-lo.fonte
/home/user/Public
(mount -o bind /home/user/Public /some/other/place
) para solucionar o problema de permissões do diretório pai.Para alterar as permissões de uma pasta, use chmod. umask é para arquivos.Defina umask para o que você precisa
e volte quando terminar
fonte
umask
). Desculpe por adicionar informações confusas.Outra solução pode ser apenas definir o ID do grupo nos arquivos criados no diretório, o que torna os novos arquivos pertencentes ao ID do grupo de diretórios, em vez do ID do grupo do usuário que criou os arquivos. Então eu acho que você poderia fazer:
chown www-data:www-data /my/folder
chmod 4755 /my/folder
Isso define a permissão de arquivo especial setgid, que faria com que todos os arquivos criados
/my/folder
pertencessem aowww-data
grupo, que possui permissão rx (5) por causa do diretório pai.fonte
Fornecer outra solução implementada com ganchos e
direnv
. A solução a seguir pode ser mais compatível casosetfacl
não esteja disponível no seu sistema. (por exemplo, macOS)Use
.envrc
como valorexport
personalizadoumask
para dir específico, e oexport
ed env var será descarregado quando você deixar esse dir.Defina um gancho para alterar o
umask
valor depois que o diretório de trabalho for alterado.Por enquanto, a inicialização do direnv hook para zsh não suporta
chpwd
hook. Se a solicitação de recebimento GH-514 não tiver sido mesclada quando você vir esta página. Por favor, comenteeval "$(direnv hook zsh)"
e ganchodirenv
emchpwd
manualmente com seguinte código,Fonte: dynamic-umask-based-on-cwd.md
fonte
Relacionado, mas talvez não aplicável, neste caso, o seguinte clipe é de
.zshrc
:Portanto, para uso interativo, algo assim funcionaria (mas, obviamente, não para fornecer segurança).
fonte