Ausführen eines bash-Skripts im Netzwerknamensraum mit Durchsetzung von systemd und selinux?

849
user300811

Ich habe ein Skript, das in einem Netzwerknamespace (ip netns exec) ausgeführt werden muss, und ich habe eine systemd-Servicedatei geschrieben.

Es kann jedoch nicht gestartet werden, berichtet journalctl -xe:

ip [7918]: exec von "/usr/share/stats/run_collect.sh" fehlgeschlagen: Berechtigung abgelehnt

Die Dienstdatei führt den Befehl als aus (es ist ein instanziierter Dienst).

ExecStart=/sbin/ip netns exec ns%i /usr/share/stats/run_collect.sh %i 

Selinux ist im Modus erzwungen, und damit es funktioniert, muss ich laufen semanage permissive -a ifconfig_t.
Ohne dass das Skript nicht ausgeführt wird,

Bei meinen verschiedenen Versuchen kam ich in eine Situation, die ich nicht reproduzieren kann, wo das Skript gestartet wurde, aber dann fehlgeschlagen ist, weil der vom Skript gestartete Prozess tcpdump den richtigen Selinux-Kontext verfehlt hat, um in eine Protokolldatei in / var / log / stats / geschrieben zu werden. . (Ich glaube, ich bin in diese Situation geraten, als ich es ausgegeben hatte semanage fcontext -a -t ifconfig_exec_t /usr/share/stats/run_collect.shund es mit beantragte restorecon -Frvv /usr/share/stats/. Wiederholen funktioniert jedoch nicht ...)

Was ist der beste Ansatz, um dies zu erreichen, ohne die Domäne ifconfig_t als zulässig zu definieren?

2

0 Antworten auf die Frage