Maneiras de definir umask no Ubuntu para processos daemon

8

Eu tenho um processo de servidor http daemon (yaws) que gostaria que o servidor escrevesse novos arquivos com uma umask de 002, para que outro usuário do mesmo grupo possa modificar, mover ou excluir arquivos criados pelo processo daemon. Isso está no Ubuntu 10.04.

Diferentemente do Apache, o yaws não possui uma opção de configuração para umask; portanto, quais métodos existem para definir o umask de qualquer processo daemon?

Encontrei esta resposta sobre como alterar o script init a ser adicionado umask 002. Isso funcionou, mas não tenho certeza se a edição do script init é a melhor maneira de tornar isso fácil de documentar e configurar em várias máquinas.

Eu também encontrei referência ao módulo pam_umask aqui . Parece que isso permite que as configurações por usuário do umask sejam configuradas no campo GECOS de / etc / passwd.

Existem outras maneiras de definir os processos umask para daemon? E qual seria a maneira recomendada?

mp3foley
fonte

Respostas:

2

Crie um .profilearquivo no diretório inicial do daemon:

#!/bin/sh
umask 002

Você pode encontrar o diretório inicial do daemon executando:

getent passwd daemon | awk -F':' '{ print $6; }'

Se isso não funcionar, a única outra solução em que posso pensar seria editar o /etc/init.dscript.

Zaz
fonte
2
daemon passwd | awk -F ':' {imprime $ 6; } funciona também.
Janne Pikkarainen 02/08/10
1
Não há necessidade de usar sudopara ler /etc/passwd. Ou, catnesse caso ( grepaceitará um nome de arquivo como argumento ou apenas usará getentcomo Janne apontou).
Pausado até novo aviso.
Isso não funciona no Ubuntu 10.04. Isso pode ser porque / bin / sh está vinculado a / bin / dash, mas alterei o shell padrão dos daemons para / bin / bash e ainda não funcionou. Eu acho que isso ocorre porque $ HOME / .profile não é lido por bash não interativos e sem logon ou shell. Não consegui encontrar nenhuma maneira fácil de demonstrar isso na linha de comando. O shell interativo umask pode ser mostrado com sudo -u daemon bash -c umask. Testei não-interativo alterando as configurações e reiniciando o daemon e examinando as permissões nos arquivos que ele cria.
mp3foley
@ mp3foley: Não estou familiarizado dash, mas umaskdeveria trabalhar nisso.
Zaz
Também fiz perguntas na lista de discussão de daemons (yaws). A melhor maneira é adicionar a configuração umask no script de inicialização do daemon em /etc/init.d/. Alguém está até corrigindo o código fonte dos daemons.
Mp3foley
5

No Ubuntu 10.04, as configurações padrão globais de umask podem ser controladas com o módulo pam_umask.

Alguns detalhes foram encontrados neste blog relacionados ao Debian em geral: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask

O módulo pam_umask é instalado por padrão no Ubuntu 10.04, mas precisa ser configurado.

Edite /etc/pam.d/common-session, adicionando a linha:

session optional pam_umask.so umask=022

As configurações por usuário podem ser alteradas executando o comando:

sudo chfn -o "umask=002" daemon_username

para adicionar uma configuração umask ao campo GECOS em / etc / passwd.

Isso funciona apenas para shells não interativos e sem logon, como quando um script de inicialização do daemon é executado na inicialização.

Para shells de login, as configurações do umask precisam ser removidas de outros arquivos de configuração do shell, como / etc / profile, /etc/login.defs ou diretório inicial do usuário .profile, .bashrc, etc. Caso contrário, as configurações do pam_umask serão substituídas. Veja a página de manual pam_umask para a ordem de configuração.

mp3foley
fonte
1

Se o serviço for iniciado através da ferramenta "start-stop-daemon", o umask poderá ser especificado no nível da linha de comandos com o parâmetro "--umask", por exemplo:

log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion --umask 002 ; then
        log_end_msg 0
    else
        log_end_msg 1
        RET=1
    fi

Ajustar o script de início para ler esses detalhes de um arquivo de configuração pode ser mais transparente do que adicionar configurações baseadas no usuário - isso obviamente depende do procedimento de inicialização usado para o daemon.

Mais informações podem ser recuperadas no man-Page: man start-stop-daemon

Dirk
fonte