Как перейти в другой домен при вызове 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 игнорирует псевдонимы?
  • Почему $ HOME наследуется, когда я запускаю оболочку с sudo?
  • Команда Bash Sudo не найдена
  • использование Sudo wth Gedit не выполняется с сервера XForwarded
  • Разрешить удаление sudo для удаленного пользователя для цели восстановления. Последствия для безопасности?
  • Как вернуть sudo на Ubuntu?
  • Предпочитаете sudo over su, используя отдельного пользователя с полными привилегиями sudo?
  • Скопируйте локальный файл на удаленный сервер, не-root-привилегии по 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 - лучшая ОС в мире.