web-dev-qa-db-fra.com

apparmor aa-logprof ne demande pas toutes les dépendances

En essayant d'écrire un profil d'apparmeur pour mon application python-flask (qui s'exécute via gunicorn), je ne peux pas obtenir aa-logprof pour me poser des questions sur toutes les dépendances.

Si en mode plainte, l'application fonctionne comme prévu mais aa-logprof ne propose pas plus de suggestions (voir le profil complet en dernier dans ce post). Partout où je lis, les gens semblent affirmer que aa-logprof devrait poser des questions sur toutes les dépendances, qu'il lit dans/var/log/syslog lui-même. Si je passe à aa-enforce, l'application échoue et meurt. Tailing syslog montre que la mise en réseau est refusée, ce qui se produit bien sûr parce que aa-logprof ne m'a pas demandé à ce sujet. Ma question n'est pas de savoir comment activer le réseau pour l'application, mais plutôt ce qui dans mon approche est incorrect car je ne suis pas interrogé sur toutes les dépendances?

En cas de réclamation, les éléments réseau sont autorisés (et logprof ne me posera pas de questions à ce sujet?!)

Feb 22 20:54:40 devshed kernel: [7991608.610578] type=1400 audit(1424634880.675:68975): apparmor="ALLOWED" operation="accept" profile="/usr/local/bin/gunicorn" pid=2350 comm="gunicorn" laddr=127.0.0.1 lport=5000 family="inet" sock_type="stream" protocol=6
Feb 22 20:54:40 devshed kernel: [7991608.716887] type=1400 audit(1424634880.783:68976): apparmor="ALLOWED" operation="accept" profile="/usr/local/bin/gunicorn" pid=2353 comm="gunicorn" laddr=127.0.0.1 lport=5000 family="inet" sock_type="stream" protocol=6

Lorsqu'il est appliqué, les éléments du réseau sont refusés (et logprof ne me posera pas de questions à ce sujet non plus?)

Feb 22 20:41:04 devshed kernel: [7990792.228716] type=1400 audit(1424634064.295:68737): apparmor="DENIED" operation="create" profile="/usr/local/bin/gunicorn" pid=2162 comm="gunicorn" family="inet" sock_type="stream" protocol=0

/usr/local/bin/gunicorn {
 #include <abstractions/base>
 #include <abstractions/bash>
 #include <abstractions/python>

 /bin/dash rix,
 /bin/uname rix,
 /etc/nsswitch.conf r,
 /etc/services r,
 /proc/*/mounts r,
 /sbin/ldconfig rix,
 /sbin/ldconfig.real rix,
 /usr/bin/python2.7 ix,
 /usr/local/bin/ r,
 /usr/local/bin/gunicorn r,
 /usr/share/mysql/charsets/Index.xml r,
 /tmp/* rw,
 /var/tmp/* a,
 /var/www/api/app.log w,
 /var/www/api/app/* r,
 /var/www/api/* a,
}
2
3molo

Je ne pense pas que ce soit ta faute. La version 2.8.98-0ubuntu2 (présente dans Ubuntu 14.10) des apparmor-utils semble être boguée. aa-genprof se bloque régulièrement (erreurs python) et j'ai remarqué un comportement similaire à celui que vous avez décrit avec aa-logprof. Cela remplit certaines des règles, mais d'autres semblent être laissées de côté.

Espérons que la prochaine version sera meilleure. Les nouvelles versions sont déjà sorties mais ne sont pas encore incluses.

Soit dit en passant, les plantages dans aa-genprof sont liés à des règles de socket similaires à celles que vous avez publiées, donc je soupçonne que l'analyseur de journal a des problèmes.

1
bytephunk