我有一个守护进程(collectd),它执行一个用于数据收集的脚本(通过 smartctl)。
collectd 的 exec 插件要求外部脚本在用户 != root 下执行。
计划是这样设置:
我想出了最后一步 - 因为否则没有过渡,我必须允许收集所有与 smartctl 相关的低级权限(例如 sys_rawio、ioctl、execute_no_trans ...) - 我想避免这种情况。
Sudo 似乎提供了与 SELinux 相关的属性,例如可以在 sudoer 行中添加如下内容:
TYPE=unconfined_t ROLE=unconfined_r
Run Code Online (Sandbox Code Playgroud)
但随后 sudo 抱怨:
sudo:无法确定强制模式。:权限被拒绝 sudo: 无法执行 /usr/sbin/smartctl: 权限被拒绝
TYPE/ROLE 应该如何与 sudo 一起使用(在 CentOS 7 下)?
路由 b) - 如何使用自定义 SELinux 策略文件进行配置?
您可以在自定义策略文件 ( ) 中指定转换,.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;
Run Code Online (Sandbox Code Playgroud)
假设收集脚本位于用户的主目录下(并且标有user_home_t
)。