¿Es una buena práctica ejecutar un demonio en una cuenta de usuario no root?

13

Desarrollé una aplicación que usa NTP para cambiar la hora de la red, para sincronizar dos de mis computadoras. Se ejecuta como root, ya que solo este último puede cambiar la hora y la fecha en Linux (supongo).

Ahora, quiero ejecutarlo como usuario. Pero, necesito acceder al tiempo.

  • ¿Es una buena práctica ejecutar un demonio en una cuenta de usuario no root?
  • ¿Debo darle a mi aplicación una capacidad como CAP_SYS_TIME?
  • ¿No introduce una vulnerabilidad de seguridad?
  • ¿Hay una mejor manera?
Anónimo12223
fuente
Normalmente se supone que el demonio NTP se ejecuta como la ntpcuenta de usuario (al menos en los sistemas Linux), por lo que no debería ser necesario que realice este cambio. ¿Qué paquete NTP has instalado?
66
Ejecutar un demonio bajo una cuenta que no sea root se denomina "caída de privilegios de root" y es una buena práctica conocida ya que limita los daños potenciales de las vulnerabilidades de seguridad en el demonio.
1
Ver wikipedia para " Separación de privilegios ".
Kusalananda
He compilado NTP de las fuentes. No tengo un grupo NTP
Anónimo12223
@xhaltar Puede crear el grupo NTP y el usuario. Para configurar cómo se inicia un servicio (usuario, grupo, etc.), puede crear / editar el script de inicio del servicio, crear / configurar una unidad systemd.
Pl4nk

Respuestas:

15

¿Es una buena práctica ejecutar un demonio en una cuenta de usuario no root?

Sí, y esto es común. Por ejemplo, Apache comienza como root y luego bifurca el nuevo proceso como www-data (por defecto).
Como se dijo anteriormente, si su programa es pirateado (por ejemplo, inyección de código), el atacante no obtendrá acceso de root, sino que estará limitado a los privilegios que le otorgó a este usuario específico.

¿Debo dar una "Capacidad" como "CAP_SYS_TIME"?

Es una buena idea ya que evita usar setuid y limita los permisos a esta capacidad muy específica.

¿Debo usar otra forma de hacerlo que se considere "Buena práctica"?

Puede aumentar la seguridad, por ejemplo:

  • Ejecute el servicio como usuario sin privilegios, sin shell.
  • Use chroot para bloquear al usuario en su directorio de inicio.
Pl4nk
fuente
NB: Chroot no proporciona seguridad si es root y se ejecuta en Linux. El usuario root puede crear un directorio en el chroot, abrir el directorio raíz del chroot, hacer chroot en el nuevo directorio, chdir volver a la raíz real y luego hacer chroot a la raíz real. BSD corrige esto al no permitir llevar el directorio fd's a un chroot.
Kevin
@Kevin Si eres root, también puedes trazar procesos fuera del chroot, y hay muchas otras formas de evitarlo. Un simple chroot no puede mantener la raíz.
Gilles 'SO- deja de ser malvado'
//, emp.jar.st en realidad crea un usuario por sí mismo por razones de seguridad. Muy buena practica.
Nathan Basanese
Espere, si soy USUARIO, ¿puedo bloquear al USUARIO en un directorio específico? ¿Como "/ opt" (por ejemplo)?
Anónimo12223
@xhaltar Para bloquear un proceso ejecutado USERen un directorio, use chroot(ejecútelo como usuario raíz). Sin embargo, debe crear e inicializar una cárcel (directorio) antes. En resumen, debe colocar las bibliotecas y los archivos binarios que su proceso necesita en esta cárcel y luego llamar chroot <path/to/jail> <command>. Un buen tutorial con algunos ejemplos que necesita está disponible aquí
Pl4nk
13
  • ¿Debo usar otra forma de hacerlo que se considere "Buena práctica"?

A menos que tenga razones fuertes e irrefutables de lo contrario, solo debe usar el paquete NTP que viene con su distribución GNU / Linux. El demonio NTP estándar ha tardado años en madurar y viene con características sofisticadas como ralentizar o acelerar el reloj de su sistema para sincronizarlo con una red o reloj GPS. Se ha diseñado para sincronizar relojes, por lo que lo más probable es que sea la mejor herramienta para ese propósito.

ntpdaún se mantiene, a juzgar por las actualizaciones recientes (al momento de escribir esta publicación). Si necesita más funciones, le sugiero que se comunique directamente con los desarrolladores, confíe en lo que tienen que decir al respecto.


fuente
5

Si tiene un programa que necesita poder hacer la función X (por ejemplo, manipular el reloj), y puede darle el privilegio / poder para hacer la función X y nada más, eso es mejor que darle toda la lata del alfabeto sopa. Esto se conoce como el principio de menor privilegio . Considere qué sucede si su programa tiene un error, ya sea un error de programación normal o una vulnerabilidad de seguridad explotable. Si se ejecuta como "root", podría eliminar los archivos de todos, o enviarlos a un atacante. Si lo único que el programa es capaz de hacer es manipular el reloj (y funciones no privilegiados, como la manipulación de archivos en un directorio bloqueado-abajo), entonces eso es lo peor que puede suceder si el programa va sin escrúpulos.

G-Man dice 'restablecer a Mónica'
fuente