温馨提示×

centos selinux规则如何设置

小樊
32
2025-12-21 09:23:48
栏目: 智能运维

CentOS SELinux 规则设置实操指南

一 基础与模式切换

  • 查看状态与当前模式:使用 sestatusgetenforce
  • 临时切换模式:
    • 宽容模式(只告警不拦截):sudo setenforce 0
    • 强制模式:sudo setenforce 1
  • 永久生效:编辑 /etc/selinux/config,设置 SELINUX=enforcing|permissive|disabled,然后重启。生产环境不建议 disabled
  • 模式说明:
    • Enforcing:强制执行策略;
    • Permissive:记录违规但不阻断,便于排障;
    • Disabled:关闭 SELinux(需重启,切换过程有风险,生产不建议)。

二 上下文与端口规则

  • 查看上下文:
    • 文件/目录:ls -Z /path
    • 进程:ps -auxZ | grep <进程名>
  • 临时修改上下文:sudo chcon -t /path(重启或 relabel 后可能丢失)。
  • 持久化文件上下文:
    • 添加规则:sudo semanage fcontext -a -t “/path(/.*)?”
    • 应用规则:sudo restorecon -Rv /path
    • 示例(将自定义目录作为网站内容):
      • sudo semanage fcontext -a -t httpd_sys_content_t “/my/web/content(/.*)?”
      • sudo restorecon -Rv /my/web/content
  • 端口类型:
    • 查看端口类型:semanage port -l | grep <端口/协议>
    • 添加端口类型(示例将 81/tcp 加入 http 端口类型):
      • sudo semanage port -a -t http_port_t -p tcp 81
  • 提示:若 semanage 未安装,在 CentOS 7 可安装 policycoreutils-python 包以提供相关工具。

三 布尔值开关

  • 列出布尔值及说明:sudo semanage boolean -l(含描述、当前/默认值);仅查看开关状态:getsebool -a
  • 开关布尔值:
    • 临时:setsebool on|off
    • 永久:setsebool -P on|off
  • 示例(允许 httpd 脚本连接数据库):
    • 查看:getsebool httpd_can_network_connect_db
    • 临时开启:setsebool httpd_can_network_connect_db on
    • 永久开启:setsebool -P httpd_can_network_connect_db on
  • 常用服务布尔值示例:httpd_enable_cgihttpd_enable_homedirsftp_home_dirnfs_export_all_ronamed_write_master_zones 等,可按需开启。

四 拒绝日志分析与自定义策略模块

  • 定位拒绝事件:
    • 查看最近 AVC:sudo ausearch -m avc -ts recent
    • 生成可读报告:sudo sealert -a /var/log/audit/audit.log
  • 从日志生成并加载模块:
    • 生成模块:sudo ausearch -m avc -ts recent | audit2allow -M mypolicy(生成 mypolicy.temypolicy.pp
    • 加载模块:sudo semodule -i mypolicy.pp
  • 适用场景:当确认某拒绝为业务所需且安全可接受时,用 audit2allow 快速生成最小允许规则,优先于全局放宽策略。

五 常见场景示例

  • 场景A(Nginx/Apache 读取自定义目录):
    • 持久化上下文:
      • sudo semanage fcontext -a -t httpd_sys_content_t “/data/www(/.*)?”
      • sudo restorecon -Rv /data/www
  • 场景B(自定义端口运行 Web 服务):
    • 端口加入 http 类型:
      • sudo semanage port -a -t http_port_t -p tcp 8080
  • 场景C(允许 httpd 连接数据库):
    • sudo setsebool -P httpd_can_network_connect_db on
  • 场景D(排查与放行):
    • 分析:sudo sealert -a /var/log/audit/audit.log
    • 必要时生成并加载模块:ausearch -m avc -ts recent | audit2allow -M myhttp && sudo semodule -i myhttp.pp
  • 安全建议:优先使用“最小权限”原则,先查布尔值与上下文,再考虑模块;确需放宽时使用 audit2allow 生成最小规则并验证。

0