简介
本文档介绍如何识别、解决和验证安全终端Linux连接器中的故障11。
背景信息
当连接器无法加载监控系统活动和事件所需的eBPF模块时,它会引发故障11。
从Linux连接器版本1.25开始,连接器将eBPF CO-RE(编译一次 — 运行无处不在)优先于监视支持BTF的内核上的系统事件,无需安装内核报头。这种系统可观测性方法效率更高,是首选方案。
当使用早于1.25的Linux连接器版本或在不支持BTF的内核上运行时,连接器将退回到旧版eBPF加载方法,该方法要求安装内核报头。这些报头通常不包含在标准分发版安装中,需要单独安装。
如果连接器未能使用任一方法加载eBPF模块,则引发故障11,表明系统处于未保护状态。本文档详细介绍解决此问题所需的必要步骤。
确定BTF支持
连接器要求以下条件之一为真,以便加载监控文件系统和网络活动所需的eBPF模块:
1.当前内核已启用CONFIG_DEBUG_INFO_
BTF。(这是首选选项。)
2.当前运行内核版本的内核报头已安装在系统上。
要检查当前运行的内核是否启用了CONFIG_DEBUG_INFO_BTF
,请运行命令:
cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF
如果看到CONFIG_DEBUG_INFO_BTF=y
,则您的内核支持BTF,并且连接器可以使用eBPF监视文件系统和网络事件。
不支持BTF
如果运行连接器版本1.25或更高版本,请考虑将内核升级到支持BTF的版本。默认情况下启用BTF的分发列表可以在本文档的后面部分找到。
如果当前的内核不支持BTF,则连接器需要安装内核头文件。如果连接器无法找到这些必需的文件,则会引发故障11。使用安装缺少的内核报头中描述的步骤解决此问题。
支持BTF的分布
默认情况下,在最新内核版本中启用了CONFIG_DEBUG_INFO_BTF
:
- Centos/RHEL 8.2及更高版本
- Ubuntu 20.04及更高版本
- Oracle Linux 8.5及更高版本
- Debian 11及更高版本
- Alma Linux 8.3及更高版本
- Rocky Linux 8.3及更高版本
- SUSE Enterprise 15 SP4 / openSUSE Leap 15.4及更高版本
升级到BTF支持的内核
如果您位于支持BTF的较高内核版本的分发版本上,则最好更新内核以解决故障11。
在继续更新内核之前,请首先将Linux连接器升级到版本1.25.0或更新版本,以确保您的连接器支持BTF。
基于RPM的分配
本部分适用于:
- 阿尔玛Linux
- Amazon Linux
- CentOS Linux
- Oracle Linux Red Hat兼容内核(RHCK)
- Red Hat企业版Linux
- Rocky Linux
要升级到最新内核版本,请执行以下操作:
- 检查是否有可用于内核的更新:
yum check-update
如果在输出中看到kernel.x86_64
,则存在可用的内核升级。
- 更新内核包:
sudo yum update kernel
- 重新启动系统:
sudo reboot
- 验证新内核支持BTF,并且连接器已清除故障11。
Oracle Linux Unbreakable Enterprise Kernel(UEK)
要升级到最新内核版本,请执行以下操作:
- 检查是否有可用于内核的更新:
yum check-update
如果在输出中看到kernel-uek.x86_64
,则存在可用的内核升级。
- 更新内核包:
sudo yum update kernel-uek
- 重新启动系统:
sudo reboot
- 验证新内核支持BTF,并且连接器已清除故障11。
SUSE Linux Enterprise和openSUSE Leap
要升级到最新内核版本,请执行以下操作:
- 检查当前的内核版本:
uname -r
- 列出可用
的内核默认
包: zypper search -s --match-exact kernel-default
输出显示为:
| kernel-default | package |
|
|
找到比步骤1中确定的当前内核版本更高的版本。
- 使用以下命令安装新版本的
kernel-default
: sudo zypper install kernel-default=
- 重新启动系统:
sudo reboot
- 验证新内核支持BTF,并且连接器已清除故障11。
基于Debian的分布
要升级到最新内核版本,请执行以下操作:
- 检索最新的程序包列表:
sudo apt update
- 安装最新的软件包:
sudo apt upgrade
- 重新启动系统:
sudo reboot
- 验证新内核支持BTF,并且连接器已清除故障11。
安装缺少的内核报头
在安装缺失的内核报头之前,请尝试将系统升级到BTF支持的版本。如果这不能解决故障11,或者如果分发不支持最新版本的BTF,则继续安装缺失的内核报头。
基于RPM的分配
本部分适用于:
- 阿尔玛Linux
- Amazon Linux
- CentOS Linux
- Oracle Linux Red Hat兼容内核(RHCK)
- Red Hat企业版Linux
- Rocky Linux
验证
基于RPM的分发要求为当前运行的
内核安装内核级软件包。要验证当前运行的内核是否安装了kernel-level
包,请运行:
rpm -qa | grep kernel-devel-$(uname -r)
如果没有结果,则缺少所需的内核级
软件包,需要安装。
如果安装了正确的kernel-develpackage
,并且连接器仍然引发故障11,则某些所需的文件可能已经发生了篡改。此命令检查是否有任何文件被修改或丢失:
rpm --verify --nomtime --noghost kernel-default-devel
如果缺少或修改了任何文件,则需
要卸载并重新安装内核开发包,以确保所需文件可用。如果所有软件包文件都完整且未修改,则此命令不提供输出。
分辨率
要安装所需的内核级软件包
,请运行命令:
sudo dnf install -y kernel-devel-$(uname -r)
重新验证。故障11会在约一分钟后由连接器清除。
Oracle Linux Unbreakable Enterprise Kernel(UEK)
验证
Oracle Linux UEK要求为当前运行的内核安装kernel-uek-devely
包。要验证当前运行的内核是否安装了kernel-uek-level
包,请运行:
rpm -qa | grep kernel-uek-devel-$(uname -r)
如果没有结果,则缺少所需的kernel-uek-level
软件包,需要安装。
分辨率
要安装所需的kernel-uek-level
软件包,请运行命令:
sudo dnf install -y kernel-uek-devel-$(uname -r)
重新验证。故障11会在大约一分钟后由连接器清除。
SUSE Linux Enterprise和openSUSE Leap
验证
SUSE和openSUSE要求为当前运行的内核安装kernel-default-level
包。要验证当前运行的内核是否安装了kernel-default-level
程序包,请运行:
zypper search -si kernel-default-devel | grep $(uname -r | sed "s/-default//")
如果没有结果,则缺少所需的kernel-default-level
软件包,需要安装。
分辨率
安装内核报头
- 要确定是否可以安装适用于您的内核版本的正确的
kernel-default-level
软件包,请运行命令: zypper search -s kernel-default-devel | grep $(uname -r | sed "s/-default//")
输出包括以下语法:
| kernel-default-devel |
|
|
|
如果您看到类似的输出,请注意输出中指定的版本,然后继续步骤2。否
则,跳过此部分,而使用步骤更新内核并安装匹配的内核头。
- 使用此命令安装
kernel-default-level
软件包,将<version>
替换为上一步中确定的可用版本: sudo zypper install --oldpackage kernel-default-devel=
- 验证
kernel-default-devely
软件包是否已安装。故障11会在约一分钟后由连接器清除。
更新内核并安装匹配的内核标头
如果所需的kernel-default-level
软件包不可用,请将内核更新为受支持的版本,并安装匹配的内核标头。
- 使用以下命令列出可用的
kernel-default
和kernel-default-devely
包: zypper search -s --match-exact kernel-default kernel-default-devel
查找kernel-default
和kernel-default-devely
软件包的匹配版本。例如:
| kernel-default | package |
|
|
| kernel-default-devel | package |
|
|
请注意输出中指定的new-version
。
注意:如果找不到更新的内核进行升级,则必须升级到更新的分发版版本。
- 使用以下命令安装新版本的
kernel-default
和kernel-default-devel
: sudo zypper install kernel-default=
kernel-default-devel=
- 重新启动系统:
sudo reboot
- 重新验证。故障11由连接器清除。
基于Debian的分布
验证
基于Debian的分发要求为当前运行的内核安装linux-headers
包。要验证当前运行的内核是否安装了linux-headers
程序包,请运行:
apt list linux-headers-$(uname -r)
如果没有结果,则缺少所需的linux-headers
软件包,需要安装。
分辨率
要安装所需的linux-headers
软件包,请运行命令:
sudo apt install linux-headers-$(uname -r)
重新验证。故障11会在约一分钟后由连接器清除。