温馨提示×

SELinux如何管理Linux文件访问权限

小樊
35
2025-12-20 05:05:05
栏目: 智能运维

核心机制与工作原理 SELinux 在 Linux 内核 中提供 强制访问控制(MAC),与传统的 自主访问控制(DAC,rwx 属主/属组/其他) 并行工作。它通过给主体(进程)和客体(文件、目录、套接字、端口等)打上 安全上下文(user:role:type 或 user:role:domain) 的标签,并依据策略中的 allow 规则(主体域、客体类型、对象类、许可集) 决定是否放行。访问判定顺序通常是:先检查 DAC,再检查 SELinux MAC;因此即便你是 root,若 MAC 不允许,访问仍会被拒绝。未被策略允许的访问会记录到 AVC 日志(/var/log/audit/audit.log),便于审计与排障。

关键概念与策略类型

  • 主体与客体:主体是 进程,客体是 文件/目录/端口/进程间通信等;二者都有关联的 安全上下文
  • 类型与域:客体上的标签关键字段是 type,主体(进程)对应 domain;访问是否允许取决于 domain 对 type 的 allow 规则
  • 策略类型:常见有 targeted(默认,面向网络服务等关键进程进行约束)、MLS/MCS(多级/多分类,更细粒度)、以及 Custom Policy(按需定制)。
  • 模式:支持 Enforcing(强制执行)、Permissive(仅告警不阻断,便于排障)、Disabled(关闭,需重启生效)。
    这些机制共同实现对文件访问的细粒度、可审计与可定制控制。

管理流程与常用命令

  • 查看与切换模式
    • 查看状态:getenforcesestatus
    • 临时切换:setenforce 1|0(分别对应 Enforcing/Permissive)
    • 永久配置:编辑 /etc/selinux/configSELINUX=enforcing|permissive|disabledSELINUXTYPE=targeted|mls|...,修改后需重启生效。
  • 查看与修改安全上下文
    • 查看:ls -Z(文件/目录)、ps -Z(进程)、id -Z(用户)
    • 临时修改:chcon -t 类型 文件
    • 永久修复默认标签:semanage fcontext -a -t 类型 '路径(/.*)?' 后执行 restorecon -Rv 路径
  • 故障排查与策略分析
    • 查看拒绝日志:tail /var/log/audit/audit.log | grep AVC
    • 辅助分析:audit2whyaudit2allowsetroubleshoot
    • 查询策略规则:sesearch --allow -s 主体域 -t 客体类型
      以上命令覆盖了日常运维中对文件访问权限的查看、修正与策略验证。

典型场景与操作示例

  • Web 服务读取自定义目录
    现象:文件权限为 644,但 httpd 仍被拒绝访问。
    原因:文件位于用户家目录,安全上下文多为 admin_home_t,而 httpd_t 默认只允许读取 httpd_sys_content_t 等类型。
    处理:
    1. 为目录设置默认标签:semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
    2. 修复已有文件标签:restorecon -Rv /var/www/html
    3. 验证:getenforceEnforcingls -Z 显示目标类型为 httpd_sys_content_t
  • 文件复制与移动对上下文的影响
    • cp 会继承目标目录的默认上下文;
    • mv 保留原上下文,可能导致服务访问失败,需用 restorecon 修复。
  • 快速判定是否为 SELinux 问题
    • 临时切到 Permissivesetenforce 0,若操作恢复则基本可判定为 SELinux 策略限制;随后用 audit2why/audit2allow 生成或调整策略,再恢复 Enforcing
      这些示例体现了“DAC 通过 + MAC 允许”的双重校验逻辑,以及“先查 DAC,再查 MAC”的排障路径。

0