web目录.htaccess与index.php删除后自动生成无法修改故障求助
Linux站点恶意文件自动重建问题排查清理步骤
1. 先清掉驻留的保活进程
文件删了自动重建、已删除的lock360.php还在持续轮询读文件,说明后台有常驻恶意进程在做保活,必须先处理进程再动文件,不然删多少都会被重写:
- 执行
ps aux列出所有运行中进程,重点筛选命令行带PHP路径、不属于正常php-fpm/apache/nginx服务的异常进程,记录进程PID和对应的可执行文件路径,直接用kill -9 对应PID强制杀掉。 - 全路径排查定时任务:依次检查
/var/spool/cron/下所有用户的crontab配置、/etc/crontab全局定时配置、/etc/cron.d///etc/cron.hourly///etc/cron.daily/下的所有脚本,删掉所有带base64解码、curl/wget拉取远程内容、指向web目录下php文件的异常任务。 - 检查系统自启服务:遍历
/etc/systemd/system/、/usr/lib/systemd/system/目录,找名字随机、启动命令指向web目录的异常服务,执行systemctl stop 服务名停服后删除对应service文件,再跑systemctl daemon-reload重载配置。 - 重启php-fpm、web服务,清空内存中残留的恶意执行上下文。
2. 解锁并删除所有恶意文件
当前碰到的.htaccess、index.php无法修改删除,基本是被加了文件系统特殊属性或者被进程占用:
- 对两个无法操作的文件执行
lsattr 文件绝对路径,如果输出带i(不可修改删除)、a(仅可追加)标记,先执行chattr -ia 文件绝对路径移除特殊属性,再执行删除。 - 如果移除属性后还是删不掉,用
lsof 文件绝对路径查占用文件的进程ID,杀掉对应进程后再删。 - 执行全盘搜索,把.htaccess里放行的所有可疑PHP文件全部清理:包括lock360.php、wp-l0gin.php、wp-the1me.php、wp-scr1pts.php、wp-admin.php,不要只删web根目录下的副本,用
find / -name "lock360.php" -o -name "wp-l0gin.php" -o -name "wp-the1me.php" -o -name "wp-scr1pts.php" -o -name "wp-admin.php"扫全磁盘,找到的文件全部删除。
3. 清理恶意代码并加固
- 不要手动修改被注入代码的index.php,直接用对应程序的官方原版文件覆盖(如果是WordPress站点就下载同版本的官方安装包,覆盖所有核心文件),避免漏过多轮编码混淆的后门片段。
- 扫描web目录下所有php文件,重点排查带
eval、assert、base64_decode、gzinflate、远程地址拉取特征的可疑代码,优先检查最近1个月内修改时间异常的文件。 - 重置web目录权限:目录权限统一设为755,文件权限统一设为644,web服务运行用户仅对上传、缓存目录开放写权限,上传目录单独配置规则禁止解析php文件。
- 清理完.htaccess里的恶意放行规则后,可以给正常的.htaccess、核心index.php文件加上
chattr +i只读属性,避免被再次篡改。
4. 清理效果验证
- 持续观察1-2小时,确认index.php、.htaccess不会被自动重建,PHP错误日志中不再出现lock360.php相关的轮询报错。
- 再次检查进程列表、crontab、自启服务列表,确认没有异常项复现。
- 访问站点确认业务功能正常,访问之前的可疑后门文件路径返回404,无恶意跳转。
注意:如果清理后还是出现文件被篡改的情况,要排查是否存在其他未找到的后门,或者服务器已经被提权,需要检查系统命令是否被替换、有没有新增的异常系统用户。
内容的提问来源于stack exchange,提问作者UMAR-MOBITSOLUTIONS
相关产品推荐
相关产品推荐

