用开源程序搭站很方便,但也意味着攻击者知道你的代码——漏洞是公开的,扫描器会全网找特定版本的站点。
这篇讲部署开源程序(CMS、面板、Docker 镜像、各类自托管服务)后必须做的安全检查。
部署前选个干净环境。财富云计算 的云服务器支持重装系统与快照;内部服务、测试环境可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)。
一、开源程序的风险特点
- 漏洞公开:CVE 一发布,扫描器几天内就开始全网扫
- 默认配置不安全:为了易用性,默认往往是弱安全
- 路径人人皆知:
/wp-admin、/admin、数据库表名都是公开的 - 插件/主题是最大风险:生态越大,第三方组件越容易出问题
- 供应链风险:来源不明的镜像、破解版主题可能带后门
数据显示:被入侵的 WordPress 站点中,超过一半是通过插件漏洞进来的,而不是核心程序。
二、部署后的 20 项检查
A. 安装阶段(5 项)
1)从官方渠道下载
# 错误做法:从不明站点下载"破解版""汉化版"
# 正确:官网或官方 GitHub
# 校验哈希
sha256sum wordpress.tar.gz
# 和官网公布的对比✅ 一定要校验哈希,尤其是从镜像站下载时。
2)删除安装脚本
rm -f /var/www/html/install.php
rm -f /var/www/html/setup.php
rm -rf /var/www/html/install/✅ 安装完立即删除,否则可能被重新执行。
3)删除示例文件和文档
rm -f /var/www/html/README.md
rm -f /var/www/html/phpinfo.php
rm -rf /var/www/html/docs/
rm -rf /var/www/html/examples/4)不用默认管理员名
✅ 不要用 admin、administrator、root、test,改成不易猜的名字。
5)强密码 + 独立密码
✅ 每个站点用不同密码,长度 16 位以上。
B. 文件权限(4 项)
6)目录和文件权限
chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;✅ 目录 755、文件 644。
7)配置文件不可被 Web 读取
chmod 600 /var/www/html/config.inc.php
# 或在 Nginx 层禁止location ~* (config|database|\.env|\.ini|\.conf)$ {
deny all;
}8)上传目录禁止执行
location ^~ /wp-content/uploads/ {
location ~ \.php$ { deny all; }
}✅ 这是防文件上传漏洞的关键防线。
9)隐藏目录不可访问
location ~ /\. {
deny all;
}✅ 防止 .git、.svn、.env 泄露。
验证:
curl -I https://example.com/.git/config # 应该 403/404
curl -I https://example.com/.env # 应该 403/404C. 后台安全(4 项)
10)改后台路径
- WordPress:用插件(WPS Hide Login)或改规则
- Typecho:改
config.inc.php的__TYPECHO_ADMIN_DIR__ - 其他程序:看是否支持
11)限制后台访问 IP(如果 IP 固定)
location ^~ /myadmin/ {
allow 你的IP;
deny all;
# 记得保留 PHP 解析
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}12)后台加二次验证(2FA)
WordPress:Google Authenticator 插件
其他:看程序是否支持,或用 Nginx 层的 HTTP Basic Auth:
apt install apache2-utils -y
htpasswd -c /etc/nginx/.htpasswd adminlocation ^~ /admin/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
# PHP 解析配置
}13)限制登录尝试
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/5s;
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
# PHP 解析
}配合 fail2ban 效果更好。
D. 更新与插件(4 项)
14)保持核心程序更新
# 关注官方安全公告
# 开启自动更新(WordPress 可在配置里开)
define('WP_AUTO_UPDATE_CORE', true);15)插件/主题最小化
✅ 装得越少越安全。不用的删掉(不只是停用,停用后文件还在,漏洞还在)。
rm -rf /var/www/html/wp-content/plugins/不用的插件16)不用盗版/破解主题插件
这是最大的后门来源。免费下载的商业主题里常藏有:
- 隐藏的管理员账号
- 外链注入(SEO 作弊)
- 后门 webshell
- 加密的恶意代码
✅ 只用官方市场或可信来源,且保持更新。
17)检查文件完整性
WordPress 自带校验:
wp core verify-checksums或自己对比官方包:
# 下载官方同版本,diff 你的目录
diff -r /tmp/wordpress-official /var/www/htmlE. 数据库(3 项)
18)表前缀不要用默认的
WordPress 默认 wp_,改掉能挡掉部分自动化 SQL 注入(安全通过 obscurity,但聊胜于无)。
19)数据库账号最小权限
-- 不要用 root
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON wpdb.* TO 'wpuser'@'localhost';
-- 不给 DROP、FILE、PROCESS20)数据库不对公网开放
ss -tulnp | grep 3306
# 应该只有 127.0.0.1:3306三、常见程序的具体检查清单
WordPress
# 1. 版本是否最新
wp core version
wp core update
# 2. 插件更新
wp plugin list
wp plugin update --all
# 3. 校验核心文件
wp core verify-checksums
# 4. 检查是否有可疑管理员
wp user list
# 5. 检查是否有后门
grep -rn "eval(base64_decode" /var/www/html/
grep -rn "system(\|exec(\|passthru(" /var/www/html/wp-content/ | headwp-config.php 加固:
// 关闭文件编辑
define('DISALLOW_FILE_EDIT', true);
// 禁止安装插件主题(可选)
define('DISALLOW_FILE_MODS', true);
// 强制 SSL
define('FORCE_SSL_ADMIN', true);
// 开启自动更新
define('WP_AUTO_UPDATE_CORE', true);Typecho
// config.inc.php
/** 改后台路径 */
define('__TYPECHO_ADMIN_DIR__', '/my-secret-admin/');# 删除安装文件
rm -f /var/www/blog/install.php
# 权限
chmod 600 /var/www/blog/config.inc.php详见《用云服务器搭建 Typecho 博客》。
宝塔面板
# 1. 改面板端口(不要用默认 8888)
bt
# 选择修改面板端口
# 2. 改面板用户名和密码
# 3. 绑定域名或限制 IP
# 4. 关闭面板的 API 对外开放
# 5. 定期更新面板(历史上有过多个严重漏洞)
# 6. 检查 phpmyadmin 是否对外可访问
# 强烈建议用完就关,或改路径 + 加 Basic AuthDocker 镜像
# 1. 只用可信来源(官方镜像、Docker Hub 官方认证)
docker pull nginx:1.25 # ✅ 官方
docker pull somebody/nginx # ⚠️ 需自行判断
# 2. 不要挂载 docker.sock(等于交出服务器)
# 危险示例:
docker run -v /var/run/docker.sock:/var/run/docker.sock ... # ⚠️
# 3. 容器不要用 --privileged
# 4. 不要用 root 跑容器进程
docker run --user 1000:1000 ...
# 5. 扫描镜像漏洞
docker scan nginx:1.25 # 需登录
# 或用 trivy
trivy image nginx:1.25各类自托管服务(Nextcloud、GitLab 等)
- 关注官方安全公告(订阅邮件列表)
- 及时升级
- 检查默认端口是否对外暴露
- 检查默认账号密码
四、定期巡检脚本
#!/bin/bash
# /usr/local/bin/appsec-check.sh
WEB=/var/www/html
echo "===== 开源程序安全检查 ====="
echo "--- 1. 安装文件是否残留 ---"
find $WEB -maxdepth 2 -name "install*.php" -o -maxdepth 2 -name "setup*.php" 2>/dev/null
echo "--- 2. 可疑后门代码 ---"
grep -rl "eval(base64_decode\|eval(gzinflate\|@eval(\|assert(base64" $WEB 2>/dev/null | head -10
echo "--- 3. 全局可写文件 ---"
find $WEB -type f -perm -0002 2>/dev/null | head -10
echo "--- 4. 最近 7 天修改的 PHP 文件 ---"
find $WEB -name "*.php" -mtime -7 2>/dev/null | head -20
echo "--- 5. 敏感文件是否可访问 ---"
for f in .git/config .env wp-config.php.bak backup.sql; do
code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/$f)
echo "$f: $code"
done
echo "--- 6. 权限检查 ---"
ls -ld $WEB
find $WEB -maxdepth 1 -type f -perm -0666 2>/dev/null
echo "--- 7. 数据库端口 ---"
ss -tuln | grep 3306chmod +x /usr/local/bin/appsec-check.sh每月跑一次,出问题时立刻跑。
五、发现被入侵的迹象
# 1. 页面有异常内容(赌博链接、暗链)
curl -s https://example.com | grep -iE "casino|bet|赌|私彩"
# 2. JS 被注入
grep -oE "script src=\"[^\"]*\"" /var/www/html/index.php
# 3. 有陌生 PHP 文件
find /var/www -name "*.php" -mtime -3
# 4. 有陌生的管理员账号
wp user list
# 5. 有异常外连
ss -tnp | grep -v "127.0.0.1"发现异常立即按入侵流程处理,见《服务器被入侵应急排查与处置》。
六、安全更新怎么跟进
| 渠道 | 适用 |
|---|---|
| 官方博客/公告 | 首选 |
| GitHub Releases / Security Advisories | 开源项目 |
| CVE 数据库 | 通用 |
| 安全邮件列表 | 重要的程序建议订阅 |
| 云厂商/安全厂商公告 | 突发漏洞 |
重要项目建议订阅官方安全邮件,重大漏洞往往在公开后几小时内就被大规模利用。
七、备份的重要性
开源程序被入侵后,最可靠的恢复方式是:
- 重装官方最新版程序
- 从干净的备份恢复数据(不是被入侵时的备份!)
- 修改所有密码
- 堵住入侵入口
所以备份策略要留多个时间点,被入侵后能回滚到入侵前的状态。详见《服务器备份与快照策略》。
八、速查清单
部署完一个开源程序后,按顺序做:
- [ ] 官方渠道下载 + 校验哈希
- [ ] 删除 install/setup 脚本
- [ ] 删除示例文件和 phpinfo
- [ ] 管理员账号不用 admin
- [ ] 强密码且独立
- [ ] 目录 755 / 文件 644
- [ ] 配置文件 600 且禁止 Web 访问
- [ ] 上传目录禁止执行 PHP
- [ ] 隐藏目录禁止访问
- [ ] 改后台路径
- [ ] 后台加 2FA 或 IP 限制
- [ ] 登录频率限制 + fail2ban
- [ ] 删掉不用的插件主题(不只停用)
- [ ] 不用盗版主题插件
- [ ] 数据库表前缀改掉
- [ ] 数据库账号最小权限
- [ ] 数据库不对外
- [ ] 开启核心自动更新
- [ ] 订阅安全公告
- [ ] 配置自动备份
用开源程序省事,但安全责任在自己。财富云计算 的云服务器提供快照能力,建议在安装配置完成后立即打一个"干净快照",之后出问题能一键回滚。内部服务、测试环境可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上),不直接暴露公网,风险更低。
相关阅读:
- 《网站常见漏洞与基础防护》
- 《服务器被入侵应急排查与处置》
- 《服务器安全基线检查清单》
- 《服务器备份与快照策略》
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]location = /xmlrpc.php { deny all; }必做事项:管理员账号别用 admin,设强密码装 Wordfence 或防暴力破解插件主题插件及时更新删掉不用的主题(wp-content/themes/ 里只留用的)每日数据库备份详细清单见WordPress 部署安全检查。六、维护命令速查# WP-CLI(命令行管理 WordPress,运维必备)[...]
2026-10-14 回复
[...]// - 推送 Key:用服务端代理转发,前端只碰自己的接口审查方法:浏览器 F12 → Sources,搜 key|token|secret,看有没有意外暴露的。五、自查清单[ ] .gitignore 覆盖 .env、.sql、.pem、*.log[ ] git log --all -- .env 历史上没提交过敏感文件[ ] 线上访问 /.git/config 返回 404[ ] www[...]
2026-10-15 回复
[...]}反向代理配置见Nginx 反向代理与多站点,端口映射前提见NAT 端口映射完全指南。管理类服务(Kuma)务必加访问控制,见服务器端口安全。五、安全四件套(容器化也要装)容器不映射管理端口到公网:Kuma、数据库这类只走 Nginx 反代 + 访问控制。镜像来源可信:只用官方/知名社区镜像,别用来路不明的镜像(镜像里可以藏挖矿程序,见开源程序部署安全检查)。Docker socket 不给普通容[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复