在 CentOS(以及其他 Linux 发行版)中,**软链接(Symbolic Link,符号链接)**本身是一个很常用的功能,但如果使用不当,也会带来一些风险和隐患。下面从几个常见角度说明:
软链接可以指向任意文件或目录,包括:
/etc/passwd/etc/shadow如果程序以较高权限运行,并盲目跟随软链接,可能导致:
典型场景:Web 服务、定时任务、备份脚本误跟软链接。
在 /tmp 等共享目录中,攻击者可:
示例:
ln -s /etc/passwd /tmp/victim
若程序以 root 写入 /tmp/victim,实际修改的是 /etc/passwd。
软链接可以指向自己或形成环路:
ln -s a b
ln -s b a
后果:
ls -R 卡死目标被删除后,软链接依然存在:
ln -s /data/file /link
rm /data/file
风险:
软链接可以跨文件系统、跨挂载点,导致:
常见于:
/app -> /app_v1
若切换版本时操作不当:
systemd 对软链接较敏感,例如:
/etc/systemd/system/multi-user.target.wants/xxx.serviceCentOS 默认启用 SELinux:
错误示例:
ln -s /var/www/html /home/user/www
可能被 SELinux 拒绝访问。
✅ 避免在高权限程序中跟随用户可控软链接
✅ 对 /tmp、/var/tmp 使用:
mount -o nosuid,nodev,noexec
✅ 使用 realpath 检查最终路径
✅ 备份时加参数忽略软链接(如 rsync -L 或 --no-links)
✅ 定期清理悬空链接
软链接本身无害,但“盲目跟随 + 高权限 + 不可信路径”是主要风险来源。
如果你有具体使用场景(如 Nginx、Cron、Docker、备份脚本),我可以针对性分析风险。