qué permiso para escribir el archivo PID en / var / run


51

Ubuntu

touch: no se puede tocar `/var/run/test.pid ': permiso denegado

Estoy comenzando start-stop-daemon y me gusta escribir el archivo PID en / var / run start-stop-daemon se ejecuta como my-program-user

La configuración / var / run es raíz raíz drwxr-xr-x 9

Me gusta evitar poner my-program-user en el grupo raíz.

Respuestas:


71

De forma predeterminada, solo puede escribir en / var / run como usuario con un ID de usuario efectivo de 0 (es decir, como root). Esto es por buenas razones, así que hagas lo que hagas, no vayas y cambies los permisos de / var / run ... En su lugar, como root, crea un directorio en / var / run:

# mkdir /var/run/mydaemon

Luego cambie su propiedad al usuario / grupo bajo el cual desea ejecutar su proceso:

# chown myuser:myuser /var/run/mydaemon

Ahora especifique usar / var / run / mydaemon en lugar de / var / run.

Siempre puede probar esto ejecutando una prueba como el usuario en cuestión.


55
Esto funcionó bien para mí, pero cuando reinicié mi servidor, el /var/run/mydaemondirectorio desapareció.
myborobudur

17
Esta no es una respuesta completa, / var / run es tmpfs por defecto en Ubuntu. Cada vez que se inicia el servidor, es necesario volver a ejecutar el comando mkdir y chown.
Tim

1
@Tim ¿qué tal editar la respuesta y completarla?
Kaiser

Si está tratando con un demonio, entonces una solución limpia sería agregar la ruta / var / run / mydaemon al archivo de la unidad systemd como se describe aquí . Una solución hacky más fácil sería agregar los comandos mkdir y chown al script init.d (si existe)
odedfos

1
Una mejor respuesta extensa está aquí: superuser.com/a/1127720/71795, una respuesta incorrecta que parece muy elegante está aquí: stackoverflow.com/a/5174433 . Resumen: use cualquiera /tmpo ~.
Tim

13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

esto no funcionará, ya que se perderá en el próximo reinicio ( /var/runes un tmpfs en Ubuntu).

La única solución factible es ejecutar mkdir y chmod como parte de los scripts de inicio.


3

Puedes probar esto. Cree un directorio / var / run / test / y luego cambie el permiso de este directorio al mismo usuario que ejecuta su programa. "chown / var / run / test /". Ahora en su aplicación, cambie la ubicación del archivo PID a /var/run/test/test.pid. Esto debería hacer que las cosas funcionen para usted.


2

¿Qué pasa con el uso del bit "pegajoso" en / var / run?

chmod + t / var / run?

Probablemente estropee algunas otras aplicaciones, pero parece que sería otra solución.

Sin embargo, me quedaré con la creación de una carpeta / var / run separada por ahora.


1

Las entradas en el /etc/permissionsson permanentes. Haga una entrada allí para hacer que la propiedad y los permisos de un directorio sean permanentes.


-6

Para evitar poner a su usuario del programa en el grupo raíz, permita que otros escriban acceso:

# chmod 757

3
¡Nunca haga un chmod 757 en / var / run! Esto causaría un grave problema de seguridad
michel

1
Esta es una idea terrible. Causaría un problema de seguridad potencialmente masivo
Tom O'Connor

Incluso si ignoramos el problema de seguridad, chmod 757también solo funcionará hasta el próximo reinicio. Perdón por crear una nueva respuesta, pero parece que no hay forma de responder al otro comentario.
Vladimir Nicolici

@michel, el autor nunca dijo que hiciera un chmodencendido /var/run. El autor puede haberlo significado para el subdirectorio de la aplicación. No estoy seguro de qué se trata todo este alboroto.
Acumenus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.