⭐ 推荐:社区规则条款 V1.0

安装完 CMS 后必须做的安全加固步骤有哪些?

chinaz
chinaz 归队站长新人站长
发布于 2026-10-14 17:41 ·0 浏览 ·3 回复
内容摘要

安装完CMS后应先完成改默认账号与后台入口、设文件权限、锁定更新通道、上HTTPS与安全响应头、加固数据库、配好备份和登录防护六项加固再上线,可挡九成以上自动化扫描和批量爆破。

安装完 CMS 后必须做的安全加固步骤有哪些?,本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-1967.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 3

liulian
liulian 归队站长新人站长 1楼 2026-10-14 17:49

这 6 项的顺序是对的,但建议在最前面补一步:先做一次能验证恢复的全量备份(含数据库),再动手改权限和入口——因为前两步最容易把自己锁在门外。

权限这块有几个细节帖子里没提。chown -R www-data 之后,你后续如果用 root 通过 SFTP 传文件,属主会变回 root,结果是后台装插件、传图全失败,得重新修一遍属主;保险做法是给自己的账号加进 www-data 组并把目录设成 775/664,而不是每次都 root 直传。另外 chmod 600 wp-config.php 对部分面板(宝塔、cPanel 这类)会让后台改配置失效,遇到报错就退到 640 并确认属组正确。

登录防护上,光改后台入口不够,/wp-login.php 和 xmlrpc.php 仍是爆破重灾区,尤其 xmlrpc 的 system.multicall 能绕过很多限速插件。建议直接禁用 xmlrpc,并关掉 /wp-json/wp/v2/users 的用户枚举;Nginx 前面有 CDN 或反代时,记得配 real_ip_header 和 set_real_ip_from,否则 fail2ban 封的是 CDN 的 IP,等于白封。2FA 启用后一定要把恢复码离线存好,插件冲突或换手机时它就是唯一退路。

你帖子里被截断的响应头部分,补一句:HSTS 先只写 max-age,稳定运行一段时间再加 includeSubDomains,preload 别急着上——一旦提交 preload 列表,回退周期以月计,子域名有 HTTP 服务的话会直接全站打不开。

延伸一个最常被忽略的:加固完记得在 wp-config.php 里加 define('DISALLOW_FILE_EDIT', true),堵住后台直接编辑主题/插件文件这条提权路,比再装一个安全插件实在。

lqyyzz
lqyyzz 观望站长 #1517 2楼 2026-10-14 18:05
liulian:这 6 项的顺序是对的,但建议在最前面补一步:先做一次能验证恢复的全量备份(含数据库),再动手改权限和入口——因为前两步最容易把自己锁在门外。 权限这块有几个…

这几条我基本都踩过,尤其属主和 real_ip 那两条,属于「配置看着全对、实际完全不生效」的典型。在此基础上补几个容易反噬的细节。

权限 775/664 别全站放开,只给 uploads、cache、upgrade 这几个真正需要写的目录,其余保持 755/644。否则等于把可写权限从上传目录扩到了全站,一个图片马或插件漏洞就能直接改核心文件,前面那条 deny all 也没意义了。备份同理:文件别落在 Web 根目录下,或者 Nginx 补一条拦 .sql|.zip|.tar|.gz 的 location,否则备份本身就是最大的泄露源。至于「能不能恢复」,光看备份文件生成成功不算数,把 sql 导进一个临时库跑一遍 mysql < backup.sql 才知道,这一步偷懒的人最多。

set_real_ip_from 只填 CDN 的回源 IP 段,千万别图省事写 0.0.0.0/0——那等于任何人伪造一个 XFF 头就能冒充任意 IP,fail2ban 不但封不准,还能被拿来反向封掉真实用户。用户枚举除了 /wp-json/wp/v2/users,还有 ?author=1 的 301 跳转会把用户名暴露在 Location 里,可以一并 rewrite 掉。

两个提醒:DISALLOW_FILE_MODS 别顺手加,它会把插件安装和自动更新一起禁掉,除非你全走手动部署;禁 xmlrpc 之后 WP 官方 App 和 Jetpack 会受影响,用的话得放行白名单。

最后一句和你的建议呼应:切换新账号、启用 2FA 之前,一定先用无痕窗口把新账号登录、TOTP 和恢复码各验证一遍,确认无误再删旧账号,这是唯一能避免「把自己锁在门外」的保险。

域名注册
域名注册 版主归队站长新人站长 👑年卡会员 #1519 3楼 2026-10-14 18:26
lqyyzz:这几条我基本都踩过,尤其属主和 real_ip 那两条,属于「配置看着全对、实际完全不生效」的典型。在此基础上补几个容易反噬的细节。 权限 775/664 别…

这几条补充基本把「配置生效」和「配置看着生效」的差别说透了,我只在两三个地方再往下补一层。

权限那块还能再狠一点。只给 uploads/cache/upgrade 写权限是对的,但更彻底的是给 uploads 单独挂个 noexec,nosuid 的挂载点,没条件就用 open_basedir 把 PHP 能触达的范围圈死在站点目录内。还有个隐藏坑:很多一键包默认把源码 chown 给 www-data,而 PHP-FPM 又跑在 www-data 下,这种情况下 755 也拦不住进程改自己的代码,理想状态是 Web 用户对代码目录只读、只对 uploads 可写。

real_ip 我补一句,CDN 的回源段是会变的,Cloudflare 得定期同步官方列表,同时 real_ip_header 要跟 CDN 实际传的头对齐(CF 是 CF-Connecting-IP),并开 real_ip_recursive on。fail2ban 那边记得 filter 里取的是 real IP 字段,否则日志里还是回源 IP,封的永远不是你想要的。

DISALLOW_FILE_MODS 的定位我很赞同,真正该无脑加的是 DISALLOW_FILE_EDIT——它只关后台的主题/插件编辑器,不影响自动更新,风险收益比高得多。用户枚举也不只那两个点,feed 和 sitemap 里的 author 字段、oembed 接口同样能捞出登录名,上线前用无痕窗口挨个访问一遍最省事。

最后接着你「别把自己锁在门外」说一句:2FA 恢复码要存到密码管理器而不是服务器本地,如果用插件做的 2FA,先确认 wp user meta delete <id> _two_factor_enabled 能走 wp-cli 重置,再删旧账号。