严格限制内核控制接口权限可有效阻断提权路径:通过hidepid=2、debugfs权限管控、sysctl只读化、/dev节点禁用及用户命名空间限制等措施实现纵深防御。

内核控制接口(如 /proc、/sys、/dev 下的特殊节点,以及 sysctl 接口、debugfs、perf_event_paranoid 等)是用户空间与内核交互的关键通道。攻击者常利用权限宽松的接口读取敏感信息、篡改运行时参数,甚至触发漏洞实现提权。严格限制这些接口的访问权限,能直接切断多条常见提权路径。
锁定 /proc 与 /sys 的敏感子目录
/proc 和 /sys 暴露大量内核状态和可调参数,但并非所有内容都需对普通用户开放:
- 禁用非必要挂载选项:确保
/proc以hidepid=2,gid=proc挂载(例如在/etc/fstab中添加proc /proc proc defaults,hidepid=2,gid=proc 0 0),使普通用户无法查看其他用户的进程信息; - 限制
/sys/kernel/debug访问:该目录默认仅 root 可读写,若启用 debugfs,应确认其挂载权限为mode=0700,且不向 unprivileged 用户暴露; - 关闭未使用的
/sys/module/*/parameters写权限:通过chmod 444 /sys/module/*/parameters/*或内核启动参数module.sig_unenforce配合签名机制防止恶意模块参数篡改。
收紧 sysctl 和内核参数可写性
部分 sysctl 参数(如 kernel.unprivileged_userns_clone、user.max_user_namespaces)直接影响用户命名空间提权能力:
- 将高风险参数设为只读:使用
sysctl -w kernel.unprivileged_userns_clone=0并写入/etc/sysctl.conf永久生效; - 禁止非 root 修改关键参数:在
/etc/sysctl.conf中添加kernel.sysrq = 0、vm.mmap_min_addr = 65536,并执行sysctl -p加载; - 检查当前可写参数:运行
sysctl -a --no-sysctl-prefix | grep -E "(userns|unprivileged|ptrace|bpf)",对输出中值为 1 或非受限项逐个评估并加固。
约束 /dev 下的内核设备节点权限
/dev/kmsg、/dev/mem、/dev/port、/dev/bpf 等设备节点若权限过宽,可被用于信息泄露或绕过保护机制:
- 禁用危险设备:在内核启动参数中加入
iommu=force和mem=限制物理内存映射,同时通过 udev 规则移除或重设权限,例如创建/etc/udev/rules.d/99-dev-mem.rules:KERNEL=="mem", MODE="000"; - 限制 eBPF 权限:设置
/proc/sys/net/core/bpf_jit_enable为 0,并将/proc/sys/kernel/unprivileged_bpf_disabled设为 1(需内核 ≥ 5.8); - 管控
/dev/kmsg:默认仅 root 可读,确认其权限为c600,避免日志中泄露内核地址等敏感信息。
启用命名空间隔离与特权降级
用户命名空间虽是容器基础,但也常被用于提权链起点。限制其滥用可大幅提高门槛:
- 禁用非特权用户命名空间:设置
kernel.unprivileged_userns_clone=0(主流发行版已默认关闭); - 限制单用户可创建的命名空间数量:通过
user.max_user_namespaces=0彻底禁用,或设为极小值(如 1); - 配合 seccomp 过滤:对关键服务(如 systemd、dbus)应用 seccomp BPF 策略,显式拒绝
unshare、clone(带CLONE_NEWUSER)、setns等系统调用。











