启用KPTI、CFI、Stack Protector等内核保护机制;2. 配置sysctl参数禁用ICMP重定向、启用ASLR等;3. 使用SElinux、appArmor、Yama强化访问控制;4. 最小化内核暴露面,禁用非必要模块与调试接口;5. 定期更新内核并持续监控安全公告。

Linux内核加固是提升系统安全性的关键环节,尤其在服务器、云环境和高安全要求场景中尤为重要。通过合理配置和限制内核行为,可以有效减少攻击面,防止提权、缓冲区溢出等常见漏洞利用。以下是实用的加固技巧与操作步骤。
启用内核运行时保护机制
现代Linux内核提供了多种内置的安全特性,应在编译或运行时开启以增强防护能力。
- Kernel Page table Isolation (KPTI):防止Meltdown类漏洞,确保用户空间无法访问内核内存页,可通过启动参数nopti禁用,建议保持启用(默认开启)。
- Control Flow Integrity (CFI):在支持的架构上启用,可阻止ROP/JOP等控制流劫持攻击。
- Stack Protector:开启CONFIG_STACKPROTECTOR_STRONG,增强对栈溢出的检测能力。
- restrict Module Loading:使用modules_disabled=1启动参数或写入/sys/module/kernel/parameters/modules_disabled,禁止动态加载模块,防止恶意ko文件注入。
强化内核参数配置(sysctl)
通过调整/etc/sysctl.conf或/etc/sysctl.d/下的配置文件,限制潜在风险行为。
- 禁用ICMP重定向:net.ipv4.conf.all.accept_redirects=0
- 防止IP伪造:net.ipv4.conf.all.rp_filter=1
- 关闭源路由:net.ipv4.conf.all.accept_source_route=0
- 限制核心转储信息泄露:fs.suid_dumpable=0
- 随机化虚拟地址空间:kernel.randomize_va_space=2(完全ASLR)
配置后执行sysctl -p生效。
使用安全模块强化访问控制
Linux安全模块(LSM)如SELinux、AppArmor能深度控制进程行为和资源访问。
- SELinux:在RHEL/centos系统中默认启用,确保处于enforcing模式,定期检查审计日志(/var/log/audit/audit.log)并更新策略。
- AppArmor:ubuntu/debian常用,为关键服务(如docker、mysql)配置简洁的访问规则。
- Yama LSM:启用ptrace限制,防止未授权进程调试,需加载lsm=yama内核参数,并设置kernel.yama.ptrace_scope=1。
最小化内核暴露面
减少不必要的功能和接口暴露,降低被利用风险。
- 移除不使用的内核模块:使用lsmod查看已加载模块,通过黑名单(/etc/modprobe.d/blacklist.conf)禁用如usb-storage、firewire-core等非必要模块。
- 关闭调试接口:确保kernel.debug_locks=0,禁用/proc/sysrq-trigger(设kernel.sysrq=0)。
- 限制BPF JIT:对于启用BPF的系统,设置net.core.bpf_jit_enable=0或启用kallsyms限制(kernel.kptr_restrict=2)以防地址泄露。
基本上就这些。内核加固需要结合实际运行环境平衡安全性与兼容性,定期更新内核版本并关注CVE公告同样重要。安全是一个持续过程,不是一次性配置。


