Systemd gestiona el inicio y la operación de servicios en la mayoría de los sistemas Linux modernos y ofrece un potente conjunto de opciones de seguridad para restringir y aislar servicios. La aplicación de estas opciones de seguridad reduce el riesgo de comprometer el servicio al limitar el acceso a los recursos, capacidades y archivos del sistema.
Al utilizar las herramientas y directivas integradas de systemd, puede auditar la postura de seguridad actual de sus servicios y luego aplicar restricciones de manera incremental para reducir su superficie de ataque y, al mismo tiempo, garantizar que continúen funcionando correctamente.
Seguridad del servicio de auditoría con systemd-analyze
Antes de modificar cualquier servicio, es fundamental comprender su exposición de seguridad actual. Elsystemd-analyze securityEl comando genera un informe para cada servicio, calificando su exposición a la seguridad en una escala de 0 (seguro) a 10 (altamente expuesto). Esta puntuación refleja el uso de las funciones de seguridad de systemd, no la seguridad inherente de la aplicación en sí.
Paso 1:Ejecute el siguiente comando para revisar todos los servicios:
systemd-analyze securityEsto genera una lista de servicios con sus puntuaciones de exposición y un resumen de qué funciones de seguridad están habilitadas o no.
Paso 2:Para obtener una vista centrada en un servicio específico, como el servidor Apache HTTP (httpd.service), correr:
systemd-analyze security httpd.serviceRevise el resultado para identificar qué directivas de seguridad no se aplican actualmente y cuáles contribuyen más a la puntuación de exposición del servicio.
Aplicación de directivas de seguridad a las unidades de servicio systemd
Systemd le permite anular o ampliar las configuraciones de las unidades de servicio sin modificar los archivos de la unidad originales mediante la creación de archivos de anulación directos. Este enfoque conserva sus cambios en las actualizaciones de paquetes.
Paso 1:Cree o edite un archivo de anulación para el servicio de destino:
sudo systemctl edit httpd.serviceEsto abre un editor de texto donde puede agregar directivas relacionadas con la seguridad en el[Service]sección.
Directivas de seguridad clave para reducir la exposición
- TmpPrivado=sí: Proporciona al servicio un directorio /tmp privado, aislando sus archivos temporales de otros servicios.
- Sin nuevos privilegios = verdadero: Impide que el servicio y sus procesos secundarios obtengan nuevos privilegios, cerrando rutas de escalada de privilegios.
- ProtectSystem = estricto: Monta directorios críticos del sistema como /usr, /boot y /etc como de solo lectura, evitando modificaciones no autorizadas.
- CapacidadBoundingSet=...: restringe las capacidades de Linux solo a aquellas requeridas por el servicio, minimizando los privilegios que posee.
- Restringir espacios de nombres=...: Limita el uso de espacios de nombres de Linux para reducir las capacidades de aislamiento de recursos.
- ProtectKernelTunables=sí: Bloquea los cambios en los ajustes del kernel a través de /proc/sys e interfaces similares.
- ProtegerKernelModules=sí: Impide la carga o descarga de módulos del kernel.
- ProtegerGruposControl=sí: Restringe la modificación de los grupos de control.
- Dispositivos privados=sí: Niega el acceso a dispositivos físicos, permitiendo solo pseudodispositivos.
- RestringirSUIDSGID=verdadero: No permite la creación de archivos SUID/SGID.
- Dirección IPAllow=...: restringe el acceso a la red a rangos de IP específicos, si corresponde.
Paso 2:Agregue estas directivas al archivo de anulación según sea necesario. Por ejemplo:
[Service]
PrivateTmp=yes
NoNewPrivileges=true
ProtectSystem=strict
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_DAC_READ_SEARCH
RestrictNamespaces=uts ipc pid user cgroup
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
PrivateDevices=yes
RestrictSUIDSGID=true
IPAddressAllow=192.168.1.0/24
Paso 3:Guarde el archivo, luego vuelva a cargar systemd y reinicie el servicio para aplicar los cambios:
sudo systemctl daemon-reload
sudo systemctl restart httpd.service
Repeticiónsystemd-analyze security httpd.servicepara observar la puntuación de exposición reducida.
Limitación de capacidades y llamadas al sistema
Las capacidades de Linux dividen los privilegios de root en unidades detalladas. Systemd permite restringir las capacidades que puede utilizar un servicio, reduciendo el riesgo si el servicio se ve comprometido.
Paso 1:Determine qué capacidades requiere su servicio. Las capacidades comunes incluyen:
CAP_NET_BIND_SERVICE: Enlace a puertos privilegiados por debajo de 1024.CAP_CHOWN: cambiar la propiedad del archivo.CAP_DAC_OVERRIDE: Omita las comprobaciones de permisos de archivos.CAP_SETUIDyCAP_SETGID: cambia los ID de usuario y grupo.
Paso 2:Restringir capacidades en el archivo de anulación:
[Service]
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SETUID CAP_SETGID
AmbientCapabilities=CAP_NET_BIND_SERVICE
ElAmbientCapabilitiesLa directiva es necesaria si el servicio pierde privilegios pero aún necesita capacidades específicas.
Paso 3:Para restringir aún más las llamadas al sistema, utiliceSystemCallFilter=incluir en la lista blanca solo llamadas al sistema permitidas. La identificación de las llamadas al sistema requeridas se puede realizar utilizando herramientas comostraceo del sistemaSystemCallLog=directiva.
Ejemplo:
[Service]
SystemCallFilter=@system-service chroot
Nota:El filtrado de llamadas al sistema es una configuración poderosa pero sensible; excluir las llamadas al sistema necesarias puede causar fallas en el servicio.
Restricción del acceso al sistema de archivos
Systemd puede limitar el acceso al sistema de archivos montando partes del sistema de archivos como de solo lectura o inaccesibles, aislando los servicios de los datos confidenciales.
- ProtegerCasa=sí: Hace que /home, /root y /run/user sean inaccesibles.
- Rutas inaccesibles=: Deniega el acceso a rutas específicas.
- Rutas de solo lectura =yRutas de lectura y escritura =: controla el acceso a directorios específicos.
- Dispositivos privados=sí: Limita el acceso al dispositivo.
- UMáscara=: establece la máscara de permiso predeterminada para los archivos creados por el servicio.
Paso:Agregue estas directivas al archivo de anulación para restringir el acceso al sistema de archivos de manera adecuada para su servicio.
Ejecución de servicios como usuarios no root
La ejecución de servicios como root aumenta innecesariamente el riesgo. Systemd permite especificar el usuario y grupo bajo el cual se ejecuta un servicio.
Paso:Agregue lo siguiente al archivo de anulación para ejecutar el servicio como un usuario con menos privilegios:
[Service]
User=apache
Group=apache
Asegúrese de que el servicio tenga los permisos necesarios sobre los archivos y directorios a los que necesita acceder.
Uso de DynamicUser para cuentas de usuario efímeras
DynamicUser crea una cuenta de usuario temporal para el servicio que existe solo mientras se ejecuta el servicio, lo que mejora el aislamiento sin necesidad de administración manual de usuarios.
Paso:Agregue esta directiva al archivo de anulación:
[Service]
DynamicUser=yes
Esto es ideal para servicios que no requieren identidades de usuario persistentes ni acceso a datos de usuario.
Automatización de la creación de directorios
Systemd puede crear y administrar automáticamente directorios para caché, estado, registros y datos de tiempo de ejecución vinculados al ciclo de vida del servicio.
Paso:Agregue estas directivas al archivo de anulación para automatizar la administración del directorio:
[Service]
CacheDirectory=myservice
StateDirectory=myservice
LogsDirectory=myservice
RuntimeDirectory=myservice
Reemplazarmyservicecon un nombre que coincida con su servicio. Estos directorios se crean con la propiedad adecuada y se limpian cuando se detiene el servicio.
Monitoreo y solución de problemas
Después de aplicar la configuración de seguridad, supervise los registros y el comportamiento del servicio para garantizar que la funcionalidad esté intacta. Usarjournalctl -u servicenamepara ver registros.
Si el servicio no se inicia o se comporta inesperadamente, revise las directivas de seguridad aplicadas y ajústelas según sea necesario, posiblemente relajando algunas restricciones.
Herramientas comostracepuede ayudar a identificar permisos faltantes o llamadas al sistema al rastrear las llamadas al sistema durante la ejecución del servicio.
La aplicación de opciones de seguridad de systemd fortalece sistemáticamente sus servicios de Linux al reducir los niveles de privilegios y aislarlos de los componentes críticos del sistema. Auditar y ajustar periódicamente estas configuraciones garantiza que sus servicios se ejecuten de forma segura sin sacrificar la funcionalidad.














