-links 1 不适合排查代码注入,因其仅表示文件无额外硬链接,属绝大多数正常文件的默认状态;Webshell等恶意文件天然满足该条件,并不构成异常指标。

find -links 1 本身不能直接用于排查代码注入隐患,它只反映文件的硬链接数量,和代码是否被注入没有因果关系。
为什么 -links 1 不适合查代码注入
硬链接数为 1 表示该文件在当前文件系统中只有一个目录项指向它(即没有其他硬链接),这是绝大多数普通文件的默认状态。Webshell、恶意脚本、被篡改的 PHP/JS 文件,只要没被手动创建硬链接,天然就是 -links 1 —— 这属于正常现象,不是异常指标。
真正可疑的是:
- 文件名异常(如 1.php、.shell.php、xxz.php)
- 文件路径异常(如出现在 /var/www/html/ 下但不属于业务代码)
- 文件内容含危险函数(如 eval(、system(、base64_decode(、preg_replace(/e))
- 文件最近被修改(-mtime -7)、属主异常(非部署用户)、权限宽松(如 777)
更有效的排查方向
应组合使用语义+行为+上下文线索,例如:
-
按可疑命名找文件:
find /var/www -type f \( -name "*.php" -o -name "*.jsp" -o -name "*.asp" \) -iname "*shell*" -o -name "1.*" -o -name ".*\.php" -
按内容特征扫描:
find /var/www -type f -name "*.php" -exec grep -l "eval\|system\|passthru\|assert\|base64_decode" {} \; -
查近期新增或修改的脚本文件:
find /var/www -type f \( -name "*.php" -o -name "*.py" -o -name "*.sh" \) -mtime -3 -
查非预期属主/权限的可执行脚本:
find /var/www -type f -name "*.php" ! -user www-data ! -user apache -ls(根据实际 Web 用户调整)
补充说明:什么时候 -links 才有参考价值?
仅在极少数特定场景下可辅助判断,例如:
- 某些“不死马”会通过硬链接绕过删除(删了原文件,链接仍存在并可访问),此时发现多个同 inode 的文件(find /var/www -inum XXX)比单纯看 -links 1 更有意义;
- 或排查日志轮转异常时,发现本该被 logrotate 链接替换的日志文件仍为 -links 1,可能说明轮转未执行——但这和代码注入无关。
排查注入,核心是盯住文件来源、内容、权限、时间、路径这五个维度,而不是硬链接数。


















