温馨提示×

centos selinux最佳实践分享

小樊
37
2025-11-25 18:26:01
栏目: 智能运维

CentOS SELinux 最佳实践

一 基础与运行模式

  • 保持系统长期运行在SELinux Enforcing模式,仅在排错时短时切换到Permissive;严禁长期Disabled
  • 快速检查与切换:
    • 查看状态与模式:sestatusgetenforce
    • 临时切换:setenforce 1(Enforcing)、setenforce 0(Permissive)
  • 永久配置:编辑**/etc/selinux/config**,设置SELINUX=enforcing,保存后重启生效。
  • 原则:优先通过策略与布尔值修正问题,避免直接放宽到 Permissive 或 Disabled。

二 上下文管理

  • 查看与诊断:
    • 文件/目录:ls -Z
    • 进程:ps auxZ
  • 持久化与恢复:
    • 持久化添加路径映射: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 -lsemanage port -a -t <port_type> -p tcp|udp
  • 典型场景:
    • Web 目录:将自定义目录设为httpd_sys_content_t(只读)或httpd_sys_rw_content_t(可写),并用restorecon应用
    • 排错流程:发现 AVC -> 分析原因 -> 用布尔值/端口/上下文修正 -> 必要时生成最小模块 -> 回归 Enforcing 验证
  • 原则:坚持最小权限可审计;对关键服务单独建模,避免权限蔓延。

五 运维与监控清单

  • 日常巡检:
    • 状态与模式:sestatusgetenforce
    • 拒绝汇总:aureport -aausearch -m avc --start today
    • 图形/辅助分析:sealert(配合 setroubleshoot)
  • 变更管理:
    • 变更前备份策略与关键配置;变更后在同等负载下验证功能与性能
    • 定期审查并更新策略,清理不再使用的自定义模块
  • 性能与兼容:
    • 评估 SELinux 开销,必要时对高性能场景进行针对性优化与压测
    • 上线前在测试环境充分验证,避免影响现网业务
  • 原则:持续监控分析最小化授权定期复盘,形成闭环。

0