Como você aplica as configurações de umask a uma conta que não faz login?

5

No meu servidor Ubuntu 11.04x64, tenho contas de serviço em execução que não fazem login e não possuem diretórios base. Essas contas de serviço são responsáveis por executar processos que são chamados como serviços.

Quando esses serviços criam novos arquivos, eu preciso que eles sejam criados com as permissões 664 (UMASK 002).

Eu editei a configuração de /sk do / etc / profile para refletir isso. Vejo que agora minha conta de usuário cria arquivos que refletem essa nova configuração de umask, mas as contas de serviço não aparecem quando eu manualmente criei arquivos usando suas contas (sudo -u serviceaccount touch newfile).

Alguma sugestão?

    
por nfarrar 04.08.2011 / 05:19

1 resposta

3

Se os serviços forem iniciados via Upstart ou /etc/init.d, edite os initscripts apropriados.

  • init.d: umask 02 na parte superior do script (eles são scripts comuns de sh )
  • Upstart : umask 02 em qualquer lugar

O Linux não possui uma definição estrita de "login", e uma conta é meramente um UID que pode (ou não pode) ser associado a um nome / homedir / etc.

Quando você efetua login no console / over SSH, o programa de login (ou o daemon SSH) usa o PAM para configurar o ambiente (possivelmente pam_umask ) e, em seguida, inicia seu shell com o sinalizador "login". O script /etc/profile pertence aos shells sh e bash , que apenas o lêem para invocações de "login".

Quando você usa sudo touch ... ou sudo /etc/init.d/foo start , o sudo ainda chama o PAM para configuração auth / account / session, mas não inicia o shell, significando todos "profile" ou "bashrc" "arquivos serão ignorados. (Isto é, a menos que você use sudo -i ... .)

Quando o Upstart executa um serviço, ele simplesmente alterna o UID para o do seu serviço, ignorando qualquer script de "perfil" ou configuração do PAM. A única configuração que é lida é o arquivo do serviço em /etc/init , que é onde você deve colocar a configuração do umask.

    
por 04.08.2011 / 16:32