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.

s5804
fuente

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.

Stephen Nelson-Smith
fuente
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.

Vladimir Nicolici
fuente
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.

proy
fuente
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.

usuario68971
fuente
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.

usuario432133
fuente
-6

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

# chmod 757
Ivan Chuchman
fuente
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