Как перейти в другой домен при вызове sudo?

У меня есть демон (collectd), который выполняет скрипт для сбора данных (через smartctl).

Плагин exec-сборщика собирает мандаты, что внешние скрипты выполняются под пользователем! = Root.

План состоит в том, чтобы настроить его следующим образом:

  • разрешить collectd изменять пользователя и, возможно, выполнять скрипт (через SELinux)
  • создать системного пользователя X для задачи
  • configure sudo, так что X разрешено выполнять smartctl
  • сконфигурируйте SELinux таким образом, что a) sudo переходит к (скажем) неограниченному домену b) setuid для пользователя X (или выполнение скрипта) переходит к неограниченному домену

Я придумал последний шаг – потому что в противном случае переход отсутствует, и я должен разрешить собирать все связанные с smartctl низкоуровневые разрешения (например, sys_rawio, ioctl, execute_no_trans …), чего я хочу избежать.

Судо, кажется, предоставляет атрибуты SELinux, например, можно ввести в строку sudoer что-то вроде:

TYPE=unconfined_t ROLE=unconfined_r 

Но затем sudo жалуется:

 sudo: невозможно определить режим принуждения .: Разрешение отклонено
 sudo: невозможно выполнить / usr / sbin / smartctl: разрешение отклонено

Как TYPE / ROLE должен работать с sudo (под CentOS 7)?

Как насчет маршрута b) – как настроить это с помощью пользовательского файла политики SELinux?

  • Должны ли скрипты, требующие sudo fail, если у них их нет, или использовать sudo и prompt?
  • Принуждение sudo для запроса пароля
  • Обновлен менеджер обновлений без запроса пароля
  • Как я могу поддерживать sudo в сценарии bash?
  • Выполнение функции скрипта Bash с помощью Sudo
  • / etc / sudoers vs /etc/sudoers.d/ для включения sudo для пользователя
  • После обновления GLX работает только для root (nvidia)
  • Ошибка аутентификации: su медленнее, чем sudo
  • One Solution collect form web for “Как перейти в другой домен при вызове sudo?”

    Вы можете указать переход в файле пользовательской политики ( .te ) следующим образом:

     module collectdlocalexec 1.0; require { type collectd_t; type user_home_t; type unconfined_t; type shell_exec_t; class capability {setgid setuid }; class file { execute read open }; class process transition; } allow collectd_t self:capability { setgid setuid }; allow collectd_t user_home_t:file { execute read open }; allow collectd_t shell_exec_t:file execute; allow collectd_t unconfined_t:process transition; type_transition collectd_t user_home_t:process unconfined_t; 

    Предполагая, что сценарий сбора находится в домашнем каталоге пользователя (и это помечено как user_home_t ).

    Linux и Unix - лучшая ОС в мире.