强化 linux

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

/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
在 "APKBUILD
" 文件中,将 "source
" 行更改为以下内容:
内容 ./APKBUILD
再次在 "APKBUILD
" 文件中,将 "pkgver
" 和 "pkgrel
" 更改为与发布补丁文件的 "$VERSION
" 相同:
内容 ./APKBUILD
您可以更改软件包名称的 flavor(如果这样做,请将所有 "lts
" 字样替换为您喜欢的 flavor 名称,例如 "hardened
"),并且例如将文件 lts.x86_64.config
更改为 hardened.x86_64.config
),但对于本 Wiki,它将仅为 LTS。
内容 ./APKBUILD
需要删除补丁文件(非 sig 文件)中的 "-hardened1
":
内容 ./0006-linux-hardened-v$VERSION-hardened1.patch

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 目录)。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-lts
和 abuild 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):
- Custom_Kernel [1]
EFIStub(安全启动)(Alpine Wiki):
- UEFI_Secure_Boot [2]