
Ich habe ein Skript, das in einem Netzwerk-Namespace (ip netns exec) ausgeführt werden muss, und ich habe eine systemd-Servicedatei geschrieben.
Der Start schlägt jedoch fehl. journalctl -xe meldet:
ip[7918]: exec von "/usr/share/stats/run_collect.sh" ist fehlgeschlagen: Berechtigung verweigert
Die Servicedatei führt den Befehl wie folgt aus (es handelt sich um einen instanziierten Dienst)
ExecStart=/sbin/ip netns exec ns%i /usr/share/stats/run_collect.sh %i
Selinux ist im Modus Enforcing und um es zum Laufen zu bringen, muss ich ausführen semanage permissive -a ifconfig_t
.
Ohne dies wird das Skript nicht ausgeführt,
Bei meinen verschiedenen Versuchen geriet ich in eine Situation, die ich nicht reproduzieren kann, in der das Skript zwar gestartet wurde, dann aber fehlschlug, weil dem vom Skript gestarteten tcpdump-Prozess der richtige Selinux-Kontext fehlte, um in eine Protokolldatei in /var/log/stats/ zu schreiben. (Ich glaube, ich geriet in diese Situation, als ich
semanage fcontext -a -t ifconfig_exec_t /usr/share/stats/run_collect.sh
es mit ausgegeben und angewendet hatte restorecon -Frvv /usr/share/stats/
. Das Wiederholen funktioniert jedoch nicht...)
Was ist der beste Ansatz, um dies zum Laufen zu bringen, ohne die ifconfig_t-Domäne als permissiv festzulegen?