开启fs.protected_symlinks=1和fs.protected_hardlinks=1可有效防御本地提权类链接攻击:前者在open()时拦截粘滞位+全局可写目录中跨用户/挂载点的符号链接跟随,后者在link()时阻止非同属主或不可读文件的硬链接创建。

开启 fs.protected_symlinks=1 和 fs.protected_hardlinks=1 是防范本地提权类链接攻击最直接有效的内核级手段。它们不依赖应用层逻辑,而是在系统调用入口就拦截非法链接解析与创建行为,对 cron、systemd-tmpfiles、日志轮转等常被利用的高权限上下文尤其关键。
理解两个参数各自拦截什么
两者作用对象和触发机制不同,不能互相替代:
-
fs.protected_symlinks=1:限制
open()等系统调用“跟随”符号链接的行为。仅当符号链接所在目录同时满足「粘滞位 + 全局可写」(如/tmp、/var/tmp)时,才启用拦截——此时若进程 uid/gid 与目标文件不匹配,或不在同一挂载点,内核直接返回EACCES。 -
fs.protected_hardlinks=1:限制
link()系统调用创建硬链接的能力。只要满足任一条件(目标文件不可读、不属于当前用户、位于 sticky 目录),创建即失败。这能阻止普通用户为 root 拥有的敏感文件(如/etc/shadow)制作硬链接后通过覆盖方式篡改内容。
确认当前状态并临时启用
先检查是否已激活:
cat /proc/sys/fs/protected_symlinks # 应输出 1<br>cat /proc/sys/fs/protected_hardlinks # 应输出 1
若为 0,立即启用:
sudo sysctl -w fs.protected_symlinks=1<br>sudo sysctl -w fs.protected_hardlinks=1
这两条命令无需重启,生效即时,适用于紧急加固场景。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
写入配置实现永久生效
编辑 /etc/sysctl.conf 或更推荐使用独立配置文件(避免主配置臃肿):
echo "fs.protected_symlinks = 1" | sudo tee /etc/sysctl.d/50-link-protection.conf<br>echo "fs.protected_hardlinks = 1" | sudo tee -a /etc/sysctl.d/50-link-protection.conf
然后加载全部配置:
sudo sysctl -p /etc/sysctl.d/50-link-protection.conf
注意:sysctl -p 默认只读取 /etc/sysctl.conf,显式指定路径才能加载新文件。
验证防护是否真正起效
简单测试可快速确认:
- 在
/tmp下创建一个符号链接指向/etc/passwd,再用普通用户执行cat /tmp/link-to-passwd—— 应报错Permission denied; - 尝试用普通用户对
/etc/shadow执行ln /etc/shadow /tmp/myshadow—— 应报错Operation not permitted。
这些失败不是权限不足,而是内核主动拒绝,说明防护链已介入。










