6.8. 在 MLS 中将系统管理与安全管理分离
默认情况下,sysadm_r
角色具有 secadm_r
角色的权限,这意味着具有 sysadm_r
角色的用户可以管理安全策略。如果需要对安全授权进行更多控制,您可以通过将 Linux 用户分配给 secadm_r
角色并在 SELinux 策略中禁用 sysadm_secadm
模块将系统管理与安全管理分开。
先决条件
-
SELinux 策略被设置为
mls
。 -
SELinux 模式设置为
enforcing
。 -
已安装
policycoreutils-python-utils
软件包。 分配给
secadm_r
角色的 Linux 用户:-
该用户被分配给
staff_u
SELinux 用户 - 定义了此用户的密码。
警告确保您可以以用户 身份登录,这将分配给
secadm
角色。如果不能,您可以防止以后修改系统的 SELinux 策略。-
该用户被分配给
步骤
为用户在
/etc/sudoers.d
目录中创建一个新的sudoers
文件:# visudo -f /etc/sudoers.d/<sec_adm_user>
为保持
sudoers
文件的组织,请<sec_adm_user>
替换为将分配给secadm
角色的 Linux 用户。在
/etc/sudoers.d/<sec_adm_user>
文件中添加以下内容:<sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL
此行授权所有主机上的
<secadmuser>
用户执行所有命令,并默认将用户映射到secadm
SELinux 类型和角色。以 < sec_adm_user> 用户身份登录。
为确保 SELinux 上下文(由 SELinux 用户、角色和类型组成),请使用
ssh
、控制台或xdm
进行登录。su
和sudo
等其他方法无法更改整个 SELinux 上下文。验证用户的安全上下文:
$ id uid=1000(<sec_adm_user>) gid=1000(<sec_adm_user>) groups=1000(<sec_adm_user>) context=staff_u:staff_r:staff_t:s0-s15:c0.c1023
为 root 用户运行交互式 shell:
$ sudo -i [sudo] password for <sec_adm_user>:
验证当前用户的安全上下文:
# id uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023
从策略中禁用
sysadm_secadm
模块:# semodule -d sysadm_secadm
重要使用
semodule -d
命令,而不是使用semodule -r
命令删除系统策略模块。semodule -r
命令从您的系统存储中删除模块,这意味着无法重新安装selinux-policy-mls
软件包。
验证
作为分配给
secadm
角色的用户,并在 root 用户的交互式 shell 中验证您可以访问安全策略数据:# seinfo -xt secadm_t Types: 1 type secadm_t, can_relabelto_shadow_passwords, (…) userdomain;
从 root shell 注销:
# logout
登出
<sec_adm_user>
用户:$ logout Connection to localhost closed.
显示当前安全上下文:
# id uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023
尝试启用
sysadm_secadm
模块。该命令应该失败:# semodule -e sysadm_secadm SELinux: Could not load policy file /etc/selinux/mls/policy/policy.31: Permission denied /sbin/load_policy: Can't load policy: Permission denied libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory). SELinux: Could not load policy file /etc/selinux/mls/policy/policy.31: Permission denied /sbin/load_policy: Can't load policy: Permission denied libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory). semodule: Failed!
尝试显示有关
sysadm_t
SELinux 类型的详情。该命令应该失败:# seinfo -xt sysadm_t [Errno 13] Permission denied: '/sys/fs/selinux/policy'