WordPress 的 wp-config.php 文件中保存了重要的配置信息,包括 MySql 数据库用户名、密码及连接地址等信息。一旦该文件中的内容泄露,网站所有的管理权限将暴露。本文以一个真实的被入侵案例来阐述如何防范此类风险。
内容
- 案例解析
- 防范措施
- 一、WordPress 文件权限设置
- 二、关闭 MySql 远程连接权限
案例解析
今日,本站某会员的网站被黑,向站长帮寻求帮助。经过分析 MySql 日志发现,数据库被人篡改,并添加了一个拥有超级管理员权限的新用户,然后在网站页面中加入了恶意代码。
据此推断应该是数据库密码被泄露。查看 wp-config.php 文件权限,果然设置为755。PS:755 权限的意思是:所有者、用户组、公共用户均可读、可执行,所有者可写入,如下表:
所有者 | 用户组 | 公共组 |
---|---|---|
读取√ | 读取√ | 读取√ |
写入√ | 写入× | 写入× |
执行√ | 执行√ | 执行√ |
这样的权限设置非常不安全,很容易被人获取文件中的信息。(具体的攻击方法这里不介绍,以防别有用心者利用。)
攻击者取得 wp-config.php 文件中的 MySql 连接信息后,可轻松修改网站数据库内容。包括创建管理员权限的用户,或者直接修改默认超级管理员的密码。
值得庆幸的是这位站长设置了数据库自动备份,在恢复了数据库且重新上传了一遍WordPress文件及主题插件文件后,网站恢复了正常。
防范措施
通过以上案例,至少有两处是网站需要整改的。
一、WordPress 文件权限设置
wp-config.php建议设置成440权限,也就是去掉公共组的读取与执行权限,另外去掉所有者的执行权限。如下示例:
所有者 | 用户组 | 公共组 |
---|---|---|
读取√ | 读取√ | 读取× |
写入× | 写入× | 写入× |
执行× | 执行× | 执行× |
这样设置之后,如果要修改该文件,需要将所有者的写入权限暂时开启,权限变成640,完成修改后再改回440权限。
除了 wp-config.php 文件之外,WordPress 其它的文件均建议设置成644,即取消所有用户的执行权限。但目录得保持755或750权限,否则会导致 WordPress 无法上传附件、插件与主题无法安装/更新,甚至网站运行出错等问题。
如果安装了服务器管理面板的,可参照以上建议在面板中设置相应的目录及文件权限。如未使用管理面板,可以参考chmod命令教程进行设置。
注意任何情况下,均不要将目录或文件设置成777权限(全开放)。
二、关闭 MySql 远程连接权限
如果 MySql 与网站属同一服务器,则强烈建议关闭远程连接权限。如果不在同一服务器,也应仅授权网站服务器IP对 MySql 的连接权限。
不熟悉 MySql指令的用户,可借助宝塔面板或phpMyAdmin等工具进行设置。