GNU/Linux >> Tutoriales Linux >  >> Linux

Mejores prácticas para ejecutar el servicio de Linux como un usuario diferente

Después de ver todas las sugerencias aquí, descubrí algunas cosas que espero sean útiles para otros en mi posición:

  1. hop tiene razón al señalarme de nuevo en /etc/init.d/functions :el daemon La función ya le permite establecer un usuario alternativo:

    daemon --user=my_user my_cmd &>/dev/null &
    

    Esto se implementa envolviendo la invocación del proceso con runuser -más sobre esto más adelante.

  2. Jonathan Leffler tiene razón:hay setuid en Python:

    import os
    os.setuid(501) # UID of my_user is 501
    

    Sin embargo, todavía no creo que puedas configurarlo desde dentro de una JVM.

  3. Ni su ni runuser manejar con gracia el caso en el que solicita ejecutar un comando como el usuario que ya es. Por ejemplo:

    [[email protected]_host]$ id
    uid=500(my_user) gid=500(my_user) groups=500(my_user)
    [[email protected]_host]$ su my_user -c "id"
    Password: # don't want to be prompted!
    uid=500(my_user) gid=500(my_user) groups=500(my_user)
    

Para solucionar ese comportamiento de su y runuser , he cambiado mi guión de inicio a algo como:

if [[ "$USER" == "my_user" ]]
then
    daemon my_cmd &>/dev/null &
else
    daemon --user=my_user my_cmd &>/dev/null &
fi

¡Gracias a todos por vuestra ayuda!


En Debian usamos el start-stop-daemon utilidad, que maneja archivos pid, cambiando el usuario, poniendo el daemon en segundo plano y mucho más.

No estoy familiarizado con RedHat, pero el daemon utilidad que ya está utilizando (que se define en /etc/init.d/functions , por cierto) se menciona en todas partes como equivalente a start-stop-daemon , por lo que también puede cambiar el uid de su programa, o la forma en que lo hace ya es la correcta.

Si buscas en la red, hay varios envoltorios listos para usar que puedes usar. Algunos incluso pueden estar ya empaquetados en RedHat. Echa un vistazo a daemonize , por ejemplo.


Linux
  1. ¿Es una buena práctica ejecutar un daemon con una cuenta de usuario no root?

  2. Mejores prácticas de seguridad de Wordpress en Linux

  3. Iniciar, detener y reiniciar Crond Daemon en Linux

  4. Servicio del sistema operativo Linux 'winbind'

  5. Ejecute una aplicación Java como servicio en Linux

Cómo ejecutar Shell Script como servicio SystemD en Linux

UNIX/Linux:¿Qué es un shell? ¿Cuáles son las diferentes conchas?

Servicio del sistema operativo Linux 'sshd'

Cómo hacer que un script de Python se ejecute como un servicio o demonio en Linux

Ejecute el script php como proceso daemon

Linux:Inicie el demonio en el dongle serie USB conectado