CentOS 上 SELinux 最新版本特性概览
适用范围与版本基线
- SELinux 是内置于 Linux 内核 的 强制访问控制(MAC) 机制,CentOS(含 RHEL 系)长期默认启用,典型默认策略为 targeted,用于在不影响通用应用的前提下,对关键服务进行最小权限约束。常用基础命令如 getenforce / setenforce / sestatus 用于查看与切换运行状态。以上机制在 CentOS 7/8/Stream 等版本均为通用基线能力。
核心特性与能力
- 最小权限与进程隔离:以 Type Enforcement(TE) 为核心,为进程(主体)与文件/端口/套接字(客体)打上安全标签,只有策略显式允许的操作才能执行,即使以 root 身份运行的进程也会被约束在各自的 域(domain) 内,典型如 Web 服务被限制在 httpd_t 域,无法直接读取 /etc/passwd 等敏感文件。
- 策略模型与默认策略:默认启用 targeted 策略,仅对选定网络服务进行严格约束,其他本地进程多为 unconfined,在保障安全的同时兼顾易用性;面向更高安全等级的场景可选 strict/MLS 等更严策略(部署与维护成本更高)。
- 运行模式:支持 Enforcing(拒绝违规操作并记录)、Permissive(仅记录不拒绝,便于排障)、Disabled(完全关闭,需重启且不建议用于生产)。日常建议维持 Enforcing,排障期可临时切 Permissive。
- 细粒度布尔开关:通过 getsebool / setsebool 动态调节策略布尔值,以在不改动策略源码的情况下,按服务/功能维度开启或收紧权限(如与网络、文件访问相关的开关)。
- 安全上下文与标签管理:文件、目录、进程、端口等均带有 安全上下文(user:role:type);可用 ls -Z / ps -Z / id -Z 查看,使用 restorecon / chcon 恢复或调整标签,确保对象与进程标签匹配策略规则。
- 审计与故障定位:拒绝事件写入 /var/log/audit/audit.log,可配合 ausearch / audit2allow 分析 AVC 拒绝日志并生成可加载的策略模块(.pp),用于快速闭环修复“被策略拦截但业务需要”的场景。
与版本相关的差异要点
- 策略类型选项:在 CentOS 7 等老版本中,常见 SELINUXTYPE 为 targeted / strict / mls;部分文档还提及 minimum(作为 targeted 的变体)。实际可用选项以系统策略包为准。
- 策略版本与内核策略号:不同内核/策略包会提升“策略版本/内核策略版本”。例如 CentOS 7 上常见 Policy version: 21,而 CentOS 7.9 上可见 Max kernel policy version: 31;这反映了策略表达能力与内核策略引擎的迭代,但并不改变日常运维的基本模型与命令。
快速检查与常用命令
- 查看运行状态与策略:sestatus;getenforce;cat /etc/selinux/config(关注 SELINUX= 与 SELINUXTYPE=)
- 切换模式(无需重启):setenforce 0(Permissive)/ 1(Enforcing);切回 Disabled 需改配置并重启
- 标签与上下文:ls -Z、ps -Z、id -Z;restorecon -R -v ;chcon -t
- 布尔值与策略模块:getsebool ;setsebool -P on/off;ausearch -m AVC -c | audit2allow -M ;semodule -i .pp
- 日志与排障:tail /var/log/audit/audit.log;使用 setroubleshoot/ausearch/audit2allow 辅助分析 AVC 拒绝并生成修复策略。