我可以弄清楚如何将 SELinux 用户映射到现有角色,但如何创建新角色?我想为我的盒子创建一个受限制的管理员角色。
答案1
除非你要重写几乎整个 refpolicy,我认为新角色毫无用处。请注意,创建角色后,您需要为角色创建自定义策略规则每个模块该角色应该能够使用。
我赋予用户受限管理员角色的想法是通过以下方式实现的:
- 将他/她映射到
guest_u
,它是一个受到严格限制的(并且已经存在的)SELinux 用户。 - 创建基于角色的访问控制 (RBAC) 规则,并结合
sudo
规则允许特定人员在特定 SELinux 角色和类型下在特定机器中运行特定命令。 - (当然,这是一个真正受限环境的有限版本,您需要添加例如正确配置的
rbash
、有限的PATH
、2FA 身份验证、适当的授权......)
这里的关键点是授予非特权guest_u
用户运行提升权限命令的能力无需离开其受限的 SELinux 用户映射。
有关详细信息,请查看sudoers(5)
手册页。
Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd
SELinux_Spec 在支持 SELinux 的系统上,sudoers 条目可以选择性地将 SELinux 角色和/或类型与命令关联。如果使用命令指定了角色或类型,它将覆盖 sudoers 中指定的任何默认值。但是,命令行上指定的角色或类型将取代 sudoers 中的值。
要检查 SELinux 支持sudo
,请运行:
# ldd $(which sudo) | grep selinux
在 RHEL 上,sudo
默认启用 SELinux 支持。
答案2
使用 RedHat 发行版上的 policycoreutils-devel 包中的 sepolicy。要实现您的要求,您需要使用以下内容:
sepolicy generate --confined_admin -n NAME [-a ADMIN_DOMAIN] [-u USER]
这将生成一个策略,您可以将其编译(make -f /usr/share/selinux/devel/Makefile
)成可以使用安装的模块semodule -i
,但请先检查生成的 .te 文件并根据情况进行调整。还请注意,生成器默认将宽容域插入策略中。因此,一旦您对创建的策略感到满意——您需要删除宽容域,使用重新编译策略,然后就可以make -f /usr/share/selinux/devel/Makefile
开始了 :)