13 10 月 2026

用开源程序搭站很方便,但也意味着攻击者知道你的代码——漏洞是公开的,扫描器会全网找特定版本的站点。

这篇讲部署开源程序(CMS、面板、Docker 镜像、各类自托管服务)后必须做的安全检查。

部署前选个干净环境。财富云计算 的云服务器支持重装系统与快照;内部服务、测试环境可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)。

一、开源程序的风险特点

  1. 漏洞公开:CVE 一发布,扫描器几天内就开始全网扫
  2. 默认配置不安全:为了易用性,默认往往是弱安全
  3. 路径人人皆知:/wp-admin、/admin、数据库表名都是公开的
  4. 插件/主题是最大风险:生态越大,第三方组件越容易出问题
  5. 供应链风险:来源不明的镜像、破解版主题可能带后门

数据显示:被入侵的 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/404

C. 后台安全(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 admin
location ^~ /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/html

E. 数据库(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、PROCESS

20)数据库不对公网开放

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/ | head

wp-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 Auth

Docker 镜像

# 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 3306
chmod +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 数据库通用
安全邮件列表重要的程序建议订阅
云厂商/安全厂商公告突发漏洞

重要项目建议订阅官方安全邮件,重大漏洞往往在公开后几小时内就被大规模利用。


七、备份的重要性

开源程序被入侵后,最可靠的恢复方式是:

  1. 重装官方最新版程序
  2. 从干净的备份恢复数据(不是被入侵时的备份!)
  3. 修改所有密码
  4. 堵住入侵入口

所以备份策略要留多个时间点,被入侵后能回滚到入侵前的状态。详见《服务器备份与快照策略》。


八、速查清单

部署完一个开源程序后,按顺序做:

  • [ ] 官方渠道下载 + 校验哈希
  • [ ] 删除 install/setup 脚本
  • [ ] 删除示例文件和 phpinfo
  • [ ] 管理员账号不用 admin
  • [ ] 强密码且独立
  • [ ] 目录 755 / 文件 644
  • [ ] 配置文件 600 且禁止 Web 访问
  • [ ] 上传目录禁止执行 PHP
  • [ ] 隐藏目录禁止访问
  • [ ] 改后台路径
  • [ ] 后台加 2FA 或 IP 限制
  • [ ] 登录频率限制 + fail2ban
  • [ ] 删掉不用的插件主题(不只停用)
  • [ ] 不用盗版主题插件
  • [ ] 数据库表前缀改掉
  • [ ] 数据库账号最小权限
  • [ ] 数据库不对外
  • [ ] 开启核心自动更新
  • [ ] 订阅安全公告
  • [ ] 配置自动备份

用开源程序省事,但安全责任在自己。财富云计算 的云服务器提供快照能力,建议在安装配置完成后立即打一个"干净快照",之后出问题能一键回滚。内部服务、测试环境可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上),不直接暴露公网,风险更低。

相关阅读:

  • 《网站常见漏洞与基础防护》
  • 《服务器被入侵应急排查与处置》
  • 《服务器安全基线检查清单》
  • 《服务器备份与快照策略》
延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:DDoS 攻击基础认知与防护:带宽被打满时该怎么应对
  2. 下一篇:Shell 脚本编写入门:把重复操作变成一条命令
发表评论 4