Como posso executar o tcpdump a partir de um script Python sem que o AppArmor reclame?

4

Por razões inconvenientes que vão além do escopo desta questão, eu tenho que executar tcpdump dentro de um script Python. Eu atualmente apenas chamo subprocess.Popen(['tcpdump', ...) e tudo funciona bem. No entanto, quando eu uso ferramentas como o pyInstaller para empacotar o script em um executável e executá-lo (como root), recebo o seguinte erro:

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

Como eu descobri, isso é choramingar no AppArmor. Agora, posso facilmente substituir minha chamada para o tcpdump com o seguinte:

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

Agora, imprime duas linhas de informação (sobre a mudança para o modo de reclamação / imposição) e executa o tcpdump sem mais reclamações.

As pessoas que executarão esse script o executarão como root quando quiserem fazer capturas de pacotes, portanto, não vejo como isso é um problema de segurança. Ao mesmo tempo, o acima parece hackish para mim. Então, para os especialistas do AppArmor entre vocês: esta é a maneira canônica de lidar com isso?

PS. Eu também sou grato por links para uma boa e rápida introdução ao AppArmor em geral, já que esta é a primeira vez que estou encontrando isso.

    
por sebastian_k 24.08.2011 / 21:51

1 resposta

1

Bem, isso deve ser um começo, se você ainda não o consultou: link

    
por 27.10.2011 / 05:56