调用 sudo 时如何转换到另一个域?

调用 sudo 时如何转换到另一个域?

我有一个守护进程(collectd),它执行数据收集脚本(通过 smartctl)。

collectd 的 exec-plugin 要求外部脚本在用户 != root 下执行。

计划是这样设置的:

  • 允许collectd更改用户并可能执行脚本(通过SELinux)
  • 为手头的任务创建一个系统用户 X
  • 配置 sudo 以便允许 X 执行 smartctl
  • 配置 SELinux,以便 a) sudo 转换到(例如)无限制域 b) 用户 X 的 setuid(或脚本的执行)转换到无限制域

我已经提出了最后一步 - 因为否则就没有转换,并且我必须允许收集所有与 smartctl 相关的低级权限(例如 sys_rawio、ioctl、execute_no_trans ...) - 我想避免。

Sudo 似乎提供了 SELinux 相关的属性,例如可以在 sudoer 行中放入如下内容:

TYPE=unconfined_t ROLE=unconfined_r

但随后 sudo 抱怨道:

sudo:无法确定强制模式。:权限被拒绝
sudo:无法执行 /usr/sbin/smartctl:权限被拒绝

TYPE/ROLE 应该如何与 sudo 一起使用(在 CentOS 7 下)?

路线 b) 怎么样 - 如何使用自定义 SELinux 策略文件配置它?

答案1

您可以在自定义策略文件 ( ) 中指定转换,.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)。

相关内容