簡介
本文檔介紹如何識別、解決和驗證安全終端Linux聯結器中的故障11。
背景資訊
當聯結器無法載入監視系統活動和事件所需的eBPF模組時,它會引發故障11。
從Linux聯結器版本1.25開始,聯結器優先處理eBPF CO-RE(編譯一次 — 到處運行)以監視支援BTF的核心上的系統事件,無需安裝核心報頭。這種系統可觀測性方法效率更高,是首選方案。
聯結器可回退到舊版eBPF載入方法,當使用低於1.25的Linux聯結器版本或在不支援BTF的核心上運行時,需要安裝核心報頭。這些報頭通常不包括在標準分發版安裝中,需要單獨安裝。
如果聯結器未能使用其中一種方法載入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 Enterprise 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 Enterprise Linux
- Rocky Linux
驗證
基於RPM的發行版要求為當前運行的
核心安裝核心級軟體包。要驗證當前運行的核心是否安裝了核心級軟體包,請運行:
rpm -qa | grep kernel-devel-$(uname -r)
如果沒有結果,則缺少所需的核心級
程式包,需要安裝。
如果安裝了正確的核心
開發軟體包,並且聯結器仍然引發故障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-level
包,請運行:
rpm -qa | grep kernel-uek-devel-$(uname -r)
如果沒有結果,則缺少所需的kernel-uek-devely
包,需要安裝。
解析
要安裝所需的kernel-uek-level
程式包,請運行命令:
sudo dnf install -y kernel-uek-devel-$(uname -r)
重新驗證。故障11會在約一分鐘後由聯結器清除。
SUSE Linux Enterprise和openSUSE Leap
驗證
SUSE和openSUSE要求為當前運行的核心安裝kernel-default-devely
包。要驗證當前運行的核心是否安裝了kernel-default-devely
包,請運行:
zypper search -si kernel-default-devel | grep $(uname -r | sed "s/-default//")
如果沒有結果,則缺少所需的kernel-default-devely
程式包,需要安裝。
解析
安裝核心標頭
- 要確定是否可以安裝適用於您的核心版本的正確的
kernel-default-devely
包,請運行命令: zypper search -s kernel-default-devel | grep $(uname -r | sed "s/-default//")
輸出包括語法:
| kernel-default-devel |
|
|
|
如果您看到類似的輸出,請注意輸出中指定的版
本,並繼續步驟2。否則,請跳過此部分,而使用步驟更新核心並安裝匹配的核心標頭。
- 使用以下命令安裝
kernel-default-devely
程式包,將<version>
替換為在上一步中識別的可用版本: sudo zypper install --oldpackage kernel-default-devel=
- 驗證是否已安裝
kernel-default-
devely程式包。故障11在約一分鐘後由聯結器清除。
更新核心並安裝匹配的核心標頭
如果所需的kernel-default-devely
包不可用,請將核心更新為受支援的版本,並安裝匹配的核心標頭。
- 使用以下命令列出可用的
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 |
|
|
請注意輸出中指定的
新版本。
附註:如果找不到更新的核心進行升級,則必須升級到更新的發行版版本。
- 使用以下命令安裝新版本的
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在約一分鐘後由聯結器清除。