首页主机资讯Linux SELinux如何实现强制访问控制

Linux SELinux如何实现强制访问控制

时间2026-01-21 15:39:04发布访客分类主机资讯浏览1181
导读:Linux SELinux强制访问控制的实现机制 一 核心概念与架构 主体与客体:主体是发起访问的进程,客体是被访问的文件、目录、端口、套接字、消息等。 安全上下文 Security Context:每个主体/客体都有标签,格式通常为us...

Linux SELinux强制访问控制的实现机制

一 核心概念与架构

  • 主体与客体:主体是发起访问的进程,客体是被访问的文件、目录、端口、套接字、消息等
  • 安全上下文 Security Context:每个主体/客体都有标签,格式通常为user:role:type:level(如 system_u:object_r:httpd_sys_content_t:s0),其中最关键的是type(主体为“域”domain,客体为“类型”type)。
  • 策略与规则:策略是一组基于上下文的访问约束,核心为Type Enforcement(TE)规则,典型形式为:
    allow 主体类型 客体类型:客体类别 { 操作集 } ;
    例如:允许域为
    httpd_t
    的进程读取类型为httpd_sys_content_t的文件。
  • AVC 审计:所有被策略拒绝的访问都会以AVC消息记录,常见路径为**/var/log/audit/audit.log**。
  • 工作特点:在传统的DAC(rwx 权限)检查之后进行 SELinux 检查;拒绝优先于 DAC,即使以root身份运行,仍受策略约束。

二 工作流程

  1. 进程(主体)发起对资源(客体)的访问请求。
  2. 内核先进行DAC检查(所有者/组/其他权限)。
  3. 若 DAC 通过,SELinux 提取主体与客体类型,在策略数据库中匹配allow规则及类别权限。
  4. 匹配则放行;不匹配则在Enforcing模式下拒绝,并记录AVC日志;在Permissive模式下仅记录不拒绝。
  5. 审计日志用于排错与策略优化。

三 运行模式与策略类型

  • 运行模式(由**/etc/selinux/config或符号链接/etc/sysconfig/selinux**控制):
    • enforcing:强制执行策略,违规拒绝并记录。
    • permissive:仅记录违规,不阻断,便于调试(会产生更多 AVC 日志)。
    • disabled:完全关闭 SELinux 内核钩子,需重启;不建议在生产环境使用。
  • 策略类型:
    • targeted:仅保护关键网络守护进程,其他主体多运行在unconfined_t,易用性与兼容性较好。
    • strict:对系统全局实施强制访问控制,覆盖面广、复杂度高。
  • 模式切换与配置要点:
    • 查看/切换:getenforce、setenforce 0|1;永久配置在**/etc/selinux/configSELINUX=SELINUXTYPE=**项。
    • disabled切换到启用状态时,可能因文件标签不一致导致问题;推荐创建**/.autorelabel**并重启以安全重打标签,或使用 fixfiles(不推荐在运行系统上直接执行)。

四 标签管理与策略调优

  • 查看与临时修改:
    • 查看:ls -Z、ps -eZ;
    • 临时修改:chcon -t 类型 文件/目录(重启或 restorecon 后可能恢复)。
  • 永久修改与默认规则:
    • 添加默认文件上下文:semanage fcontext -a -t 类型 “/path(/.*)?”;
    • 应用:restorecon -Rv /path;
    • 大规模或首次启用时可用**/.autorelabel**触发全系统重标记。
  • 策略模块与布尔值:
    • 管理模块:semodule -l/-i/-r;
    • 功能开关:getsebool -a、setsebool -P 布尔名 on|off(加 -P 永久生效)。
  • 典型排错流程:
    • 查看拒绝:ausearch -m avc -ts recent 或 dmesg | grep avc;
    • 解释建议:sealert -l *(需安装 setroubleshoot);
    • 必要时用 audit2allow 生成自定义模块,审计通过后加载:audit2allow -M 模块名 & & semodule -i 模块名.pp。

五 最小权限实践示例

  • 场景:将网站内容放到自定义目录**/data/web**,让 Apache 可读取。
    1. 设定默认上下文并应用
      semanage fcontext -a -t httpd_sys_content_t “/data/web(/.*)?”
      restorecon -Rv /data/web
    2. 如 Apache 需要对外连接,开启布尔值
      setsebool -P httpd_can_network_connect on
    3. 验证与排错
      ps -eZ | grep httpd(确认进程域)
      ausearch -m avc -ts recent(如有拒绝,按提示修复或生成策略模块)
      说明:保持Enforcing模式,优先通过“正确标签 + 布尔值 + 最小必要规则”来适配应用,而非直接放宽策略。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux SELinux如何实现强制访问控制
本文地址: https://pptw.com/jishu/788769.html
SELinux策略如何定制和优化 SELinux对开发人员有何影响

游客 回复需填写必要信息