![systemd と selinux を強制してネットワーク名前空間で bash スクリプトを実行しますか?](https://rvso.com/image/1520732/systemd%20%E3%81%A8%20selinux%20%E3%82%92%E5%BC%B7%E5%88%B6%E3%81%97%E3%81%A6%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%81%A7%20bash%20%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
ネットワーク名前空間 (ip netns exec) で実行する必要があるスクリプトがあり、systemd サービス ファイルを作成しました。
ただし、起動に失敗し、journalctl -xe は次のように報告します。
ip[7918]: "/usr/share/stats/run_collect.sh" の実行に失敗しました: 権限が拒否されました
サービスファイルは次のようにコマンドを実行します(インスタンス化されたサービスです)
ExecStart=/sbin/ip netns exec ns%i /usr/share/stats/run_collect.sh %i
Selinuxは強制モードになっており、動作させるには を実行する必要がありますsemanage permissive -a ifconfig_t
。
これがないとスクリプトは実行されません。
さまざまな試行で、スクリプトが開始したものの、スクリプトによって開始された tcpdump プロセスが /var/log/stats/ のログ ファイルに書き込むための正しい selinux コンテキストを見逃したために失敗するという、再現できない状況に陥りました。(発行して を
semanage fcontext -a -t ifconfig_exec_t /usr/share/stats/run_collect.sh
適用したときにこの状況に陥ったと思いますrestorecon -Frvv /usr/share/stats/
。ただし、これを繰り返しても機能しません...)
ifconfig_t ドメインを許可に設定せずにこれを機能させる最善の方法は何ですか?