Dado que un servicio necesita acceso a algunos secretos de un archivo de configuración para comenzar, puedo imaginar tres enfoques:
1) Mantenga el archivo legible solo por root. Inicie el proceso como root, lea los privilegios de configuración y eliminación.
2) Mantenga el archivo legible solo para el usuario del demonio, inicie el proceso como el usuario del demonio.
3) Mantenga el archivo legible solo por root. Inicie el proceso como usuario demonio con la capacidad CAP_DAC_READ_SEARCH y suéltelo después de leer la configuración.
Mi análisis inicial de las alternativas:
Opción 1
+ Si existe una vulnerabilidad, un atacante necesita leer su propia memoria de proceso para obtener datos confidenciales (¿bastante difícil?)
- Más complejo debido a la necesidad de setuid / setgid
: si el software se ve comprometido antes de eliminar los privilegios, se ejecutará como root
Opción 2
+ más sencillo de programar, elimine los privilegios del script de inicio
- Si existe una vulnerabilidad, un atacante puede leer datos confidenciales del disco (fácil)
Opción 3
+ Nunca da acceso de root completo al proceso
+ Si hay un error, un atacante tendría que leer la memoria de proceso en lugar de solo un archivo
- Mucho complejo
- Todavía ofrece un acceso muy amplio para leer archivos fuera del archivo de configuración (como /etc/shadow
y similar)
¿Hay otras opciones que deban considerarse, o ventajas o desventajas que haya omitido? ¿Hay alguna buena razón para manejar la eliminación de privilegios en lugar de dejar que el proceso init lo maneje?