首页/系统/Linux 内核与性能调优速查/kernel.randomize_va_space 地址随机化
sysctl 内核参数72 条

kernel.randomize_va_space 地址随机化

ASLR 级别:0 关闭、1 部分随机化、2 完全随机化(默认);属于安全基线参数。

什么是地址随机化

ASLR(Address Space Layout Randomization)让进程每次启动时的栈、mmap 区域与堆起始地址都不同,攻击者无法依赖固定地址完成漏洞利用,因此是安全基线的必查项。Linux 由 kernel.randomize_va_space 控制,分三档:0 完全关闭、1 随机化 mmap 基址/栈/VDSO、2 在 1 的基础上继续随机化堆。默认值为 2,除受控调试外都不应改小。

基本信息

参数路径kernel.randomize_va_space
取值 0关闭随机化,地址固定
取值 1随机化 mmap 基址、栈与 VDSO
取值 2在取值 1 基础上随机化堆(默认)
查看cat /proc/sys/kernel/randomize_va_space
生效范围内核全局,对所有进程生效

典型使用场景

  • 安全基线核查:确认生产主机没有被关掉 ASLR
  • 老应用兼容排查:某些依赖固定地址的 JIT、加固程序需要临时关闭
  • 漏洞复现与调试:受控环境里临时调整以复现问题
  • 解释调试现象:gdb/perf 看到的地址每次不同正是随机化的表现
  • 合规检查项:把该值与同类加固项一起纳入定期巡检

查看与验证

查看与验证
sysctl kernel.randomize_va_space            # 期望 2
cat /proc/sys/kernel/randomize_va_space      # 等价写法
# 观察同一程序两次运行时的栈地址是否变化:
cat /proc/self/maps | head -3
cat /proc/self/maps | head -3
# 说明:两次输出中的库与栈地址通常不同,即为 ASLR 生效
# 临时关闭(调试用,勿留在生产):sysctl -w kernel.randomize_va_space=0

取值与环境

场景期望取值说明
生产服务器2安全基线要求,保持默认
受控调试环境0 或 1仅限排障窗口,事后恢复
容器内读取与宿主一致该参数不可按容器独立设置
老应用报栈或地址异常先保持 2优先修应用而不是降安全等级
容器与宿主共享同一个内核参数:在容器里读到 2 或试图修改,实质影响的都是宿主内核,不存在“只给这个容器关 ASLR”的常规做法。
关闭 ASLR 会显著降低漏洞利用门槛,任何关闭动作都应有明确的排障理由与恢复时间点,不能作为长期配置存在。

易错点

  • 生产环境保持默认值 2;为老应用兼容关闭 ASLR 属于过时做法,应优先修应用
  • 容器内该值与宿主内核一致,不要把它当作容器级可调项去配置
  • 关闭后忘记恢复:排障窗口留下的临时配置会成为长期安全缺口,需要纳入变更管理
  • 把调试器里地址每次变化当成环境异常,实际上这正是随机化生效的正常表现

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/kernel.rst
  • man 8 sysctl
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌