Definindo umask para todos os usuários

3

Estou tentando definir a umask padrão como 002 para todos os usuários, incluindo root na minha caixa do CentOS.

De acordo com esta e outras respostas, isso pode ser feito editando /etc/profile . No entanto, os comentários no topo desse arquivo dizem:

It's NOT a good idea to change this file unless you know what you are doing. It's much better to create a custom.sh shell script in /etc/profile.d/ to make custom changes to your environment, as this will prevent the need for merging in future updates.

Então eu fui em frente e criei o seguinte arquivo:
/etc/profile.d/myapp.sh
com a linha única:

umask 002

Agora, quando eu crio um arquivo logado como root, o arquivo nasce com 664 permissões, como eu esperava. Mas arquivos criados pelo meu aplicativo mod_wsgi do Apache, ou arquivos criados com o sudo, ainda são padrão para 644 permissões ...

$ touch newfile (como root):
Resultado = 664 (Works)

$ sudo touch newfile :
Resultado = 644 (não funciona)

Arquivos criados pelo aplicativo apache mod_wsgi:
Resultado = 644 (não funciona)

Arquivos criados pelo RotatingFileHandler do Python:
Resultado = 644 (não funciona)

Por que isso está acontecendo e como posso garantir 664 permissões de arquivos em todo o sistema, independentemente do que criar o arquivo?

    
por Yarin 16.12.2012 / 19:21

2 respostas

5

profile é um arquivo de inicialização para o shell. A configuração de umask 002 in profile.d define isso para todos os usuários que iniciam seus processos a partir de um shell de login.

Seus dois exemplos são de natureza diferente. Para o Apache, você pode definir o umask no script init.d que inicia o servidor http.

Para processos iniciados com sudo , você pode usar a opção umask no arquivo sudoers.

    
por 16.12.2012 / 19:34
3

A melhor maneira de fazer a coisa do umask é editar o arquivo /etc/bashrc para raiz e ~/.bashrc para outros usuários. Qualquer coisa que você colocar em ~/.bashrc para um usuário em particular irá substituir o que você colocou em / etc / profile.

Então, descubra sob qual usuário seu apache está sendo executado e coloque umask no arquivo ~./bashrc .

Isso vale para os usuários. Ele inclui logins de usuários interativos e pode começar a trabalhar com o sourcing dos arquivos. Não requer logout e in.

Mas se você vai definir umask para daemons, então você precisa entrar no script init e colocar o umask lá depois que ele originar o arquivo /etc/rc.d/init.d/functions . Se você definir umask antes disso, pode não funcionar. Mas eu tenho visto alguns daemons que não funcionam mesmo quando você configura umask em seu script de init, um exemplo rápido seria o cobblerd no RHEL. Para isso, você precisa colocar umask no arquivo /etc/rc.d/init.d/functions .

Mas principalmente colocando o valor umask em ~/.bashrc file works.

Foi assim que consegui que funcionasse até agora, mas se outras opiniões surgirem, ficarei feliz em saber.

    
por 16.12.2012 / 19:39