Estoy escribiendo un proceso de demonio para un sistema Debian en el C
que se utiliza un socket de dominio Unix .
Si el directorio de trabajo del proceso daemon es el directorio raíz, ¿hay un directorio idiomático para colocar el socket en el sistema de archivos?
debian
directory-structure
daemon
socket
recursion.ninja
fuente
fuente
Respuestas:
Se encuentran comúnmente en
/tmp
o un subdirectorio del mismo. Tenga en cuenta que todo/tmp
está sujeto a borrado en el apagado, no es que se borre necesariamente, solo tenga en cuenta que puede ser así que, si lo usa, verifique si tiene que crear su subdirectorio cada vez. Deberá utilizar un subdirectorio si desea restringir el acceso mediante permisos, ya que/tmp
es legible en todo el mundo./run
y/var/run
(que se pueden vincular entre sí) se usan de manera similar, pero generalmente se montan como sistemas de archivos tmpfs, lo que significa que se crean en el arranque y residen en la memoria , no en el disco (así que no lo use como un lugar para volcar grandes cantidades de datos). Para un socket de tiempo de ejecución, probablemente sea una buena opción.Tenga en cuenta que
/run
, y todos los otros directorios mencionados aquí , excepto/tmp
, solo se pueden escribir por root. Para un proceso del sistema, esto está bien, pero si la aplicación puede ser ejecutada por un usuario sin privilegios, desea usar/tmp
o crear un directorio permanente en algún lugar y establecer permisos sobre eso, o usar una ubicación en el $ HOME del usuario.Es posible crear un directorio en
/usr/share
(o/usr/local/share
) durante la instalación. Los directorios y contenidos allí no se cosechan potencialmente en las botas como lo estarían en/tmp
o/run
. Sin embargo, como lo señala jordanm en los comentarios,/usr
puede montarse como de solo lectura y las directrices de la jerarquía del sistema de archivos de Linux lo reflejan . Por supuesto, no puede ser de solo lectura cuando su aplicación está instalada, por lo que si se siente cómodo creando un socket allí, puede dejarlo y usarlo más tarde (aún podrá escribir en el socket aunque el el archivo es de solo lectura).Si desea un lugar persistente a través de botas que no se monten solo lectura,
/etc
es una apuesta bastante segura, ya que a menudo se usa para configuraciones y reconfiguraciones de todo el sistema. OTOH, es posible tener sistemas en los que el dispositivo subyacente a todo el sistema de archivos raíz sea de solo lectura (por ejemplo, sistemas integrados), con / tmp y / run en otro dispositivo (probablemente: tmpfs en la memoria). Entonces, las dos estrategias más sólidas parecen ser:Instale el zócalo en una ubicación permanente cuando se instala la aplicación.
Cree un directorio en
/run
o/var/run
en tiempo de ejecución y coloque el socket allí.Haz lo mismo solo en
/tmp
.La ventaja de la primera es que pase lo que pase, una vez que la aplicación esté instalada, tendrá un socket para usar. La ventaja de la segunda es que puede ser más propicio para una programación sensata. La ventaja del tercero es que no requiere privilegios de superusuario. Debería ser fácil cambiar de una implementación a otra si cambia de opinión más adelante.
Finalmente, como mencionó BatchyX , al menos debería ofrecer una opción de configuración para esto, recurriendo a su opción predeterminada.
fuente
/run
o/var/run
también se usa a menudo para procesos raíz./tmp
. Lo editaré en./usr
se puede montar como solo lectura. Los archivos nunca deben crearse allí en tiempo de ejecución. Las otras sugerencias son buenas./tmp/.APPNAME/.APPSOCK
porque el daemon no necesita datos persistentes./tmp
y/run
, es que solo la raíz tiene permisos de escritura/run
.