服务器检查与部署侧整改
新吴区非Docker · Nginx + PHP-FPM · 暂不切换业务代码
原则:第1~6步只读检查;变量未确认、nginx -t失败、发现root级持久化或回滚点不可用时立即停止。禁止rm -rf、chmod -R 777和在受影响目录直接git pull。
阶段总览
身份/磁盘 → Web外证据目录 → Nginx vhost → 项目路径 → PHP-FPM → 当前制品 → 安全备份 → 临时503 → 永久Nginx规则 → 隔离WebShell → 扫描持久化 → 备份治理 → 权限/PHP检查 → 凭据清单 → 候选发布包 → Go/No-Go
现在只做最小四步
- 备份真实Nginx vhost。
- 在ThinkPHP/PHP include之前增加上传/下载临时503、上传脚本永久404和敏感文件永久404。
- nginx -t成功后reload,验证503/404和合法图片200。
- 把报告WebShell和两个公开SQL移到Web外隔离目录。
location ~* ^/p/common/upload/?$ { return 503; }
location ~* ^/p/download/zip/?$ { return 503; }
location ~* ^/static/upload/.*\.(php[0-9]*|phtml|phar)(/|$) { return 404; }
location ~* \.(sql|bak|backup|dump|env|ini|log)$ { return 404; }
代码上线并验证后,只删除两条临时503;永久保留两条404。其余完整检查仅在发现异常时展开。
先确认四个变量
SITE_ROOT | 实际项目根;不能是/、/www或/www/wwwroot |
VHOST_FILE | nginx -T显示的真实vhost文件 |
PHP_FPM_SERVICE | 真实PHP-FPM systemd服务名 |
PHP_USER/PHP_GROUP | PHP-FPM工作进程用户/组 |
上线前必须修改
临时止血
上传和下载接口暂时503;通知电子菜牌和附件下载短时不可用。
Nginx永久规则
上传PHP/PHTML/PHAR 404;敏感后缀和隐藏文件404;合法图片保持200。
恶意文件
WebShell先stat/SHA再移出Web目录隔离;扫描危险扩展、内容伪装和持久化。
数据库备份
Web根SQL隔离;停止/修改仍写Web根的任务;迁移非Web路径。
权限
代码PHP只读、配置0640、仅runtime/log/upload必要可写;禁止整站777。
候选发布包
可信环境生成1219480d7发布包,Web外存放,校验SHA,暂不切换。
Nginx门禁
| 临时 | /p/common/upload、/p/download/zip返回503,代码上线后移除 |
| 永久 | /static/upload/*.php*、phtml、phar及PATH_INFO返回404 |
| 敏感文件 | sql/bak/backup/dump/env/ini/log和隐藏文件返回404 |
| 验证 | 先nginx -t,再reload,再nginx -T回读;合法图片必须200 |
安全停止条件
- 目标server块/root不唯一或项目路径无法确认。
- nginx -t失败。
- 发现未知root cron/systemd/SSH key/auto_prepend_file或系统级进程。
- WebShell隔离失败或上传目录仍有未知PHP。
- 备份任务仍向Web根输出。
- 配置/回滚备份不完整或位于Web目录。
- 数据库/Redis共享消费者或轮换负责人未确认。
- 候选发布包SHA、PHP语法或回滚决策人未确认。
上线前Go/No-Go
| 必须通过 | 证据 |
|---|---|
| 路径、服务、用户明确 | readlink/nginx -T/systemctl/ps |
| 止血和Nginx规则生效 | 503、404、合法图片200 |
| 恶意文件和持久化可解释 | 隔离记录、扫描清单 |
| 公开备份清零且任务改路径 | find结果、cron/timer配置 |
| 权限不宽泛 | namei/find world-writable结果 |
| 可信候选包可回滚 | SHA、清单、备份、决策人 |
交付输出
完成上述步骤后,按Markdown手册第19节填写16项脱敏回报,再决定是否进入代码上线。完整命令、预期结果和停止条件以Markdown真源为准。