Linux内核参数权限加固核心是阻止非root用户篡改,需收紧/proc/sys节点写权限、配置文件chmod 600、启用fs.protected_sysctl=2,并通过GRUB固化modules_disabled等高危参数。

Linux 权限加固中,内核参数配置不是调性能数字,而是锁住文件系统访问的底层开关。关键不在于“开什么”,而在于“谁不能改”——尤其要阻止非 root 用户通过 /proc/sys 或配置文件篡改权限逻辑、绕过访问控制。
收紧 /proc/sys 下内核参数的写权限
/proc/sys/ 是运行时内核参数的入口,多数节点默认仅 root 可写(-w-------),但部分发行版或误操作可能放宽。一旦普通用户能写入 net.ipv4.ip_forward 或 kernel.unprivileged_bpf_disabled,就等于给了攻击者开启转发、加载恶意模块或逃逸命名空间的能力。
- 用 find /proc/sys -type f -writable 2>/dev/null 扫描所有可写节点,重点关注 /proc/sys/kernel/modprobe、/proc/sys/kernel/unprivileged_bpf_disabled、/proc/sys/fs/protected_hardlinks
- 确认 procfs 挂载安全:运行 mount | grep proc,确保没有 mode=0777 或指定非 root uid/gid 的异常挂载选项
- 对已发现的宽松权限节点,不建议直接 chmod(/proc 不支持),应通过启用 fs.protected_sysctl=2 统一限制(见下文)
固化 sysctl 配置文件权限与加载机制
/etc/sysctl.conf 和 /etc/sysctl.d/*.conf 是持久化参数的源头。若普通用户可写,重启后恶意设置即生效,等同于后门。
- 执行 chmod 600 /etc/sysctl.conf 和 chmod 600 /etc/sysctl.d/*.conf,再用 chown root:root 确保属主归属
- 检查是否启用了 fs.protected_sysctl=2(Linux 4.17+):它阻止非特权用户在用户命名空间中修改 sysctl,是绕过 /proc 权限的关键防线
- 在 /etc/sysctl.conf 中添加 fs.protected_sysctl = 2,然后运行 sysctl -p 加载;验证命令:sysctl fs.protected_sysctl 输出应为 2
锁定高危参数,防止运行时覆盖
有些参数仅靠文件权限和 protected_sysctl 不够,必须从内核启动阶段固化,杜绝任何运行时修改可能。
- 对 kernel.modules_disabled=1 这类参数,在 GRUB 启动项中追加内核命令行:编辑 /etc/default/grub,修改 GRUB_CMDLINE_LINUX 行,加入 modules_disabled=1,再运行 update-grub && reboot
- 类似需固化的关键项包括:kernel.kptr_restrict=2(隐藏内核指针)、vm.unprivileged_userfaultfd=0(禁用用户态缺页处理)
- 验证方式:重启后执行 cat /proc/sys/kernel/modules_disabled,输出应为 1,且尝试 echo 0 > /proc/sys/kernel/modules_disabled 应返回 Permission denied
结合最小权限原则做持续基线校验
权限加固不是单次操作,而是纳入日常审计的基线项。每次系统更新或配置变更后,都应快速复检核心路径是否仍符合最小权限预期。
- 建立检查脚本:定期运行 ls -l /etc/sysctl.conf /etc/sysctl.d/*.conf 2>/dev/null 和 sysctl -n fs.protected_sysctl 2>/dev/null,结果不符合预期则告警
- 将 /proc/sys/ 下敏感参数值(如 fs.suid_dumpable、net.ipv4.conf.all.rp_filter)纳入配置管理工具(如 Ansible、SaltStack)的合规检查清单
- 避免“只设数值不控权限”的误区:例如设置 kernel.randomize_va_space=2 很重要,但如果 /proc/sys/kernel/randomize_va_space 节点本身被普通用户写入 0,一切防护归零


















