在Debian系统中做安全加固,kernel hardening和PAE启用是两个绑定在一起的核心操作。简单来说,kernel hardening就是通过内核参数和编译选项来关闭不必要的功能、限制内核暴露面、开启各种安全防护机制;而PAE(Physical Address Extension)则是让32位内核能够访问超过4GB物理内存的关键技术。在Debian 11/12上,如果你用的是32位系统或者需要大内存支持,PAE内核是必须的,同时配合sysctl参数调整和grub加固,能让你的服务器安全等级提升一个档次。下面直接讲怎么做。

一、什么是Kernel Hardening,为什么Debian需要它

Kernel hardening不是某一个工具,而是一套安全加固思路。Linux内核默认配置为了兼容性,打开了很多功能,比如某些调试接口、不需要的网络协议支持、允许用户空间直接访问内核内存的选项等等。这些在生产环境中都是攻击面。Debian作为服务器主流发行版,其默认内核已经做了不少安全处理,但远远不够。你需要手动调整sysctl参数、限制内核模块加载、禁用危险的系统调用、开启ASLR和栈保护等。

二、PAE内核的作用和安装方法

PAE全称Physical Address Extension,是Intel在Pentium Pro时代引入的技术。它让32位CPU通过扩展页表机制访问最多64GB物理内存。Debian的32位架构默认就提供PAE内核,但你需要确认自己装的是不是PAE版本。检查方法很简单:

uname -r

如果输出中包含"pae"字样,比如5.10.0-21-686-pae,说明你已经在用PAE内核。如果没有,需要安装:

apt update
apt install linux-image-686-pae linux-headers-686-pae

安装完成后重启系统,再次用uname -r确认。注意,PAE内核在64位系统上没有意义,64位内核本身就支持大内存,不需要PAE扩展。

三、通过sysctl进行内核参数加固

sysctl是运行时调整内核参数的工具,配置文件在/etc/sysctl.conf和/etc/sysctl.d/目录下。以下是Debian服务器推荐的安全参数,直接加到/etc/sysctl.d/99-hardening.conf中:

# 禁用IP转发,除非你做路由器
net.ipv4.ip_forward = 0

# 开启SYN Cookie防护,防止SYN Flood攻击
net.ipv4.tcp_syncookies = 1

# 禁用ICMP重定向,防止中间人攻击
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# 启用源地址验证,防止IP欺骗
net.ipv4.conf.all.rp_filter = 1

# 禁用IPv6(如果不用的话)
net.ipv6.conf.all.disable_ipv6 = 1

# 限制core dump,防止敏感信息泄露
kernel.core_uses_pid = 1
fs.suid_dumpable = 0

# 开启ASLR随机化
kernel.randomize_va_space = 2

# 限制dmesg访问,防止内核信息泄露
kernel.dmesg_restrict = 1

# 限制kernel指针暴露
kernel.kptr_restrict = 2

# 禁止未授权访问BPF
kernel.unprivileged_bpf_disabled = 1

# 限制perf事件(非root用户)
kernel.perf_event_paranoid = 3

写完之后执行sysctl -p生效。这些参数覆盖了网络层、内存管理、权限控制等多个维度,是Debian内核加固的基础。

四、GRUB引导层加固

很多人只关注运行时参数,忽略了引导层。GRUB配置文件在/etc/default/grub,这里可以从启动阶段就限制攻击面。修改以下内容:

# 禁止单用户模式启动(物理接触者可绕过密码)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

# 如果需要,可以在CMDLINE中直接加内核参数
# 比如:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash apparmor=1 security=apparmor"

# 设置GRUB密码,防止修改启动参数
# 先用grub-mkpasswd-pbkdf2生成哈希,然后写入
GRUB_PASSWORD=grub.pbkdf2.sha512.10000.xxxxx

# 隐藏GRUB菜单,不让攻击者看到可选内核
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0

修改后执行update-grub更新配置。这一步很关键,因为如果攻击者能物理接触机器或者通过控制台访问,没有GRUB密码保护的话,他可以在启动时加init=/bin/bash直接获得root权限。

五、内核模块和可加载模块限制

Debian默认允许动态加载内核模块,这是一个巨大的安全隐患。攻击者如果有一定权限,可以加载恶意模块。加固方法是禁止非必要模块自动加载,并设置模块加载需要签名验证:

# 禁止自动加载所有模块
echo "install all /bin/true" > /etc/modprobe.d/blacklist.conf

# 单独黑名单危险模块
cat >> /etc/modprobe.d/blacklist.conf << EOF
install dccp /bin/true
install sctp /bin/true
install rds /bin/true
install tipc /bin/true
install cramfs /bin/true
install freevxfs /bin/true
install jffs2 /bin/true
install hfs /bin/true
install hfsplus /bin/true
install squashfs /bin/true
install udf /bin/true
EOF

# 更新initramfs
update-initramfs -u

同时在GRUB中启用module.sig_enforce=1,强制要求所有加载的模块必须有有效签名。这在/etc/default/grub的GRUB_CMDLINE_LINUX中添加:

GRUB_CMDLINE_LINUX="module.sig_enforce=1"

六、AppArmor和SELinux的选择

Debian默认使用AppArmor作为强制访问控制框架,而不是SELinux。对于大多数Debian用户,AppArmor足够用且配置更简单。确保AppArmor已安装并启用:

apt install apparmor apparmor-utils
systemctl enable --now apparmor
aa-status

aa-status会列出当前所有加载的profile。你可以针对具体服务创建自定义profile,比如限制nginx、mysql等进程只能访问特定目录。AppArmor的优势是基于路径的访问控制,学习成本低,适合Debian生态。

七、内核编译时的硬化选项(进阶)

如果你有能力自己编译内核,可以在.config中开启更多安全选项。Debian的内核源码包在apt source linux-source中可以获取。关键的安全选项包括:

CONFIG_STRICT_KERNEL_RWX=y
CONFIG_RANDOMIZE_BASE=y
CONFIG_RANDOMIZE_MEMORY=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
CONFIG_IO_STRICT_DEVMEM=y
CONFIG_DEVMEM=y
CONFIG_SYN_COOKIES=y
CONFIG_KEYS=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y

其中CONFIG_STRICT_KERNEL_RWX强制内核代码段不可写可执行,CONFIG_RANDOMIZE_BASE让内核基地址随机化,CONFIG_MODULE_SIG_FORCE强制所有模块必须签名。这些编译选项比运行时参数更底层,防护更彻底。

八、定期维护和监控

内核加固不是一次性操作。Debian的安全更新会定期发布内核补丁,必须及时跟进:

apt update && apt upgrade -y
# 或者只更新安全相关包
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

同时建议部署auditd进行系统审计,监控内核相关的异常行为:

apt install auditd
systemctl enable --now auditd
# 添加监控规则
auditctl -w /boot -p rwxa -k boot_integrity
auditctl -w /usr/src/linux -p rwxa -k kernel_source

这样任何对引导文件和内核源码的修改都会被记录。

九、PAE内核的性能和兼容性注意事项

PAE内核在32位系统上有一个已知问题:每个进程的虚拟地址空间仍然是4GB,但内核通过页表映射可以使用更多物理内存。这意味着单个进程无法使用超过4GB内存,但系统整体可以。另外,某些老旧的闭源驱动可能不支持PAE内核,如果你遇到驱动加载失败,需要检查兼容性。Debian 12已经开始逐步淘汰32位支持,如果条件允许,迁移到64位是更好的长期方案。

十、总结

Debian的kernel hardening是一个系统工程,从引导层GRUB到运行时sysctl,从模块管理到强制访问控制,每一层都需要加固。PAE内核解决的是32位环境下的大内存需求,同时也是安全加固的基础载体。把上面提到的参数和配置落实到位,你的Debian服务器在面对内核级攻击时会有非常强的抵抗力。安全没有银弹,但层层设防一定比裸奔强得多。