La mayoría de las veces, al instalar un programa desde la fuente, se recomienda crear un nuevo usuario y un nuevo grupo y dar /usr/local/<myapp>
la propiedad de usuarios y grupos creados recientemente.
-
¿Por qué dicha práctica se considera una buena práctica?
-
¿Qué mejora?
Ejemplo:usuario mysql/grupo mysql para el servidor de base de datos MySQL.
Respuesta aceptada:
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 los 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, los que deberían ejecutarse como un usuario dedicado.
El daemon se ejecuta como un usuario dedicado, por lo que si se comporta mal (debido a un error, probablemente desencadenado por un atacante), el daño que puede causar es limitado:solo los archivos de datos del daemon se ven afectados (a menos que el atacante haya logrado encontrar un agujero raíz local). , lo que puede suceder). Por ejemplo, el demonio de la base de datos mysqld
se ejecuta como usuario dedicado y grupo mysql:mysql
y los archivos de datos de la base de datos (/var/lib/mysql/*
) pertenecen a mysql:mysql
.
Tenga en cuenta que el ejecutable del daemon y otros datos estáticos y archivos de configuración que se utilizan pero que el daemon no debe modificar 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
el proceso no tiene nada que ver con sobrescribir /usr/sbin/mysqld
o /etc/mysql/my.cnf
, por lo que estos archivos no deben pertenecer a mysql
usuario o ser escribible por el mysql
usuario o el mysql
grupo. Si algunos archivos deben ser legibles solo por el daemon y el administrador, deben ser propiedad del usuario raíz y del grupo dedicado, y tener el modo 0640 (rw-r-----
).
Una categoría especial de ejecutables que no pueden ser propiedad de root:root
son programas que son invocados por un usuario pero 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 extra pero no como root, entonces el programa debe ser setgid, para que los privilegios extra vengan a través de un grupo y no a través de un usuario. El ejecutable entonces tiene el modo 2755 (rwxr-sr-x
). Las razones son dos:
- No se debe permitir que el ejecutable se modifique a sí mismo, de modo que si un usuario logra aprovechar una vulnerabilidad, podría modificar los archivos de datos utilizados por el programa pero no inyectar un caballo de Troya en el ejecutable para atacar a otros usuarios. ejecutando 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 de ello). tener privilegios adicionales). Además, un programa setgid puede segregar datos por usuario a los que solo puede acceder el grupo (p. ej., almacenando archivos propiedad del usuario en un directorio al que solo puede acceder el root y el grupo del programa).