

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AL2023 内核强化
<a name="kernel-hardening"></a>

 中的 AL2023 6.1 Linux 内核配置和构建时有多个强化选项和功能。

## 内核强化选项（与架构无关）
<a name="kernel-hardening-common"></a>


| `CONFIG` 选项 | AL2023/6.1/aarch64 | AL2023/6.1/x86\$164 | AL2023/6.12/aarch64 | AL2023/6.12/x86\$164 | AL2023/6.18/aarch64 | AL2023/6.18/x86\$164 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  [`CONFIG_ACPI_CUSTOM_METHOD`](#CONFIG_ACPI_CUSTOM_METHOD)  |  n  |  n  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_BINFMT_MISC`](#CONFIG_BINFMT_MISC)  |  m  |  m  |  m  |  m  |  m  |  m  | 
|  [`CONFIG_BUG`](#CONFIG_BUG)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_BUG_ON_DATA_CORRUPTION`](#CONFIG_BUG_ON_DATA_CORRUPTION)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_CFI_CLANG`](#CONFIG_CFI_CLANG)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_CFI_PERMISSIVE`](#CONFIG_CFI_PERMISSIVE)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_COMPAT`](#CONFIG_COMPAT)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_COMPAT_BRK`](#CONFIG_COMPAT_BRK)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_COMPAT_VDSO`](#CONFIG_COMPAT_VDSO)  | 不适用 |  n  | 不适用 |  n  | 不适用 |  n  | 
|  [`CONFIG_DEBUG_CREDENTIALS`](#CONFIG_DEBUG_CREDENTIALS)  |  n  |  n  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_DEBUG_LIST`](#CONFIG_DEBUG_LIST)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_DEBUG_NOTIFIERS`](#CONFIG_DEBUG_NOTIFIERS)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_DEBUG_SG`](#CONFIG_DEBUG_SG)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_DEBUG_VIRTUAL`](#CONFIG_DEBUG_VIRTUAL)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_DEBUG_WX`](#CONFIG_DEBUG_WX)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_DEFAULT_MMAP_MIN_ADDR`](#CONFIG_DEFAULT_MMAP_MIN_ADDR)  |  65536  |  65536  |  65536  |  65536  |  65536  |  65536  | 
|  [`CONFIG_DEVKMEM`](compare-with-al2-kernel.md#CONFIG_DEVKMEM)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_DEVMEM`](compare-with-al2-kernel.md#CONFIG_DEVMEM)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_EFI_DISABLE_PCI_DMA`](#CONFIG_EFI_DISABLE_PCI_DMA)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_FORTIFY_SOURCE`](compare-with-al2-kernel.md#CONFIG_FORTIFY_SOURCE)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_HARDENED_USERCOPY`](#CONFIG_HARDENED_USERCOPY)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_HARDENED_USERCOPY_FALLBACK`](#CONFIG_HARDENED_USERCOPY_FALLBACK)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_HARDENED_USERCOPY_PAGESPAN`](#CONFIG_HARDENED_USERCOPY_PAGESPAN)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_HIBERNATION`](#CONFIG_HIBERNATION)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_HW_RANDOM_TPM`](#CONFIG_HW_RANDOM_TPM)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_INET_DIAG`](#CONFIG_INET_DIAG)  |  m  |  m  |  m  |  m  |  m  |  m  | 
|  [`CONFIG_INIT_ON_ALLOC_DEFAULT_ON`](#CONFIG_INIT_ON_ALLOC_DEFAULT_ON)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_INIT_ON_FREE_DEFAULT_ON`](#CONFIG_INIT_ON_FREE_DEFAULT_ON)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_INIT_STACK_ALL_ZERO`](#CONFIG_INIT_STACK_ALL_ZERO)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_IOMMU_DEFAULT_DMA_STRICT`](#CONFIG_IOMMU_DEFAULT_DMA_STRICT)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_IOMMU_SUPPORT`](#CONFIG_IOMMU_SUPPORT)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_IO_STRICT_DEVMEM`](compare-with-al2-kernel.md#CONFIG_IO_STRICT_DEVMEM)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_KEXEC`](#CONFIG_KEXEC)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_KFENCE`](#CONFIG_KFENCE)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_LDISC_AUTOLOAD`](compare-with-al2-kernel.md#CONFIG_LDISC_AUTOLOAD)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_LEGACY_PTYS`](#CONFIG_LEGACY_PTYS)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY`](#CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_MODULES`](#CONFIG_MODULES)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_MODULE_SIG`](#CONFIG_MODULE_SIG)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_MODULE_SIG_ALL`](#CONFIG_MODULE_SIG_ALL)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_MODULE_SIG_FORCE`](#CONFIG_MODULE_SIG_FORCE)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_MODULE_SIG_HASH`](#CONFIG_MODULE_SIG_HASH)  |  sha512  |  sha512  |  sha512  |  sha512  |  sha512  |  sha512  | 
|  [`CONFIG_MODULE_SIG_KEY`](#CONFIG_MODULE_SIG_KEY)  |  certs/signing\$1key.pem  |  certs/signing\$1key.pem  |  certs/signing\$1key.pem  |  certs/signing\$1key.pem  |  certs/signing\$1key.pem  |  certs/signing\$1key.pem  | 
|  [`CONFIG_MODULE_SIG_SHA512`](#CONFIG_MODULE_SIG_SHA512)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_PAGE_POISONING`](#CONFIG_PAGE_POISONING)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_PAGE_POISONING_NO_SANITY`](#CONFIG_PAGE_POISONING_NO_SANITY)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_PAGE_POISONING_ZERO`](#CONFIG_PAGE_POISONING_ZERO)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_PANIC_ON_OOPS`](compare-with-al2-kernel.md#CONFIG_PANIC_ON_OOPS)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_PANIC_TIMEOUT`](#CONFIG_PANIC_TIMEOUT)  |  0  |  0  |  0  |  0  |  0  |  0  | 
|  [`CONFIG_PROC_KCORE`](#CONFIG_PROC_KCORE)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT`](#CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_RANDOM_TRUST_BOOTLOADER`](#CONFIG_RANDOM_TRUST_BOOTLOADER)  |  y  |  y  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_RANDOM_TRUST_CPU`](#CONFIG_RANDOM_TRUST_CPU)  |  y  |  y  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_REFCOUNT_FULL`](#CONFIG_REFCOUNT_FULL)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_SCHED_CORE`](#CONFIG_SCHED_CORE)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_SCHED_STACK_END_CHECK`](#CONFIG_SCHED_STACK_END_CHECK)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECCOMP`](#CONFIG_SECCOMP)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECCOMP_FILTER`](#CONFIG_SECCOMP_FILTER)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY`](#CONFIG_SECURITY)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_DMESG_RESTRICT`](compare-with-al2-kernel.md#CONFIG_SECURITY_DMESG_RESTRICT)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_LANDLOCK`](#CONFIG_SECURITY_LANDLOCK)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_LOCKDOWN_LSM`](#CONFIG_SECURITY_LOCKDOWN_LSM)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_LOCKDOWN_LSM_EARLY`](#CONFIG_SECURITY_LOCKDOWN_LSM_EARLY)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_SELINUX_BOOTPARAM`](#CONFIG_SECURITY_SELINUX_BOOTPARAM)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_SELINUX_DEVELOP`](#CONFIG_SECURITY_SELINUX_DEVELOP)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SECURITY_SELINUX_DISABLE`](compare-with-al2-kernel.md#CONFIG_SECURITY_SELINUX_DISABLE)  |  n  |  n  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_SECURITY_WRITABLE_HOOKS`](#CONFIG_SECURITY_WRITABLE_HOOKS)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_SECURITY_YAMA`](#CONFIG_SECURITY_YAMA)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SHUFFLE_PAGE_ALLOCATOR`](#CONFIG_SHUFFLE_PAGE_ALLOCATOR)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SLAB_FREELIST_HARDENED`](#CONFIG_SLAB_FREELIST_HARDENED)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SLAB_FREELIST_RANDOM`](#CONFIG_SLAB_FREELIST_RANDOM)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SLUB_DEBUG`](#CONFIG_SLUB_DEBUG)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_STACKPROTECTOR`](#CONFIG_STACKPROTECTOR)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_STACKPROTECTOR_STRONG`](#CONFIG_STACKPROTECTOR_STRONG)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_STATIC_USERMODEHELPER`](#CONFIG_STATIC_USERMODEHELPER)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_STRICT_DEVMEM`](compare-with-al2-kernel.md#CONFIG_STRICT_DEVMEM)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_STRICT_KERNEL_RWX`](#CONFIG_STRICT_KERNEL_RWX)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_STRICT_MODULE_RWX`](#CONFIG_STRICT_MODULE_RWX)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_SYN_COOKIES`](#CONFIG_SYN_COOKIES)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_VMAP_STACK`](#CONFIG_VMAP_STACK)  |  y  |  y  |  y  |  y  |  y  |  y  | 
|  [`CONFIG_WERROR`](#CONFIG_WERROR)  |  n  |  n  |  n  |  n  |  n  |  n  | 
|  [`CONFIG_ZERO_CALL_USED_REGS`](#CONFIG_ZERO_CALL_USED_REGS)  |  n  |  n  |  n  |  n  |  n  |  n  | 

### 允许 ACPI 方法 inserted/replaced 在运行时运行 (CONFI\$1ACPI\$1CUSTOM\$1METHOD)
<a name="CONFIG_ACPI_CUSTOM_METHOD"></a>

Amazon Linux 禁用了此选项，因为它允许 `root` 用户写入任意内核内存。

此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 其他二进制格式 (`binfmt_misc`)
<a name="CONFIG_BINFMT_MISC"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。在中 AL2023，此功能是可选的，是作为内核模块构建的。

### `BUG()` 支持
<a name="CONFIG_BUG"></a>

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 如果内核在检查内核内存结构的有效性时遇到数据损坏，则执行 `BUG()`
<a name="CONFIG_BUG_ON_DATA_CORRUPTION"></a>

 Linux 内核的某些部分会检查数据结构的内部一致性，并在检测到数据损坏执行 `BUG()`。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### `COMPAT_BRK`
<a name="CONFIG_COMPAT_BRK"></a>

 此选项禁用后（这就是 Amazon Linux 配置内核的方式），则 `randomize_va_space` `sysctl` 设置会默认为 `2`，这也会在 `mmap` 基础地址、堆栈和 VDSO 页面随机化之上启用随机掩码。

 此选项存在于内核中，目的是提供与 1996 年及更早版本的一些古老 `libc.so.5` 二进制文件的兼容性。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### `COMPAT_VDSO`
<a name="CONFIG_COMPAT_VDSO"></a>

 此配置选项与 `x86-64` 有关，与 `aarch64` 无关。将此设置为 `n`，Amazon Linux 内核不会在可预测的地址上显示 32 位虚拟动态共享对象 (VDSO)。自 2004 年以来，已知因该选项设置为 `n` 而被损坏的最新 `glibc` 版本是 `glibc` 2.3.3。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### `CONFIG_DEBUG`门控硬化
<a name="CONFIG_DEBUG_KERNEL"></a>

 受限的 Linux 内核配置选项`CONFIG_DEBUG`通常设计用于为调试问题而构建的内核，性能之类的东西不是优先事项。 AL2023 启用`CONFIG_DEBUG_LIST`强化选项。

### 在配置 IOMMU 之前，禁用 EFI 存根中 PCI 设备的 DMA
<a name="CONFIG_EFI_DISABLE_PCI_DMA"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### 加强在内核和用户空间之间复制内存的功能
<a name="CONFIG_HARDENED_USERCOPY"></a>

 当内核需要将内存复制到用户空间或从用户空间复制内存时，此选项会启用一些检查，可防范某些类别的堆溢出问题。

 `CONFIG_HARDENED_USERCOPY_FALLBACK` 选项存在于内核 4.16 到 5.15 中，可帮助内核开发人员通过 `WARN()` 发现任何缺失的允许列表条目。由于 AL2023附带了 6.1 内核，因此此选项不再与之相关 AL2023。

 该`CONFIG_HARDENED_USERCOPY_PAGESPAN`选项主要作为开发人员的调试选项存在于内核中 AL2023，不再适用于中的 6.1 内核。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 休眠支持
<a name="CONFIG_HIBERNATION"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。需要启用此选项才能支持将[休眠按需型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html)并支持[休眠中断的竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernate-spot-instances.html) 

### 随机数生成
<a name="kernel-rng"></a>

 AL2023 内核经过配置，确保在 EC2 内有足够的熵可用。

### `CONFIG_INET_DIAG`
<a name="CONFIG_INET_DIAG"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。在中 AL2023，此功能是可选的，是作为内核模块构建的。

### 在分配和取消分配时将所有内核页和 slab 分配器内存归零
<a name="kernel-init-on-alloc-free"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。 AL2023 由于默认情况下启用此功能可能会影响性能，因此在中禁用了这些选项。`CONFIG_INIT_ON_ALLOC_DEFAULT_ON` 行为可以通过将 `init_on_alloc=1` 添加到内核命令行来启用，`CONFIG_INIT_ON_FREE_DEFAULT_ON` 行为可以通过添加 `init_on_free=1` 来启用。

### 将所有堆栈变量初始化为零 (`CONFIG_INIT_STACK_ALL_ZERO`)
<a name="CONFIG_INIT_STACK_ALL_ZERO"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。此选项需要 GCC 12 或更高，而与 GCC 11 一起 AL2023 发货。

### 内核模块签名
<a name="kernel-config-modules"></a>

 AL2023 对内核模块的签名进行签名和验证。为了保持构建第三方模块的用户的兼容性，尚未启用要求模块具有有效签名的 `CONFIG_MODULE_SIG_FORCE` 选项。对于想要确保所有内核模块都经过签名的用户，可以配置[锁定 Linux 安全模块 (LSM)](#CONFIG_SECURITY_LOCKDOWN_LSM)以强制执行此操作。

### `kexec`
<a name="CONFIG_KEXEC"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。启用此选项是为了便于使用 `kdump` 功能。

### `IOMMU`Support
<a name="CONFIG_IOMMU_SUPPORT"></a>

 AL2023 启用 IOMMU 支持。默认情况下，`CONFIG_IOMMU_DEFAULT_DMA_STRICT` 选项未启用，但可以通过将 `iommu.passthrough=0 iommu.strict=1` 添加到内核命令行来配置此功能。

### `kfence`
<a name="CONFIG_KFENCE"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### 传统 `pty` 支持
<a name="CONFIG_LEGACY_PTYS"></a>

 AL2023 使用现代PTY界面 (`devpts`)。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 锁定 Linux 安全模块 (LSM)
<a name="CONFIG_SECURITY_LOCKDOWN_LSM"></a>

 AL2023 构建 `lockdown` LSM，它将在使用安全启动时自动锁定内核。

 `CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY` 选项未启用。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。不使用安全启动时，可以启用锁定 LSM 并根据需要进行配置。

### 页面中毒
<a name="CONFIG_PAGE_POISONING"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。同样[在分配和取消分配时将所有内核页和 slab 分配器内存归零](#kernel-init-on-alloc-free)，由于这可能会影响性能，因此在 AL2023 内核中禁用了该功能。

### 堆栈保护器
<a name="CONFIG_STACKPROTECTOR"></a>

 内 AL2023 核是使用堆栈保护器功能构建的，可通过GCC选项启用。`-fstack-protector-strong`

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### seccomp BPFAPI
<a name="CONFIG_SECCOMP"></a>

 诸如 `systemd` 和容器运行时之类的软件使用 seccomp 强化功能来强化用户空间应用程序。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### `panic()` 超时
<a name="CONFIG_PANIC_TIMEOUT"></a>

 内 AL2023 核配置时将此值设置为`0`，这意味着内核在死机后不会重新启动。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。这可以通过 `sysctl`、`/proc/sys/kernel/panic` 和在内核命令行上进行配置。

### 安全模型
<a name="CONFIG_SECURITY"></a>

 AL2023 默认情况下 SELinux ，在 “允许” 模式下启用。有关更多信息，请参阅 [为 AL2023 设置 SELinux 模式](selinux-modes.md)。

 [锁定 Linux 安全模块 (LSM)](#CONFIG_SECURITY_LOCKDOWN_LSM) 和 `yama` 模块也已启用。

### `/proc/kcore`
<a name="CONFIG_PROC_KCORE"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### 在系统调用进入时进行内核栈偏移随机化
<a name="CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。这可以通过在内核命令行上设置 `randomize_kstack_offset=on` 来启用。

### 引用计数检查 (`CONFIG_REFCOUNT_FULL`)
<a name="CONFIG_REFCOUNT_FULL"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。由于此选项可能对性能产生影响，因此目前未启用。

### 调度程序对 SMT 内核的感知 (`CONFIG_SCHED_CORE`)
<a name="CONFIG_SCHED_CORE"></a>

 内 AL2023 核是用它构建的`CONFIG_SCHED_CORE`，它允许用户空间应用程序使用`prctl(PR_SCHED_CORE)`。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 在调用 `schedule()` 时检查是否存在栈损坏 (`CONFIG_SCHED_STACK_END_CHECK`)
<a name="CONFIG_SCHED_STACK_END_CHECK"></a>

 内 AL2023 核是在`CONFIG_SCHED_STACK_END_CHECK`启用状态下构建的。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 内存分配器强化
<a name="kernel-allocator-hardening"></a>

 内 AL2023 核允许使用`CONFIG_SHUFFLE_PAGE_ALLOCATOR`、`CONFIG_SLAB_FREELIST_HARDENED`和选项对内核内存分配器进行强化。`CONFIG_SLAB_FREELIST_RANDOM`此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### SLUB 调试支持
<a name="CONFIG_SLUB_DEBUG"></a>

 AL2023 内核之所以`CONFIG_SLUB_DEBUG`启用，是因为此选项为分配器启用了可选的调试功能，这些功能可以在内核命令行上启用。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### CONFIG\$1STATIC\$1USERMODEHELPER
<a name="CONFIG_STATIC_USERMODEHELPER"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。这是因为 `CONFIG_STATIC_USERMODEHELPER` 需要该发行版的特殊支持，而 Amazon Linux 中目前没有这种支持。

### 只读内核文本和 rodata（`CONFIG_STRICT_KERNEL_RWX` 和 `CONFIG_STRICT_MODULE_RWX`）
<a name="CONFIG_STRICT_KERNEL_RWX"></a>

 内 AL2023 核配置为将内核和内核模块的文本和rodata内存标记为只读，将非文本内存标记为不可执行。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### TCP syncookie 支持 (`CONFIG_SYN_COOKIES`)
<a name="CONFIG_SYN_COOKIES"></a>

 该 AL2023 内核是在支持 TCP 同步 cookie 的情况下构建的。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 带有保护页面的虚拟映射栈 (`CONFIG_VMAP_STACK`)
<a name="CONFIG_VMAP_STACK"></a>

 内 AL2023 核是用构建的`CONFIG_VMAP_STACK`，允许使用保护页面进行虚拟映射的内核堆栈。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 使用编译器警告作为错误进行构建 (`CONFIG_WERROR`)
<a name="CONFIG_WERROR"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### 在函数退出时进行寄存器清零 (`CONFIG_ZERO_CALL_USED_REGS`)
<a name="CONFIG_ZERO_CALL_USED_REGS"></a>

 尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### 用户空间分配的最小地址
<a name="CONFIG_DEFAULT_MMAP_MIN_ADDR"></a>

 此强化选项可以帮助减少内核 NULL 指针错误的影响。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### `clang`特定的强化选项
<a name="kernel-hardening-clang"></a>

 内 AL2023 核是使用GCC而不是构建的clang，因此无法启用`CONFIG_CFI_CLANG`强化选项，这也使得它`CONFIG_CFI_PERMISSIVE`不适用。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

## x86-64 特定的内核强化选项
<a name="kernel-hardening-x86-64"></a>


| `CONFIG` 选项 | AL2023/6.1/aarch64 | AL2023/6.1/x86\$164 | AL2023/6.12/aarch64 | AL2023/6.12/x86\$164 | AL2023/6.18/aarch64 | AL2023/6.18/x86\$164 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  [`CONFIG_AMD_IOMMU`](#CONFIG_AMD_IOMMU)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_AMD_IOMMU_V2`](#CONFIG_AMD_IOMMU_V2)  | 不适用 |  y  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_IA32_EMULATION`](#CONFIG_IA32_EMULATION)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_INTEL_IOMMU`](#CONFIG_INTEL_IOMMU)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_INTEL_IOMMU_DEFAULT_ON`](#CONFIG_INTEL_IOMMU_DEFAULT_ON)  | 不适用 |  n  | 不适用 |  n  | 不适用 |  n  | 
|  [`CONFIG_INTEL_IOMMU_SVM`](#CONFIG_INTEL_IOMMU_SVM)  | 不适用 |  n  | 不适用 |  n  | 不适用 |  n  | 
|  [`CONFIG_LEGACY_VSYSCALL_NONE`](#CONFIG_LEGACY_VSYSCALL_NONE)  | 不适用 |  n  | 不适用 |  n  | 不适用 |  n  | 
|  [`CONFIG_MODIFY_LDT_SYSCALL`](#CONFIG_MODIFY_LDT_SYSCALL)  | 不适用 |  n  | 不适用 |  n  | 不适用 |  n  | 
|  [`CONFIG_PAGE_TABLE_ISOLATION`](#CONFIG_PAGE_TABLE_ISOLATION)  | 不适用 |  y  | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_RANDOMIZE_MEMORY`](#CONFIG_RANDOMIZE_MEMORY)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_X86_64`](#CONFIG_X86_64)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_X86_MSR`](#CONFIG_X86_MSR)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_X86_VSYSCALL_EMULATION`](#CONFIG_X86_VSYSCALL_EMULATION)  | 不适用 |  y  | 不适用 |  y  | 不适用 |  y  | 
|  [`CONFIG_X86_X32`](#CONFIG_X86_X32)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_X86_X32_ABI`](#CONFIG_X86_X32_ABI)  | 不适用 |  n  | 不适用 |  n  | 不适用 |  n  | 

### x86-64 支持
<a name="CONFIG_X86_64"></a>

 基本 x86-64 支持包括物理地址扩展 (PAE) 和不执行 (NX) 位支持。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### AMD 和英特尔 IOMMU 支持
<a name="kernel-x86-64-iommu"></a>

 该 AL2023 内核是在支持 AMD 和英特尔的情况下构建IOMMUs的。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

 `CONFIG_INTEL_IOMMU_DEFAULT_ON` 选项未设置，但可以通过将 `intel_iommu=on` 传递到内核命令行来启用。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

 中当前未启用该`CONFIG_INTEL_IOMMU_SVM`选项 AL2023。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### Support 支持 32 位用户空间
<a name="kernel-hardening-32bit-support"></a>

**重要**  
 对 32 位 x86 用户空间的支持已弃用，在未来的主版本 Amazon Linux 中，可能会取消对运行 32 位用户空间二进制文件的支持。

**注意**  
 虽然 AL2023 不再包含任何 32 位软件包，但内核仍将支持运行 32 位用户空间。请参阅[32 位 x86 (i686) 软件包](compare-with-al2.md#i686)了解更多信息。

 要支持运行 32 位用户空间应用程序，请不要启用该`CONFIG_X86_VSYSCALL_EMULATION`选项， AL2023 而是启用`CONFIG_IA32_EMULATION``CONFIG_COMPAT`、和`CONFIG_X86_VSYSCALL_EMULATION`选项。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

 未启用 64 位处理器的 x32 本机 32 位 ABI（`CONFIG_X86_X32` 和 `CONFIG_X86_X32_ABI`）。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### x86 型号特定寄存器 (MSR) 支持
<a name="CONFIG_X86_MSR"></a>

 启用 `CONFIG_X86_MSR` 选项是为了支持 `turbostat`。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### `modify_ldt` 系统调用
<a name="CONFIG_MODIFY_LDT_SYSCALL"></a>

 AL2023 不允许用户程序使用 syscall 修改 x86 本地描述符表 (LDT)。`modify_ldt`此调用是运行 16 位或分段代码所必需的，缺少这个调用可能会破坏 `dosemu` 等软件，在 WINE 下运行一些程序以及一些非常旧的线程库。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 在用户模式下移除内核映射
<a name="CONFIG_PAGE_TABLE_ISOLATION"></a>

 AL2023 配置内核，使大多数内核地址不会映射到用户空间。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 随机化内核内存部分
<a name="CONFIG_RANDOMIZE_MEMORY"></a>

 AL2023 将内核配置为随机化内核内存部分的基本虚拟地址。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

## aarch64 特定的内核强化选项
<a name="kernel-hardening-aarch64"></a>


| `CONFIG` 选项 | AL2023/6.1/aarch64 | AL2023/6.1/x86\$164 | AL2023/6.12/aarch64 | AL2023/6.12/x86\$164 | AL2023/6.18/aarch64 | AL2023/6.18/x86\$164 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  [`CONFIG_ARM64_BTI`](#CONFIG_ARM64_BTI)  |  y  | 不适用 |  y  | 不适用 |  y  | 不适用 | 
|  [`CONFIG_ARM64_BTI_KERNEL`](#CONFIG_ARM64_BTI_KERNEL)  | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 | 
|  [`CONFIG_ARM64_PTR_AUTH`](#CONFIG_ARM64_PTR_AUTH)  |  y  | 不适用 |  y  | 不适用 |  y  | 不适用 | 
|  [`CONFIG_ARM64_PTR_AUTH_KERNEL`](#CONFIG_ARM64_PTR_AUTH_KERNEL)  |  y  | 不适用 |  y  | 不适用 |  y  | 不适用 | 
|  [`CONFIG_ARM64_SW_TTBR0_PAN`](#CONFIG_ARM64_SW_TTBR0_PAN)  |  y  | 不适用 |  y  | 不适用 |  y  | 不适用 | 
|  [`CONFIG_UNMAP_KERNEL_AT_EL0`](#CONFIG_UNMAP_KERNEL_AT_EL0)  |  y  | 不适用 |  y  | 不适用 |  y  | 不适用 | 

### 分支目标识别
<a name="CONFIG_ARM64_BTI"></a>

 内 AL2023 核支持分支目标识别 (`CONFIG_ARM64_BTI`)。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

 该`CONFIG_ARM64_BTI_KERNEL`选项未在 AL2023 构建时启用GCC，并且由于 [gcc 错误](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106671)，[上游内核中目前已禁用使用此选项构建内核](https://github.com/torvalds/linux/commit/c0a454b9044fdc99486853aa424e5b3be2107078)的支持。尽管此选项是[内核自我保护项目 (KSPP) 推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一，但并 AL2023 未将此配置选项设置为 KSPP 建议的选项。

### 指针身份验证 (`CONFIG_ARM64_PTR_AUTH`)
<a name="CONFIG_ARM64_PTR_AUTH"></a>

 该 AL2023 内核支持指针身份验证扩展（ ARMv8.3 扩展的一部分），该扩展可用于帮助缓解面向返回的编程 (ROP) 技术。Graviton 3 引入了在 [Graviton](https://aws.amazon.com/ec2/graviton) 上进行指针身份验证所需的硬件支持。

 `CONFIG_ARM64_PTR_AUTH` 选项已启用，并支持针对用户空间的指针身份验证。由于该`CONFIG_ARM64_PTR_AUTH_KERNEL`选项也已启用，因此 AL2023 内核可以自行使用返回地址保护。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 使用 `TTBR0_EL1` 切换的 Emulate Privileged Access Never
<a name="CONFIG_ARM64_SW_TTBR0_PAN"></a>

 此选项可防止内核直接访问用户空间内存，`TTBR0_EL1` 只由用户访问例程临时设置为有效值。

 此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。

### 在用户空间中运行时取消内核映射
<a name="CONFIG_UNMAP_KERNEL_AT_EL0"></a>

 内 AL2023 核配置为在用户空间 (`CONFIG_UNMAP_KERNEL_AT_EL0`) 中运行时取消内核映射。此选项是[内核自我保护项目推荐设置](https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings)之一。