centos selinux最佳实践分享
小樊
37
2025-11-25 18:26:01
CentOS SELinux 最佳实践
一 基础与运行模式
- 保持系统长期运行在SELinux Enforcing模式,仅在排错时短时切换到Permissive;严禁长期Disabled。
- 快速检查与切换:
- 查看状态与模式:sestatus、getenforce
- 临时切换:setenforce 1(Enforcing)、setenforce 0(Permissive)
- 永久配置:编辑**/etc/selinux/config**,设置SELINUX=enforcing,保存后重启生效。
- 原则:优先通过策略与布尔值修正问题,避免直接放宽到 Permissive 或 Disabled。
二 上下文管理
- 查看与诊断:
- 持久化与恢复:
- 持久化添加路径映射:semanage fcontext -a -t “/path(/.*)?”
- 应用默认上下文:restorecon -R /path
- 临时修改(不推荐长期使用):chcon -t /path;如需递归:chcon -R -t /path
- 常用类型示例:httpd_sys_content_t(Web 只读内容)、httpd_sys_rw_content_t(Web 可写内容)
- 原则:能用semanage fcontext + restorecon就不用chcon;变更前先备份关键配置。
三 策略定制与布尔值
- 定位问题:
- 查看 AVC 拒绝:ausearch -m avc -ts recent
- 生成可读解释:audit2why
- 最小权限定制:
- 从日志生成策略模块:ausearch -m avc -ts recent | audit2allow -M mypol
- 编译并加载:checkpolicy -M mypol.pp && semodule -i mypol.pp
- 细粒度开关:
- 查看/设置布尔值:getsebool 、setsebool -P on/off(加**-P**使重启后持久)
- 原则:先判断拒绝是否合理,优先用布尔值或最小化的自定义模块修正,而非放开整段策略。
四 服务加固与端口管理
- 进程域隔离:确保服务运行在专有域(如 httpd_t),避免长期停留在unconfined_t;必要时为服务单独建模以强化隔离。
- 端口标签:
- 查看/管理端口上下文:semanage port -l、semanage port -a -t <port_type> -p tcp|udp
- 典型场景:
- Web 目录:将自定义目录设为httpd_sys_content_t(只读)或httpd_sys_rw_content_t(可写),并用restorecon应用
- 排错流程:发现 AVC -> 分析原因 -> 用布尔值/端口/上下文修正 -> 必要时生成最小模块 -> 回归 Enforcing 验证
- 原则:坚持最小权限与可审计;对关键服务单独建模,避免权限蔓延。
五 运维与监控清单
- 日常巡检:
- 状态与模式:sestatus、getenforce
- 拒绝汇总:aureport -a、ausearch -m avc --start today
- 图形/辅助分析:sealert(配合 setroubleshoot)
- 变更管理:
- 变更前备份策略与关键配置;变更后在同等负载下验证功能与性能
- 定期审查并更新策略,清理不再使用的自定义模块
- 性能与兼容:
- 评估 SELinux 开销,必要时对高性能场景进行针对性优化与压测
- 上线前在测试环境充分验证,避免影响现网业务
- 原则:持续监控、分析、最小化授权与定期复盘,形成闭环。