La práctica no es crear un usuario y grupo por aplicación, sino por servicio. Es decir, los programas que ejecuta un usuario local no necesitan instalarse como un usuario que no sea root. Son demonios , programas que se ejecutan en segundo plano y que ejecutan solicitudes que llegan a través de la red u otros medios de comunicación, que deberían ejecutarse como un usuario dedicado.
El daemon se ejecuta como un usuario dedicado, de modo que si se comporta mal (debido a un error, probablemente provocado por un atacante), el daño que puede hacer es limitado: solo los archivos de datos del daemon se ven afectados (a menos que el atacante logre encontrar un agujero raíz local , que puede suceder). Por ejemplo, el daemon de la base de datos se mysqld
ejecuta como un usuario y grupo dedicado mysql:mysql
y los archivos de datos de la base de datos ( /var/lib/mysql/*
) pertenecen mysql:mysql
.
Tenga en cuenta que el ejecutable del daemon y otros datos estáticos y archivos de configuración que se usan pero que no deben ser modificados por el daemon no deben pertenecer al usuario dedicado; deben ser propiedad de root:root
, como la mayoría de los archivos de programa y configuración El mysqld
proceso no tiene ninguna sobreescritura de negocio /usr/sbin/mysqld
o /etc/mysql/my.cnf
, por lo que estos archivos no deben pertenecer al mysql
usuario o ser modificable por el mysql
usuario o el mysql
grupo. Si algunos archivos necesitan ser legibles solo por el demonio y el administrador, deben ser propiedad del usuario root y del grupo dedicado, y deben tener el modo 0640 ( rw-r-----
).
Una categoría especial de ejecutables que no pueden ser propiedad de los root:root
programas son invocados por un usuario pero que necesitan ejecutarse con privilegios adicionales. Estos ejecutables deben ser setuid root si necesitan ejecutarse (al menos en parte) como root; entonces el ejecutable debe tener el modo 4755 ( rwsr-xr-x
). Si el programa necesita privilegios adicionales pero no como root, entonces el programa debe establecerse de manera fija, de modo que los privilegios adicionales provengan de un grupo y no de un usuario. El ejecutable tiene el modo 2755 ( rwxr-sr-x
). Las razones son dobles:
- No se debe permitir que el ejecutable se modifique a sí mismo, de modo que si un usuario logra explotar una vulnerabilidad, podría modificar los archivos de datos utilizados por el programa pero no inyectar un troyano en el ejecutable para atacar a otros usuarios que ejecutan el programa. .
- El archivo de datos del ejecutable pertenece al grupo. Un programa setuid tendría que cambiar entre el usuario real (el usuario que invocó el programa) para interactuar con el usuario y con el usuario efectivo (el usuario con el que se ejecuta el programa) para acceder a sus archivos de datos privados (la razón para ello tener privilegios adicionales). Además, un programa setgid puede segregar los datos por usuario a los que solo puede acceder el grupo (por ejemplo, almacenando archivos propiedad del usuario en un directorio al que solo pueda acceder el usuario root y el grupo del programa).