2009-01-27 17 views
24

Estoy escribiendo un nuevo daemon, que se alojará en Debian Linux.¿Cómo debo iniciar sesión desde un demonio de Debian Linux no root?

He encontrado que/var/log solo tiene permisos de escritura, por lo que mi daemon no puede escribir archivos de registro allí.

Sin embargo, si escribe allí, parece que obtendrá la rotación automática de registros, y también funcionará como un usuario podría esperar.

¿Cuál es la forma recomendada para que un daemon escriba las entradas de registro que aparecen en/var/log, sin tener que ejecutarse como root?

El daemon es un servidor web, por lo que el tráfico de registro será similar al de Apache.

Respuesta

36

Debe crear un subdirectorio como /var/log/mydaemon tener la propiedad de usuario del demonio

9

Como root, cree un archivo de registro allí y cambiar el propietario archivos al usuario del servidor web:

# touch /var/log/myserver.log 
# chown wwwuser /var/log/myserver.log 

A continuación, el servidor puede escribir a los archivos si se ejecuta como usuario wwwuser. Sin embargo, no ganará rotación automática de registros. Debe agregar el archivo de registro a /etc/logrotate.conf o /etc/logrotate.d/... y hacer que su servidor vuelva a abrir el archivo de registro cuando logrotate lo indique.

También puede usar syslog para el registro, si ese es su escenario mejor.

+2

su mejor "registrador" para poner los registros en un subdirectorio como la respuesta de WiseTechi menciona. Si tiene el archivo en/var/log y el archivo se elimina, el proceso no raíz no podrá volver a crear el archivo –

+0

También el daemon no podrá iniciar sesión, ya que no tiene permisos para crear nuevos archivos en el logdir. –

+0

Normalmente, el daemon no tiene que volver a crear el archivo, pero logrotated cambia el nombre del registro existente y crea un nuevo archivo de registro con los permisos correctos. Luego le dice al demonio que use el nuevo archivo, que puede hacerlo ya que tiene los permisos correctos. – sth

2

dos opciones:

  1. Start como root, abrir el archivo, a continuación, colocar los permisos con setuid. (No recuerdo las llamadas exactas del sistema para descartar permisos). De todos modos, tendrá que hacer esto si desea vincularse al puerto TCP 80 o cualquier puerto por debajo de 1024.
  2. Cree un subdirectorio como/var/log/mydaemon que tiene la propiedad del usuario del daemon, como WiseTechi said.

Los archivos en /var/log no se giran automáticamente; en cambio, la rotación está controlada por /etc/logrotate.conf y los archivos por debajo de /etc/logrotate.d.

Cuestiones relacionadas