目录
[3-1 修复文件类型](#3-1 修复文件类型)
[3-2 查看和修改策略](#3-2 查看和修改策略)
[3-3 控制开关:布尔值](#3-3 控制开关:布尔值)
1.核心概念:安全上下文
在 RHEL 9 中,SELinux 提供了一套比传统 Linux 权限(DAC,自主访问控制)更精细、更强大的强制访问控制系统 (MAC)。它的核心思想 是:默认拒绝,意思是没有任何操作是被允许的,除非有明确的规则允许它 。
在传统的权限管理中,我们关注的是"哪个用户或组"。而 SELinux 关注的是一个更全的 SELinux 上下文 (Context) 。
一个典型的上下文格式如下:user_u:role_r:type_t:s0
User (SELinux 用户):映射一个或多个 Linux 用户。例如 system_u 代表系统进程,unconfined_u 代表无限制用户 。
Role (角色):用于"基于角色的访问控制 (RBAC)"。例如 object_r 用于文件,sysadm_r 用于系统管理员。
Type (类型) :这是最重要、最常用的一环。它是策略规则的核心,决定了"谁能访问谁"。所有类型的名字都以 _t 结尾。进程运行在 Domain 中 (如 httpd_t);文件、目录、端口等资源有其各自的 Type (如 /var/www/html 下的文件是 httpd_sys_content_t,SSH 端口是 ssh_port_t)。
Level (级别):用于实现多级安全 (MLS) 或多类别安全 (MCS),主要用于处理极高敏感度的数据分级。
所谓SELinux 的策略,就是一系列规则,定义了像 httpd_t 这样的 Domain 能否以及如何访问像 httpd_sys_content_t 这样的资源 。
它的判断逻辑是:只有当传统的 Linux 权限检查 (DAC) 和 SELinux 策略检查 (MAC) 都允许时,访问才会被放行。如果传统权限拒绝了,SELinux 甚至不会介入检查 。
2.三种运行模式
SELinux 有三种模式,可以通过**/etc/selinux/config** 文件或setenforce 命令切换。
(1)Enforcing (强制)模式:这是生产环境推荐使用 的模式,它会严格执行SELinux策略,拒绝所有未授权的访问并记录日志。
(2)Permissive (宽容)模式:该模式主要用于调试,它不会实际阻止访问,但会将所有违反策略的操作记录到审计日志中。
(3)Disabled (禁用)模式:此模式会完全关闭 SELinux子系统,仅在极少数特殊情况或老旧硬件上才考虑使用,一般情况下强烈不推荐。
3.日常管理三要素
3-1 修复文件类型
当文件或目录被移动、创建或复制到错误位置时,它的 SELinux 类型可能会出错。restorecon 命令用于将文件或目录的类型恢复到其父目录或策略所指定的默认值 。
例如,我们可以使用下面的命令把 /var/www/html/ 下所有文件的类型恢复为正确值:
bash
sudo restorecon -Rv /var/www/html/
这条命令中-R选项表示递归处理,-v选项表示显示详细信息。
3-2 查看和修改策略
当服务需要监听一个非标准端口时,需要将新端口添加到策略中,可以使用semanage 命令管理端口。下面给出一个典型的例子,要求允许 HTTP 服务器监听 8080 端口,需要完成以下三步:
bash
# 1. 查看 HTTP 服务当前允许的端口
sudo semanage port -l | grep http_port_t
# 可能得到的反馈:
#http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
# 2. 将 8080 端口添加到 http_port_t 中
sudo semanage port -a -t http_port_t -p tcp 8080
3-3 控制开关:布尔值
布尔值是系统的开关,用于在不重写复杂策略规则的情况下,动态地改变某个特定服务的行为 。
例如,我们需要允许 httpd 访问用户主目录,可以使用下面的方式来实现:
bash
# 1. 查看相关布尔值状态
sudo getsebool httpd_enable_homedirs
# httpd_enable_homedirs --> off
# 2. 临时开启 ,重启后会失效
sudo setsebool httpd_enable_homedirs on
# 3. 永久开启 :-P 参数会将设置写入策略文件
sudo setsebool -P httpd_enable_homedirs 1