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>
# visudo -f /etc/sudoers.d/<sec_adm_user>
Copy to Clipboard Copied! 为保持
sudoers
文件的组织,请<sec_adm_user>
替换为将分配给secadm
角色的 Linux 用户。在
/etc/sudoers.d/<sec_adm_user>
文件中添加以下内容:<sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL
<sec_adm_user> ALL=(ALL) TYPE=secadm_t ROLE=secadm_r ALL
Copy to Clipboard Copied! 此行授权所有主机上的
<secadmuser>
用户执行所有命令,并默认将用户映射到secadm
SELinux 类型和角色。以 <sec_adm_user> 用户身份登录。
要确保 SELinux 上下文(由 SELinux 用户、角色和类型组成)已更改,请使用
ssh
、控制台或xdm
登录。su
和sudo
等其他方法无法更改整个 SELinux 上下文。验证用户的安全上下文:
id
$ 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
Copy to Clipboard Copied! 为 root 用户运行交互式 shell:
sudo -i
$ sudo -i [sudo] password for <sec_adm_user>:
Copy to Clipboard Copied! 验证当前用户的安全上下文:
id
# id uid=0(root) gid=0(root) groups=0(root) context=staff_u:secadm_r:secadm_t:s0-s15:c0.c1023
Copy to Clipboard Copied! 从策略中禁用
sysadm_secadm
模块:semodule -d sysadm_secadm
# semodule -d sysadm_secadm
Copy to Clipboard Copied! 重要使用
semodule -d
命令,而不是使用semodule -r
命令删除系统策略模块。semodule -r
命令从您的系统存储中删除模块,这意味着无法重新安装selinux-policy-mls
软件包。
验证
作为分配给
secadm
角色的用户,并在 root 用户的交互式 shell 中验证您可以访问安全策略数据:seinfo -xt secadm_t
# seinfo -xt secadm_t Types: 1 type secadm_t, can_relabelto_shadow_passwords, (…) userdomain;
Copy to Clipboard Copied! 从 root shell 注销:
logout
# logout
Copy to Clipboard Copied! 登出
<sec_adm_user>
用户:logout
$ logout Connection to localhost closed.
Copy to Clipboard Copied! 显示当前安全上下文:
id
# id uid=0(root) gid=0(root) groups=0(root) context=root:sysadm_r:sysadm_t:s0-s15:c0.c1023
Copy to Clipboard Copied! 尝试启用
sysadm_secadm
模块。该命令应该失败:semodule -e 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!
Copy to Clipboard Copied! 尝试显示有关
sysadm_t
SELinux 类型的详情。该命令应该失败:seinfo -xt sysadm_t
# seinfo -xt sysadm_t [Errno 13] Permission denied: '/sys/fs/selinux/policy'
Copy to Clipboard Copied!