开启 randomize_va_space 是 linux 内核提供的 aslr 安全机制,取值 0/1/2 分别表示禁用、基本启用、完全启用;推荐设为 2,可通过 /proc/sys/kernel/randomize_va_space 临时修改或 sysctl 配置永久生效,并需通过 /proc/self/maps 或 checksec 验证实际效果。

开启 randomize_va_space 是 Linux 内核提供的一项基础且关键的安全机制,用于启用地址空间布局随机化(ASLR),增加攻击者预测内存地址的难度。默认情况下,现代发行版通常已启用该选项,但确认和调优仍有必要。
确认当前状态与取值含义
该参数位于 /proc/sys/kernel/randomize_va_space,取值为 0、1 或 2:
- 0:完全禁用 ASLR(不推荐,仅用于调试)
- 1:启用基本随机化(栈、共享库、mmap 基址等,但不包括 heap)
- 2:完全启用(含 heap 随机化,推荐生产环境使用)
查看当前值:
cat /proc/sys/kernel/randomize_va_space临时启用(重启失效)
若当前值非 2,可立即生效调整:
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space该操作无需重启内核或系统,但仅在本次运行中有效。
永久生效配置
编辑或创建 sysctl 配置文件,确保重启后持续生效:
echo 'kernel.randomize_va_space = 2' | sudo tee -a /etc/sysctl.d/10-security.conf然后加载配置:
sudo sysctl --system注意:部分系统(如某些容器环境或精简内核)可能未编译 ASLR 支持,需确认内核配置中 CONFIG_COMPAT_BRK 未强制关闭随机化,且 CONFIG_RANDOMIZE_BASE 已启用。
验证是否真正生效
仅看 sysctl 值不够,还需实测进程地址变化:
- 多次运行 cat /proc/self/maps | head -n 3,观察栈([stack])、vdso、libc 等起始地址是否变动
- 用 checksec --file /bin/bash(需安装 checksec)查看 ASLR 标记是否为 “Yes”
- 对动态链接程序,执行 ldd /bin/ls 多次,比对 libc 路径后的地址是否不同
若地址始终固定,需排查 SELinux/AppArmor 策略限制、启动参数(如 norandmaps)、或容器运行时(如 Docker 默认继承宿主设置,但某些安全配置可能覆盖)。











