Comment puis-je exécuter tcpdump à partir d'un script Python sans AppArmor se plaindre?

Pour des raisons gênantes allant au-delà de la scope de cette question, je dois exécuter tcpdump depuis un script Python. Je viens d'appeler subprocess.Popen(['tcpdump', ...) et tout fonctionne très bien. Cependant, lorsque j'utilise des outils comme pyInstaller pour empackageer le script dans un exécutable et l'exécuter (en tant que root), j'obtiens l'erreur suivante:

 tcpdump: error while loading shared libraries: libcrypto.so.0.9.8: "failed to map segment from shared object: Permission denied" 

Comme je l'ai découvert, c'est AppArmor pleurnicher. Maintenant, je peux facilement replace mon appel à tcpdump par ce qui suit:

 subprocess.call(['aa-complain', '/usr/sbin/tcpdump']) pcap = subprocess.Popen(['tcpdump', ...) subprocess.call(['aa-enforce', '/usr/sbin/tcpdump']) 

Maintenant, il imprime deux lignes d'information (sur le changement en mode se plaindre / appliquer), et exécute tcpdump sans autres plaintes.

Les personnes qui exécuteront ce script l'exécuteront en tant que root quand ils voudront faire des captures de packages, donc je ne vois pas comment c'est un problème de security. Dans le même time, le ci-dessus semble hackish pour moi. Donc, pour les experts d'AppArmor parmi vous: est-ce la manière canonique d'y faire face?

PS. Je suis également reconnaissant pour les liens vers une bonne introduction rapide à AppArmor en général, puisque c'est la première fois que je le rencontre.

Eh bien cela devrait être un début, si vous ne l'avez pas encore parcouru: https://help.ubuntu.com/community/AppArmor