AppArmor es un módulo del kernel de linux para, por ejemplo, «enjaular» procesos y programas y tener un mayor control de los privilegios de cada uno (al estilo SELinux); dónde puede escribir por ejemplo: http://en.wikipedia.org/wiki/AppArmor
Hace poco me topé con un problema de syslog-ng. Había creado unas reglas para escribir ficheros de log fuera de /var/log, y siempre me daba permission denied, por muchos permisos que tuvieran los archivos/directorios. Sí, el problema venía de AppArmor, que no dejaba escribir al demonio syslog-ng fuera de /var/log:
[bash]
rcapparmor status
apparmor module is loaded.
10 profiles are loaded.
10 profiles are in enforce mode.
/usr/sbin/ntpd
/usr/sbin/identd
/sbin/klogd
/sbin/syslogd
/sbin/syslog-ng
/usr/sbin/traceroute
/usr/sbin/nscd
/usr/sbin/mdnsd
/bin/ping
/usr/sbin/avahi-daemon
0 profiles are in complain mode.
3 processes have profiles defined.
3 processes are in enforce mode :
/sbin/klogd (15906)
/sbin/syslog-ng (15903)
/usr/sbin/nscd (3310)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
[/bash]
Efectivamente AppArmor estaba enjaulando el demonio de syslog-ng. Añadimos una línea al fichero de config correspondiente:
[bash]
cat /etc/apparmor.d/sbin.syslog-ng
…
…
@{CHROOT_BASE}/var/logExtended/** w,
…
…
[/bash]
Y recargamos apparmor con «rcapparmor reload«. Listo