Запустить скрипт bash в сетевом пространстве имен с применением systemd и selinux?
У меня есть сценарий, который должен работать в сетевом пространстве имен (ip netns exec), и я написал файл службы systemd.
Журнал не запускается, однако, journalctl -xe сообщает:
ip [7918]: не удалось выполнить exec файла "/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, запущенный скриптом, пропустил правильный контекст selinux для записи в файл журнала в /var/log/stats/, (Я думаю, что я попал в ту ситуацию, когда я выпустилsemanage fcontext -a -t ifconfig_exec_t /usr/share/stats/run_collect.sh
и применяя его с restorecon -Frvv /usr/share/stats/
, Повторять это не работает, хотя....)
Каков наилучший подход, чтобы заставить это работать без установки домена ifconfig_t как разрешающего?