温馨提示×

如何在Linux中配置SELinux

小樊
41
2025-12-31 21:59:48
栏目: 智能运维

在 Linux 中配置 SELinux 的实用步骤

一 基础概念与状态查看

  • SELinux 是 Linux 的强制访问控制(MAC)机制,核心要素包括:主体(进程/用户)、客体(文件/端口等)、安全上下文(格式:user:role:type:level,其中 type 最关键)、策略(常见为 targetedminimummls)。
  • 常用查看命令:
    • 查看运行状态:getenforce(返回 Enforcing/Permissive/Disabled
    • 查看详细状态:sestatus
    • 查看文件/目录上下文:ls -Z /path
    • 查看进程上下文:ps -eZ | grep <进程名>
  • 建议生产环境保持在 Enforcing 模式,仅在排障时短时切到 Permissive

二 运行模式切换与持久化

  • 临时切换(重启失效):
    • setenforce 1(切到 Enforcing
    • setenforce 0(切到 Permissive
  • 永久配置:编辑 /etc/selinux/config(软链接为 /etc/sysconfig/selinux),设置:
    • SELINUX=enforcing|permissive|disabled
    • SELINUXTYPE=targeted|minimum|mls
  • 重要提示:从 Disabled 切换到 Enforcing/Permissive 需要重启系统;在 Disabled 状态下文件通常没有安全上下文标签。

三 文件与目录上下文配置

  • 场景:将网站内容放到自定义目录(如 /webdata)后,服务可能因上下文不匹配被拒。
  • 步骤:
    1. 安装管理工具(RHEL/CentOS 常见包名):policycoreutils-python-utils
    2. 永久添加路径上下文规则:
      semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?"
    3. 应用规则:
      restorecon -R /webdata
    4. 如需临时方案(重启或 relabel 后可能失效):
      chcon -R -t httpd_sys_content_t /webdata
  • 验证:ls -Z /webdata 应看到类型如 httpd_sys_content_t

四 端口、布尔值与日志排障

  • 端口上下文(示例:让 httpd 监听 8899/tcp
    1. 添加端口类型:semanage port -a -t http_port_t -p tcp 8899
    2. 验证:semanage port -l | grep http_port_t
    3. 别忘了放行防火墙:firewall-cmd --add-port=8899/tcp --permanent && firewall-cmd --reload
  • 布尔值(细粒度开关,示例:允许 httpd 对外连接数据库)
    • 查看:getsebool httpd_can_network_connect_db
    • 临时开启:setsebool httpd_can_network_connect_db on
    • 永久开启:setsebool -P httpd_can_network_connect_db on
    • 批量查看/筛选:semanage boolean -lsemanage boolean -l -C(仅显示与默认不同的项)
  • 日志与策略模块(定位拒绝并最小化放行)
    • 查看最近拒绝:ausearch -m avc -ts recent
    • 生成可读报告:sealert -a /var/log/audit/audit.log
    • 误报场景下生成并加载最小策略模块:
      • ausearch -m avc -ts recent | audit2allow -M mypol
      • semodule -i mypol.pp
  • 原则:优先用上下文/端口/布尔值解决,只有在明确且必要的情况下才生成自定义模块。

五 常见场景速查表

场景 关键命令或配置
查看状态 getenforcesestatus
临时切到宽容模式 setenforce 0
永久启用强制模式 编辑 /etc/selinux/configSELINUX=enforcing,重启生效
自定义网站目录 semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?" && restorecon -R /webdata
非标准端口运行 Web semanage port -a -t http_port_t -p tcp 8899 并放行防火墙
允许 httpd 连接数据库 setsebool -P httpd_can_network_connect_db on
分析最近拒绝 ausearch -m avc -ts recentsealert -a /var/log/audit/audit.log
生成最小策略模块 `ausearch …

0