简介
本文解释如何确定当前运行的系统内核何时不能使用Cisco Secure Endpoint Linux连接器的文件系统和网络监控所需的预编译内核模块,以及手动编译内核模块以使文件系统和网络监控可正常运行的过程。
对于本文而言,“不支持的内核”是Linux连接器支持的内核版本,但内核版本所需的特定预编译内核模块不包含在连接器安装程序包中,因此必须手动编译。对于使用滚动版本更新的操作系统上运行的指定Linux连接器版本(例如Amazon Linux 2),情况可能如此。
并非所有Linux发行版和内核版本都支持运行编译的内核模块。本文将对人工编译可用内核模块时的识别提供帮助。
先决条件
要求
- 对于基于RHEL的系统,安装分布式提供的gcc;为当前运行的内核安装的内核级别。
- 对于使用Unbreakable Enterprise Kernel(UEK)的系统,安装分布式提供的gcc;为当前运行的内核安装的kernel-uek-level。
适用范围
操作系统
- RHEL/CentOS 7
- Oracle Linux 7 Red Hat兼容内核(RHCK)
- Oracle Linux 7 UEK 5及更低版本
- Amazon Linux 2
内核版本
- 网络监控内核模块可编译为内核版本2.6到4.14(含2.6到4.14)。
- 文件系统监控内核模块可编译为内核版本3.10到4.14(含3.10到4.14)。
注意:
- 在内核版本2.6到3.10中,连接器使用redirfs(树外内核模块)进行文件系统监控,不适用于自定义编译。
- 4.14和4.19之间的内核版本与连接器不兼容,也不适用于自定义编译。
- 对于内核版本4.19及更高版本,连接器使用eBPF模块进行文件系统和网络监控。有关解决这些内核版本上的此故障的详细信息,请参阅Linux内核级故障文章。
连接器版本
- 1.16.0及更高版本
- 1.18.0及更高版本,用于创建自定义UEK内核模块
诊断不受支持的内核
当连接器在带有不受支持内核的计算机上运行时,将引发故障8(实时文件系统监控器无法启动)和故障9(实时网络监控器无法启动),并且连接器将在没有文件系统或网络监控的情况下以降级状态运行。
可以从终端窗口执行以下步骤,以确定连接器是否在不支持的内核上运行:
- 验证连接器是否出现了故障8和/或故障9:
$ /opt/cisco/amp/bin/ampcli status
[logger] Set minimum reported log level to notice
Trying to connect...
Connected.
Status: Connected
Mode: Degraded
Scan: Ready for scan
Last Scan: none
Policy: unsupported kernel example (#7607)
Command-line: Enabled
Faults: 2 Critical
Fault IDs: 8, 9
ID 8 - Critical: Realtime filesystem monitor failed to start.
ID 9 - Critical: Realtime network monitor failed to start.
- 检查当前运行的内核是否介于2.6和4.14之间(含这两个值),并且它是否与任何预编译的内核模块版本都不匹配。
以下命令显示当前运行的内核版本:
$ uname -r
4.14.97-90.72.amzn2.x86_64
使用下列命令列出与连接器一起打包的可用预编译内核模块版本:
$ ls /opt/cisco/amp/bin/modules/
4.14.186-146.268.amzn2.x86_64 4.14.198-152.320.amzn2.x86_64 4.14.209-160.335.amzn2.x86_64 4.14.219-161.340.amzn2.x86_64 4.14.225-169.362.amzn2.x86_64
4.14.192-147.314.amzn2.x86_64 4.14.200-155.322.amzn2.x86_64 4.14.209-160.339.amzn2.x86_64 4.14.219-164.354.amzn2.x86_64 4.14.231-173.360.amzn2.x86_64
4.14.193-149.317.amzn2.x86_64 4.14.203-156.332.amzn2.x86_64 4.14.214-160.339.amzn2.x86_64 4.14.225-168.357.amzn2.x86_64 4.14.231-173.361.amzn2.x86_64
在上面的示例中,内核版本4.14.97-90.72.amzn2.x86_64不包含在可用内核模块的列表中。
如果满足以下所有条件,则Linux连接器适用于编译自定义内核模块:
- 连接器发生故障8和/或9。
- 当前内核版本介于2.6和4.14之间(包括这两个版本)。
- 当前内核版本未包含在预编译内核模块/
opt/cisco/amp/bin/modules列表中
分辨率
如果Linux连接器运行在不支持的内核上,则可以使用以下过程为系统编译自定义内核模块:
- 安装所需的系统依赖关系:
$ yum install gcc
需要gcc
才能编译具有特定选项的内核模块。
- 在使用基于RHEL的内核的系统上,使用以下命令安装所需的内核软件包:
$ yum install kernel-devel-$(uname -r)
-
在使用UEK的系统上,使用以下命令安装所需的内核软件包:
$ yum install kernel-uek-devel-$(uname -r)
根据您的系统,需要kernel-devel-$(uname -r)或kernel-uek-devel-$(uname -r)
才能为当前运行的内核编译内核模块。
-
运行compile_kmods.sh脚本,并具有root权限:
$ sudo /opt/cisco/amp/bin/compile_kmods.sh
compile_kmods.sh脚本将尝试为当前运行的内核版本编译文件系统和网络监控内核模块。自定义内核模块将在/opt/cisco/amp/extras/modules目录下创
建。在执行结束时,脚本将自动重新启动连接器,以便将新编译的内核模块加载到系统中。
- 确认故障8和9已清除:
$ /opt/cisco/amp/bin/ampcli status
[logger] Set minimum reported log level to notice
Trying to connect...
Connected.
Status: Connected
Mode: Normal
Scan: Ready for scan
Last Scan: 2021-06-14 05:53 PM
Policy: unsupported kernel example (#7607)
Command-line: Enabled
Faults: None
更多命令
compile_kmods.sh可执行文件在Secure Endpoint Linux连接器版本1.16.0及更高版本中可用,并且会自动安装在兼容的操作系统发行版上。Compile_kmods.sh可执行文件在Secure Endpoint Linux连接器版本1.18.0及更高版本中进行了改进,以支持UEK的自定义编译。
内核版本2.6至4.14支持网络监控的自定义编译内核模块,而内核版本3.10至4.14支持文件系统监控的自定义编译内核模块。
可用命令
NOTE:compile_kmods.sh可执行文件必须使用root权限运行。
故障排除
如果在执行Resolution步骤后仍然引发故障8和/或9,则可以执行以下步骤进一步调查问题: