SELinuxSecurity-Enhanced Linux是由美国国家安全局NSA开发集成进 Linux 内核的 ** 强制访问控制MAC** 安全模块用于弥补传统 Linux 权限DAC的不足。DAC自主访问控制所有者可以随意改权限进程继承用户权限一旦提权成功危害极大MAC强制访问控制由系统策略统一管控默认拒绝只有策略明确允许才能访问进程运行在最小权限域内核心作用防止权限扩散限制服务仅访问自身相关资源抵御提权、越权、恶意程序横向移动三种运行模式enforcing强制模式拦截并记录违规permissive宽容模式只记录不拦截调试用disabled完全关闭三大核心机制TEType Enforcement类型强制最核心。策略定义domain进程对type资源的操作权限如allow httpd_t httpd_sys_content_t:file read;。RBACRole-Based Access Control用户→角色→权限实现职责分离如sysadm_r管理员角色、user_r普通用户角色。MLSMulti-Level Security多级安全标签支持机密性分级如绝密 / 机密 / 秘密。查看与切换# 查看当前模式 getenforce sestatus # 临时切换 setenforce 0 # permissive setenforce 1 # enforcing # 永久修改 /etc/selinux/config SELINUXenforcing/permissive/disabled安全上下文Security Context所有进程、文件、端口都有标签格式user:role:type:level各字段含义userSELinux 用户如system_urole角色如system_r、object_rtype最重要进程叫domain文件叫typelevelMLS 多级安全级别可选查看上下文ls -Z 文件 ps -eZ 进程 id -Z 当前用户核心策略机制SELinux 策略 默认拒绝 显式允许所有访问必须在策略里明确写了允许才能通过。TE 管服务安全RBAC 管用户权限MLS 管密级。TEType Enforcement类型强制按「类型」做强制权限控制是 SELinux 最核心、最实用、默认开启的机制。核心逻辑进程 Domain域文件 / 端口 / 设备 Type类型策略规则哪个域 能对 哪个类型 做什么操作规则语法内核原生allow 域 类型:对象类别 权限;真实例子allow httpd_t httpd_sys_content_t:file { read getattr };意思httpd 进程域可以对httpd 网页文件类型执行读、获取属性操作。为什么安全进程只能访问策略允许的类型越权访问直接被拦截即使服务被攻破也无法读取系统敏感文件如 /etc/shadowRBAC 角色基于访问控制给用户分配角色角色再分配权限域实现用户 → 角色 → 域 → 权限结构user_u → user_r → user_t staff_u → staff_r → staff_t root → sysadm_r → sysadm_t作用权限分离多管理员、多职责场景使用普通服务器默认配置好无需手动改重点RBAC 是给 “人” 用的权限管理TE 是给 “进程 / 服务” 用的权限管理。MLS 多级安全给文件 / 进程打密级标签按密级控制访问用于涉密、军方、高安全等级系统。标签格式user:role:type:s0:c123s0 级别c123 分类规则高密级 → 可读低密级低密级 → 不能读高密级重点普通 Web / 数据库 / 云服务器 100% 不会用到 MLS默认都是s0不用管。策略从哪来系统预制策略/etc/selinux/targeted/策略由大量.pp模块组成普通运维不需要写策略用布尔值、上下文、端口标签就能完成所有配置工作流程访问判断先查 DAC若传统权限rwx不通过直接拒绝不进入 SELinux 检查。提取上下文获取进程domain与资源type。匹配策略内核查询策略是否有allow规则。决策与日志允许则放行拒绝则阻断并写入/var/log/audit/audit.log。策略整体架构策略类型主流发行版CentOS/RHEL/Rocky默认targeted仅对指定进程httpd、mysqld、sshd 等做限制其他进程不受限mls多级安全用于涉密场景minimum极小策略极少用策略文件位置/etc/selinux/targeted/ ├── policy/ # 编译后的二进制策略 ├── modules/ # 策略模块 ├── semanage/ # semanage 配置上下文、端口、布尔值策略生命周期源码.te、.if、.fc编译为模块.mod→.pp加载到内核内核中决策 AVC策略三源文件一个标准 SELinux 模块由3 类文件组成.teType Enforcement类型强制规则文件核心权限规则。# 示例 mytest.te module mytest 1.0; require { type unconfined_t; type etc_t; class file read; } allow unconfined_t etc_t:file read;.ifInterface接口文件供其他模块调用该模块的规则。.fcFile Context文件默认上下文定义相当于fcontext规则。# 示例 mytest.fc /usr/bin/mytest -- system_u:object_r:mytest_exec_t:s0核心策略语法TEallow允许allow 源域 目标类型:对象类别 权限集合;示例allow mytest_t mytest_var_t:file { read write open };type_transition自动类型转换最常用进程创建文件时自动打标签。# 进程 mytest_t 在 etc_t 目录下创建文件自动变成 mytest_conf_t type_transition mytest_t etc_t:file mytest_conf_t;type、attribute 定义# 定义域 type mytest_t; domain_type(mytest_t); # 定义可执行文件类型 type mytest_exec_t; exec_type(mytest_exec_t);常用对象类别file、dir、lnk_fileprocesssocket、tcp_socketport编译加载流程# 1. 编写 mytest.te mytest.fc # 2. 编译 make -f /usr/share/selinux/devel/Makefile mytest.pp # 3. 加载模块 semodule -i mytest.pp # 查看 semodule -l | grep mytest # 删除 semodule -r mytest总结TE 类型强制 SELinux 灵魂99% 安全防护、拦截、权限隔离都靠 TERBAC 管用户MLS 管密级普通服务器不用管策略规则 allow 域 类型:对象 权限;