Solventar conflicto de Apparmor con ntpd

No hace mucho tuve que pelear en un sistema SUSE con varios servicios, ya que tras la subida de versión de SLES 12 a SLES 15 dejaban de funcionar correctamente.

Investigando un poco averigüé que el amigo Apparmor los estaban bloqueando. Ejemplo de ello fue el servicio de hora Ntpd

Logo de Apparmor

Solventar conflicto de Appamor con ntpd

Como siempre esta entrada va para mis apuntes, ya que nunca sabes cuanto durarán las fuentes que has consultado por los mares de Internet.

¿Pero qué es Apparmor?

Apparmor (abreviatura de Application Armor) es una mejora del núcleo para limitar programas a un conjunto limitado de recursos. El modelo de seguridad utilizado consiste en vincular los atributos de control de acceso a los programas en lugar de los usuarios.

Esto lo logra mediante la creación y gestión de perfiles que se cargan en el arranque. Estos perfiles están diseñados para restringir el acceso de las aplicaciones a recursos específicos del sistema, como archivos, directorios y sockets de red.

El problema en cuestión

Después de pelearme durante un tiempo consulté el registro de «dmesg» y allí me encontré de forma repetida un mensaje similar al siguiente:

apparmor="DENIED" operation="open" profile="/usr/sbin/ntpd" \
name="/etc/resolvconf/resolv.conf.d/head" pid= \
comm="ntpd" requested_mask="r" \
denied_mask=”r” fsuid= ouid=

Este mensaje de error indica que AppArmor está en conflicto con ntpd, lo que impide que funcione correctamente.

Vamos a ver diferentes maneras de arreglar esta situación.

Si revisamos el estado de Apparmor veremos algo similar a esto:

aa-status
#O bien
cat /sys/kernel/security/apparmor/profiles

Con este resultado:

(...)
/usr/sbin/ntpd (enforce)
(...)

Solución 1. Cambiar el rol (safer)

Podemos cambiar la regla de control del rol predeterminado para ntpd. Esta regla predeterminada se encuentra en «/etc/apparmor.d/usr.sbin.ntpd»

Una vez hecho el cambio reiniciamos el servicio:

systemctl restart apparmor.service

Solución 2. Deshabilitar la protección para ntpd

Podemos deshabilitar la protección de ntpd desde Apparmor

ln -s /etc/apparmor.d/usr.sbin.ntpd /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.ntpd
systemctl restart ntp.service

De esta manera creamos un enlace simbólico para el perfil hacia la carpeta de deshabilitados.

Para después con «apparmor_parser» reiniciar el rol.

Finalmente reiniciamos el servicio ntp

Conclusión

Existen varias vías para obtener una solución satisfactoria. La última opción y la menos recomendada es parar el servicio de Apparmor. Lo adecuado y recomendado es modificar los perfiles tal y como hemos visto o actualizar la configuración de ntpd, ya que se trata de soluciones permanentes.

Fuentes consultadas

Imzye.com – Apparmor conflicted with ntpd