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
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.