Linux内核安全性需从sysctl参数、内核编译选项、LSM框架及攻击面缩减四层面协同加固:禁用模块加载、强化ASLR与日志限制;启用Yama/SELinux/AppArmor等LSM;关闭非必要驱动与协议。

Linux 内核的安全性评估参数不是单一开关,而是分散在内核配置、运行时 sysctl 设置、SELinux/AppArmor 策略、以及模块加载控制等多个层面。调整需明确目标(如防提权、减攻击面、加固网络),避免盲目修改导致系统不稳定。
1. 通过 sysctl 调整运行时内核安全参数
sysctl 控制大量与安全相关的内核行为,配置文件通常为 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf:
-
禁止内核模块动态加载:防止恶意模块注入
kernel.modules_disabled = 1(需在启动早期设置,设为1后无法再加载/卸载任何模块) -
限制进程对内核的直接访问:
kernel.kptr_restrict = 2(隐藏内核符号地址,阻碍利用 infoleak)kernel.dmesg_restrict = 1(普通用户无法读取 dmesg 日志,防敏感信息泄露) -
强化 ASLR(地址空间布局随机化):
kernel.randomize_va_space = 2(默认通常已是2,确认即可;0=关闭,1=部分随机,2=完全随机) -
网络层防护增强:
net.ipv4.conf.all.log_martians = 1(记录伪造源地址包)net.ipv4.icmp_echo_ignore_broadcasts = 1(防 Smurf 攻击)net.ipv4.tcp_syncookies = 1(启用 SYN Cookie 防 SYN Flood)
2. 编译或启用内核安全配置选项
若使用自定义内核,应在 make menuconfig 中启用关键安全特性(位于 Security options 菜单下):
- CONFIG_SECURITY_YAMA:启用 Yama LSM(提供 ptrace、exec restrictions 等轻量级保护)
- CONFIG_SECURITY_SELINUX 或 CONFIG_SECURITY_APPARMOR:启用强制访问控制框架
- CONFIG_HARDENED_USERCOPY、CONFIG_FORTIFY_SOURCE、CONFIG_INIT_STACK_ALL_ZERO:缓解内存越界与栈破坏类漏洞
- CONFIG_RANDOMIZE_BASE(KASLR)、CONFIG_STACKPROTECTOR_STRONG:提升堆栈与内核镜像随机化/保护强度
启用后需重新编译安装内核并更新引导配置。
3. 启用并配置 LSM(Linux Security Modules)
LSM 是内核级访问控制机制,主流发行版默认集成 SELinux(RHEL/CentOS/Fedora)或 AppArmor(Ubuntu/Debian):
- 检查当前启用的 LSM:
cat /sys/kernel/security/lsm(输出类似 yama,selinux,bpf) - SELinux:确保 /etc/selinux/config 中
SELINUX=enforcing,策略级别设为targeted或更严格策略 - AppArmor:确认
aa-status显示已加载且 profile 处于 enforce 模式;可为关键服务(如 nginx、sshd)编写或启用限制性 profile
4. 减少攻击面:禁用非必要内核功能
关闭未使用的子系统可降低潜在漏洞暴露面:
- 禁用 FireWire、PCMCIA、ACPI video、旧蓝牙协议栈等老旧/高危驱动(通过
modprobe.blacklist=xxx加入内核启动参数) - 禁用 IPv6 若实际不用:
net.ipv6.conf.all.disable_ipv6 = 1和net.ipv6.conf.default.disable_ipv6 = 1 - 限制 USB 存储设备自动挂载:
echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf
每次修改后建议执行 sudo sysctl -p(加载 sysctl 配置)并验证效果,同时注意备份原配置、测试重启兼容性。


















