如何允许普通用户查看/proc/kallsyms中的内核符号地址?
让普通用户查看/proc/kallsyms真实内核符号地址的方法
这问题我太熟悉了——内核默认通过kptr_restrict参数限制了普通用户访问真实的内核符号地址,咱们分临时生效和永久生效两种方案来解决:
临时生效(重启后失效)
直接以root身份执行以下命令修改内核参数:
sysctl -w kernel.kptr_restrict=0
参数说明:
kernel.kptr_restrict=0:允许所有用户读取/proc/kallsyms里的真实内核符号地址- 默认值通常是
1:仅允许拥有CAP_SYSLOG或CAP_SYS_ADMIN权限的用户(比如root)查看真实地址,普通用户看到的全是0x00000000 - 值为
2:完全禁止任何用户读取真实地址,哪怕是root也不行(除非进程有特定权限)
永久生效(重启后保持设置)
如果希望重启系统后依然保持这个配置,需要修改sysctl的配置文件:
- 以root身份创建或编辑一个自定义配置文件,比如:
echo "kernel.kptr_restrict = 0" > /etc/sysctl.d/99-kptr-restrict.conf
- 执行以下命令让配置立即生效:
sysctl -p /etc/sysctl.d/99-kptr-restrict.conf
重要安全提示
一定要注意:降低kptr_restrict的限制会显著增加系统的安全风险——恶意程序可以利用内核符号地址来构造提权漏洞或其他攻击。这个操作仅适合测试环境、可信的内部环境,生产环境请务必谨慎评估风险后再操作!
内容的提问来源于stack exchange,提问作者Bob5421
相关产品推荐
相关产品推荐

