装完 CMS 后最该做的不是发第一篇文章,而是先完成 6 项加固:改默认账号与后台入口、设定文件权限、锁定更新通道、上 HTTPS 与安全响应头、加固数据库、配好备份和登录防护。做完这 6 项再上线,能把 90% 以上的自动化扫描和批量爆破挡在门外。
安装完 CMS 第一件事做什么?先处理默认账号和后台入口
结论:默认管理员用户名(admin、root、administrator)和默认后台路径是自动化脚本扫描的第一目标,必须在发布内容前改掉。
具体做法是三步。第一,新建一个用户名不含 "admin" 的管理员账号,用新账号登录后删除或降权旧账号,昵称也不要暴露登录名(WordPress 会默认用昵称做作者页 URL)。第二,密码长度至少 16 位,用密码管理器生成,不用字典词加数字的组合。第三,开启两步验证(TOTP 类型,即 Google Authenticator 这类 6 位动态码),这一步比改密码更有效,因为被拖库的密码对 2FA 无效。
后台入口可以通过插件或 Nginx 规则改路径,但要清楚:隐藏入口只是降低扫描噪音,不能替代 2FA 和强密码。
文件权限应该设成多少?
结论:目录 755、文件 644、配置文件 600,属主设为 Web 运行用户(如 www-data),任何情况下都不要出现 777。
命令层面可以这样执行:
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chmod 600 /var/www/html/wp-config.php
chown -R www-data:www-data /var/www/html
同时关掉 PHP 的危险函数,在 php.ini 中设置:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source
并把 expose_php = Off,避免响应头泄露 PHP 版本。
另外要禁止上传目录执行 PHP,Nginx 加一条:
location ~* /(uploads|files)/.*\.php$ { deny all; }
这条规则能直接掐断大部分「传个图片马再访问」的提权路径。
CMS 核心和插件要多久更新一次?
结论:核心安全补丁建议开启自动更新,插件和主题每月检查一次,装而不用的一律删除。
WordPress 从 3.7 起支持小版本自动更新,5.6 起支持大版本自动更新,建议至少开启小版本自动更新。插件是第三方代码,漏洞占比最高,判断标准很简单:最近 12 个月没有更新、安装量低于 1 万、作者已停止维护,这三类直接换掉。
停用插件不等于安全,未删除的插件文件仍可能被直接访问,所以不用的要删除而不只是停用。主题同理,默认主题之外保留一个备用即可。
HTTPS 和安全响应头怎么配?
结论:全站 HTTPS 是底线,再补 4 个响应头可以挡掉点击劫持、MIME 嗅探和降级攻击。
证书用 Let's Encrypt 免费签发,certbot 支持自动续期(证书有效期 90 天,certbot 默认提前 30 天续)。强制跳转 301 从 HTTP 到 HTTPS。然后在 Nginx 加:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
HSTS 的 max-age 建议先用 300 秒测试,确认全站没有混合内容后再调到 31536000(一年)。
数据库和登录爆破怎么加固?
结论:数据库用户只授权单个库、只允许本机连接;登录失败 5 次锁定 15 分钟,能挡掉绝大多数暴力破解。
建站时改掉默认表前缀(wp_ 改成随机 6-8 位),并单独建库用户,只授予该库的 SELECT/INSERT/UPDATE/DELETE 权限,不给 DROP 和 GRANT。MySQL 的 bind-address 设为 127.0.0.1,禁止 3306 对外网开放。
登录防护用 fail2ban 的 WordPress jail,配置 maxretry = 3、bantime = 3600,即失败 3 次封 IP 一小时。云服务器上再叠加安全组的 22 端口限源,能减少 80% 以上的 SSH 爆破日志噪音。
备份和日志要怎么做?
结论:按 3-2-1 原则做备份——3 份副本、2 种介质、1 份异地,数据库每日一次、整站每周一次,并每季度做一次恢复演练。
只备份没验证过恢复的备份等于没有备份。日志方面至少保留 Web 访问日志和登录日志 30 天,定期查 404 突增和 /wp-login.php 的高频访问,这两个信号通常出现在入侵之前。
把这 6 项做完,CMS 的安全基线就算立住了。顺序上优先做账号、权限和备份三项,因为它们投入最小、收益最大;HTTPS 和安全头属于一次性配置,配完长期有效;更新和日志是持续动作,需要每月检查一次。