Formas de configurar umask en Ubuntu para procesos daemon

8

Tengo un proceso de servidor http daemon (pian) que me gustaría que el servidor escriba cualquier archivo nuevo con una máscara de 002, para que otro usuario en el mismo grupo pueda modificar, mover o eliminar archivos creados por el proceso daemon. Esto está en Ubuntu 10.04.

A diferencia de Apache, yaws no tiene una opción de configuración para umask, entonces, ¿qué métodos existen para configurar umask en cualquier proceso de daemon?

Encontré esta respuesta sobre cambiar el script de inicio para agregar umask 002. Esto funcionó, pero no estoy seguro de que editar el script de inicio sea la mejor manera de hacer que sea fácil de documentar y configurar en varias máquinas.

También encontré referencia al módulo pam_umask aquí . Parece que esto permite que la configuración por usuario de umask se configure en el campo GECOS de / etc / passwd.

¿Hay alguna otra forma de configurar la umask para los procesos de daemon? ¿Y cuál sería la forma recomendada?

mp3foley
fuente

Respuestas:

2

Cree un .profilearchivo en el directorio de inicio del demonio:

#!/bin/sh
umask 002

Puede encontrar el directorio de inicio del daemon ejecutando:

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

Si eso no funciona, la única otra solución que se me ocurre sería editar el /etc/init.dscript.

Zaz
fuente
2
gente passwd daemon | awk -F ':' {print $ 6; } también funciona.
Janne Pikkarainen
1
No hay necesidad de usar sudopara leer /etc/passwd. O catpara el caso ( grepaceptará un nombre de archivo como argumento o simplemente lo usará getentcomo señaló Janne).
Pausado hasta nuevo aviso.
Esto no funciona en Ubuntu 10.04. Esto podría deberse a que / bin / sh está vinculado a / bin / dash, pero cambié el shell predeterminado de los demonios a / bin / bash y aún no funcionó. Creo que esto se debe a que $ HOME / .profile no se lee mediante shells o dash no interactivos y sin inicio de sesión. No pude encontrar ninguna manera fácil de demostrar esto desde la línea de comandos. El shell interactivo umask se puede mostrar con sudo -u daemon bash -c umask. Probé no interactivo cambiando la configuración y reiniciando el demonio y mirando los permisos en los archivos que crea.
mp3foley
@ mp3foley: no estoy familiarizado dash, pero umaskdebería funcionar en ello.
Zaz
También hice una pregunta en la lista de correo de demonios (pian). La mejor manera es agregar la configuración de umask en el script de inicio del demonio en /etc/init.d/. Alguien incluso está reparando el código fuente de los demonios.
mp3foley
5

En Ubuntu 10.04, la configuración global predeterminada de umask se puede controlar con el módulo pam_umask.

Se encontraron algunos detalles en este blog relacionados con Debian en general: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask

El módulo pam_umask está instalado de forma predeterminada en Ubuntu 10.04, pero debe configurarse.

Edite /etc/pam.d/common-session, agregando la línea:

session optional pam_umask.so umask=022

Luego, la configuración por usuario se puede cambiar ejecutando el comando:

sudo chfn -o "umask=002" daemon_username

para agregar una configuración de umask al campo GECOS en / etc / passwd.

Esto solo funciona para shells no interactivos y sin inicio de sesión, como cuando se ejecuta un script de inicio de daemon en el arranque.

Para los shells de inicio de sesión, la configuración de umask debe eliminarse de otros archivos de configuración de shell como / etc / profile, /etc/login.defs o el directorio de inicio de los usuarios .profile, .bashrc, etc. De lo contrario, la configuración de pam_umask se anula. Consulte la página de manual de pam_umask para ver el orden de configuración.

mp3foley
fuente
1

Si el servicio se inicia a través de la herramienta "start-stop-daemon", la umask se puede especificar a nivel de línea de comando con el parámetro "--umask", por ejemplo:

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 el script de inicio para leer dichos detalles de un archivo de configuración podría ser más transparente que agregar configuraciones basadas en el usuario; esto, por supuesto, depende del procedimiento de inicio utilizado para el demonio.

Se puede obtener más información de la página man: man start-stop-daemon

Puñal
fuente