强化 linux

来自 Alpine Linux
待办事项: 在 Alpine 仓库中提供预编译的 linux-hardened 内核,以便用户可以直接使用 apk add linux-hardened 安装,而无需自行编译。


为什么选择强化 Linux 内核?

您可能需要一个更注重安全性的内核、自定义私有系统调用(仅当您自行编译且未公开展示时)、应用 Grsecurity/KSPP/GrapheneOS 内核强化建议,并从内核中移除攻击面(使用 kernel-hardening-checker APK 软件包)。

使用强化补丁开发强化 Linux 内核

警告: 以下 Wiki 指南基于 Alpine Linux Edge 版本,并使用了 /etc/apk/repositories 中的 testing 仓库。


使用 本指南 [1] 创建自定义 Linux 内核。在您按照指南设置好 Linux 内核后,在当前目录 ($YOUR_WORK_DIR/aports/main/linux-lts) 中,通过以下两个 CLI 命令收集 Linux 强化补丁(将 "$VERSION" 替换为发布版本中的当前最新版本):

$ wget https://github.com/anthraxx/linux-hardened/releases/download/v$VERSION-hardened1/linux-hardened-v$VERSION-hardened1.patch 0006-linux-hardened-v$VERSION-hardened1.patch

$ wget https://github.com/anthraxx/linux-hardened/releases/download/v$VERSION-hardened1/linux-hardened-v$VERSION-hardened1.patch.sig 0007-linux-hardened-v$VERSION-hardened1.patch.sig

注意: 为避免混淆,本 Wiki 将使用 x86_64 作为 $ARCH。如果需要,请将 "x86_64" 替换为不同的 $ARCH。
注意: 此外,本 Wiki 将使用 6.11.10 作为 $pkgver,1 作为 $pkgrel。请在新版本中替换 $pkgver 和 $pkgrel。
注意: 这将通过 Alpine Linux Edge 版本进行编译。

在 "APKBUILD" 文件中,将 "source" 行更改为以下内容:

内容 ./APKBUILD

... source="https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/linux-$_kernver.tar.xz 0001-powerpc-boot-wrapper-Add-z-notext-flag-for-ppc64le.patch 0002-x86-Compress-vmlinux-with-zstd-19-instead-of-22.patch 0003-kexec-add-kexec_load_disabled-boot-option.patch 0004-objtool-respect-AWK-setting.patch 0005-powerpc-config-defang-gcc-check-for-stack-protector-.patch 0006-linux-hardened-v6.11.10-hardened1.patch 0007-linux-hardened-v6.11.10-hardened1.patch.sig lts.x86_64.config virt.x86_64.config " ...

再次在 "APKBUILD" 文件中,将 "pkgver" 和 "pkgrel" 更改为与发布补丁文件的 "$VERSION" 相同:

内容 ./APKBUILD

... pkgver= ... pkgrel= ...

您可以更改软件包名称的 flavor(如果这样做,请将所有 "lts" 字样替换为您喜欢的 flavor 名称,例如 "hardened"),并且例如将文件 lts.x86_64.config 更改为 hardened.x86_64.config),但对于本 Wiki,它将仅为 LTS。

内容 ./APKBUILD

... _flavor=lts ...

需要删除补丁文件(非 sig 文件)中的 "-hardened1":

内容 ./0006-linux-hardened-v$VERSION-hardened1.patch

... -EXTRAVERSION = +EXTRAVERSION = -hardened1 ...


警告: 您必须删除 "EXTRAVERSION" 命名 ("-hardened1") 后的内容,否则安装 "kernel-hooks" 软件包将不会有任何作用,因为此 "EXTRAVERSION" 是不必要的。("kernel-hooks" apk 软件包是制作安全启动 EFISTUB [2] 所必需的。)


使用强化配置开发强化 Linux 内核

可选:在编译内核之前,在 Alpine Linux 自定义内核指南 [1] 中,您必须进行一些内核模块配置(通过 abuild -rK 运行几秒钟,然后按 Ctrl-C 退出,然后转到 src/linux-$VERSION/,下载 Arch_hardened_x86_64.config:

$ doas apk add zstd tar $ mkdir arch $ cd arch $ wget -O linux-hardened-headers.pkg.tar.zst https://archlinux.org.cn/packages/extra/x86_64/linux-hardened-headers/download/ $ tar -xvf linux-hardened-headers.pkg.tar.zst $ cd .. && cp ./arch/usr/src/linux-hardened/.config ./Arch_hardened_x86_64.config $ mv ./arch ../../

并执行 make menuconfig,选择 "load",然后输入下载的 .config 文件的名称:Arch_hardened_x86_64.config,最好尽可能减少 .config 文件中的内核模块数量,以减少编译时间。您可以将刚刚下载的 Arch_hardened_x86_64.config 用作配置简化的基础。(使用 apk 软件包 "kernel-hardening-checker" 尽可能安全地配置 .config 文件,因为它包含一些 grsecurity 和 kspp 内核配置建议以及更多。)

警告: 默认的 Arch_hardened_x86_64.config 需要进行一些修改,在 menuconfig 中,转到 general setup -> kernel compression mode,将其设置为 GZIP。


提示: 要使用 kernel-hardening-checker,请执行 mkdir kernel-hardening-checker && cd kernel-hardening-checker,您应该在当前目录中获取三个文件:一个包含 sysctl 参数的文件 ($ doas sysctl -a > sysctl.conf"sysctl.conf"),一个包含启动参数的文件 ($ cat /proc/version > ./cmdline.conf"cmdline.conf"),以及 .config 文件 ("Arch_hardened_x86_64.config")。然后使用以下 CLI 命令运行:$ kernel-hardening-checker -c ./Arch_hardened_x86_64.config -s ./sysctl.conf -l ./cmdline.conf
之后执行 cd .. && mv ./kernel-hardening-checker $YOUR_WORK_DIR/aports/main/linux-lts,这样您就不会在内核编译完成后丢失此目录(它会删除 src 目录)。
注意: 继续上述可选段落,在完成 .config 内核文件配置后,执行 cp $YOUR_WORK_DIR/aports/main/linux-lts/src/linux-$VERSION/Arch_hardened_x86_64.config $YOUR_WORK_DIR/aports/main/linux-lts/lts.x86_64.config
注意: $YOUR_WORK_DIR/aports/main/linux-lts/virt.x86_64.config 是用于虚拟化(QEMU、Xen)的内核,在本 Wiki 中请勿自定义此内核。

应用此操作后,您可以执行 cd $YOUR_WORK_DIR/aports/main/linux-ltsabuild checksum && abuild -r 开始编译内核。

当编译成功完成后,您应该看到 ~/packages/main/$ARCH/linux-lts-$VERSION.apk,可以通过 apk add linux-lts=$VERSION 安装(确保执行 apk update,并且 /etc/apk/repositories 包含 $YOUR_USERS_HOME_DIR/packages/main)。

外部链接

自定义内核 (Alpine Wiki):

EFIStub(安全启动)(Alpine Wiki):

发布页面

创建此页面的帮助资源

Arch Linux linux-hardened 软件包仓库(用于解压缩并获取其 .config)