Linux 系统中怎么排查 SELinux 与第三方安全软件冲突导致的系统死锁

风敏吖_8574

风敏吖_8574

2026-10-19

483人浏览

原创

selinux与第三方安全软件一般不会直接导致系统级死锁,因其运行层级和机制不同;所谓“死锁”多为资源争用或策略冲突引发的进程僵死、服务挂起或内核hang,需通过禁用对比、lsm加载检查、avc日志分析及内核稳定性验证来精准定位。

linux 系统中怎么排查 selinux 与第三方安全软件冲突导致的系统死锁

SELinux 与第三方安全软件(如 AppArmor 替代品、自研内核模块、EDR/AV 驱动、eBPF 安全策略引擎等)**一般不会直接导致“系统级死锁”**,因为二者运行层级和机制不同:SELinux 是内核强制访问控制框架,而多数第三方安全软件通过 LSM 模块、kprobe、tracepoint 或用户态代理介入,本身不参与锁资源的循环等待。所谓“死锁”,更可能是资源争用、策略冲突引发的进程僵死、服务挂起或内核 hang,而非经典意义上的 A→B→C→A 锁环。排查需聚焦在“谁阻塞了谁”“策略是否互相否决”“内核路径是否被异常拦截”三个层面。

确认是否真为 SELinux 与第三方软件共存引发的问题

先排除单一因素干扰:

  • 临时禁用 SELinux:setenforce 0,观察问题是否消失;若仍存在,基本排除 SELinux 主因
  • 临时卸载或停用第三方安全软件(如 systemctl stop crowdstrike-agent、modprobe -r my_security_mod),再测试
  • 检查两者是否同时启用 LSM:运行 cat /sys/kernel/security/lsm,输出应为类似 capability,selinux,my_lsm。若第三方软件也注册为 LSM 模块,且未适配 SELinux 的 hook 顺序,可能造成 hook 链异常返回或无限重入
  • 查看启动日志是否有冲突提示:dmesg -T | grep -i -E "(lsm|security|avc|deny|failed|init)",重点关注模块加载失败、hook 注册拒绝、或 “security_ops already registered” 类错误

检查内核安全模块间的 hook 干扰

SELinux 和第三方 LSM 模块都通过 Linux Security Module(LSM)框架挂接内核 hook(如 inode_permission、file_open、task_setuid)。若第三方模块在关键 hook 中返回错误码(如 -EACCES)但未正确清理状态,或覆盖了 SELinux 的决策逻辑,可能导致:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 进程反复尝试打开同一文件 → 触发 audit 日志风暴 → auditd 卡住 → 其他依赖 audit 的服务(如 systemd-journald)阻塞
  • 某个 LSM hook 中调用 sleep 或 mutex_lock,而该锁又被另一个 LSM 模块持有 → 形成跨模块锁等待链(极罕见但可能)
  • 第三方模块 hook 返回 -ENOSYS 或跳过 SELinux 调用,导致权限检查缺失后触发内核 panic 或 soft lockup

验证方法:

  • 启用内核 lockdep:echo 1 > /proc/sys/kernel/lockdep(需 CONFIG_LOCKDEP=y),复现问题后执行 dmesg -T | grep -A15 "circular",看是否出现跨 LSM 模块的锁依赖环
  • 检查 LSM hook 执行耗时:perf probe 'security_inode_permission' + perf record -e 'probe:security_*' -a sleep 10,分析是否某模块 hook 明显拖慢路径

分析 AVC 拒绝与第三方策略的叠加效应

第三方安全软件常在 SELinux 之后做二次检查(如基于文件哈希、进程行为建模)。当 SELinux 先放行、第三方再拦截,或反之,可能造成“静默失败”——无明确错误码,仅表现为 open() 阻塞、connect() 超时、fork() 返回 -ENOMEM 等。

  • 用 ausearch -m avc -ts boot --raw | audit2why 查 SELinux 拒绝项;再用第三方软件自带日志工具(如 cscli logs、elastic-agent logs)查同期拦截记录
  • 重点比对时间戳和资源路径:是否同一时刻、同一文件/端口/IPC 对象,被两个机制先后处理?例如 SELinux 允许 open("/etc/shadow", O_RDONLY),但 EDR 因进程非 root 直接 kill 线程,导致调用者卡在 read() 前
  • 检查 /proc/$PID/status 中的 CapBnd、Seccomp 字段,确认第三方软件是否启用了 seccomp-bpf 过滤器,且规则与 SELinux 上下文冲突(如限制了 setcon() 系统调用,使进程无法切换 SELinux 上下文)

验证内核稳定性与模块兼容性

某些第三方安全驱动(尤其闭源内核模块)会 patch 内核关键路径(如 do_execve、sys_call_table),若 patch 未考虑 SELinux hook 插入点,可能破坏 LSM 调用链完整性。

  • 检查内核是否出现 soft lockup:dmesg -T | grep -i "soft lockup";若有,配合 crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /proc/kcore 分析 CPU 在哪条路径上死循环
  • 列出所有安全相关模块:lsmod | grep -E "(selinux|security|av|edr|bpf|ebpf)",确认无重复注册或版本不匹配(如第三方模块编译针对 6.1 内核,却运行在 6.6 上)
  • 查看模块间符号依赖:modinfo my_security_mod | grep -i depends,若显示依赖 selinux,但实际未导出所需 symbol(如 security_ops),则加载时可能静默失败

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4765

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

415

21

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4090

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3473

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2673

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6530

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6162

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3593

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3065

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习