温馨提示×

centos selinux模块加载流程

小樊
45
2025-11-25 18:21:55
栏目: 智能运维

CentOS SELinux 模块加载流程

一 前置检查与准备

  • 确认 SELinux 处于可用状态:当前模式应为 EnforcingPermissive,若为 Disabled 需先在配置中启用并重启。命令:getenforcesestatus。配置文件:/etc/selinux/config(设置 SELINUX=enforcing|permissive;策略类型 SELINUXTYPE=targeted|mls)。临时切换:sudo setenforce 1|0。若为 Disabled,需改为 Permissive 后重启,完成文件重新标记再切回 Enforcing。目标策略通常为 targeted。这些步骤确保内核与用户态工具就绪、策略存储可用。

二 模块加载的两条路径

  • 预编译模块包加载(推荐)
    • 获取或构建 .pp(策略包)文件后,使用 semodule -i <module.pp> 将模块安装到当前策略存储;已存在同名模块会被升级。常用:semodule -l 查看已加载模块,semodule -r <name> 卸载模块。此方式由工具自动完成校验、依赖解析与策略数据库更新,适合生产环境。
  • 源码模块编译加载(开发/调试)
    • 编写 .te(类型强制规则)、可选的 .fc(文件上下文)、.if(接口);使用 checkmodule -M -m -o <mod>.mod <mod>.te 编译模块,再用 semodule_package -o <mod>.pp -m <mod>.mod 打包为 .pp;最后 semodule -i <mod>.pp 加载。该流程便于按需定制与迭代策略。

三 加载后的生效与验证

  • 生效范围:模块被加载到内核中的 策略存储(policy store) 后,对所有新创建/访问的进程与对象立即生效;已运行进程在下一次域转换或资源访问时按新策略决策。
  • 快速验证:
    • 查看模块是否到位:semodule -l | grep <module>
    • 查看整体状态:sestatus(关注 Loaded policy nameModePolicy from config file);
    • 观察拒绝事件:sudo ausearch -m avc -ts recentsudo cat /var/log/audit/audit.log | grep AVC | audit2why,必要时用 audit2allow -M <name> 生成修复模块再加载。

四 常见注意事项

  • 模式与重启:从 Disabled 改为 Enforcing/Permissive 需重启;在 Permissive 下完成文件上下文修复后再切回 Enforcing 更安全。
  • 策略类型:确认 /etc/selinux/configSELINUXTYPE=targeted(或所需类型)与系统实际使用的策略一致,避免模块与策略类型不匹配。
  • 文件与布尔:新增文件需有正确 安全上下文(必要时 restorecon);功能开关可通过 SELinux 布尔值 调整(如 setsebool -P <name> on|off),减少定制模块数量。

0