船说 CMS 如何做好网站安全防护
学完这篇,你能把一台跑着船说 CMS 的服务器从「默认配置、谁都能试两下」收紧到「改完这几处、常见扫描器基本绕着走」。
下面按从外到内的顺序拆成六步,每步都给出具体入口和命令,照做即可。
第一步:把后台入口和管理员账号换掉
这一步要解决的是「攻击者连门都找不到」。船说 CMS 默认后台入口是根目录下的 admin.php(部分版本是 admin/ 目录或安装时自定义的名字)。
改法:把根目录的 admin.php 重命名成不容易猜的名字,例如 manage_7f3a.php。
cd /www/wwwroot/你的站点目录
mv admin.php manage_7f3a.php
改完后用新地址登录一次确认正常,再删掉旧文件。后台里登录后进「系统 → 管理员管理」,新建一个管理员(用户名别用 admin、root、test),密码 12 位以上,然后删除默认的 admin 账号。
接着进「系统设置 → 安全设置」:
- 开启登录验证码
- 登录失败 5 次锁定 15 分钟
- 如有「后台 IP 白名单」选项,把你自己的固定 IP 填进去
注意:改后台文件名之前先确认站点没有别的地方硬编码引用了
admin.php,比如某些采集脚本或定时任务,否则会报 404。
数据库也别用 root。给船说 CMS 单独建一个库用户,只授权那一个库:
CREATE USER 'cs_user'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON cs_db.* TO 'cs_user'@'localhost';
FLUSH PRIVILEGES;
同时确认 3306 端口没有对公网开放(云服务器安全组里删掉 3306 的入站规则)。
第二步:修正文件和目录权限
这一步要解决的是「万一被上传了木马,它也执行不了、改不了别的文件」。
原则只有三条:目录 755、文件 644、可写目录单独列出来给 755,绝对不要 777。
chown -R www:www /www/wwwroot/你的站点目录
find /www/wwwroot/你的站点目录 -type d -exec chmod 755 {} \;
find /www/wwwroot/你的站点目录 -type f -exec chmod 644 {} \;
chmod -R 755 /www/wwwroot/你的站点目录/uploads
chmod -R 755 /www/wwwroot/你的站点目录/runtime
可写目录名不同版本略有差异,一般是 uploads、runtime、data、cache 这几个,你可以在后台「系统 → 环境检测」里看到需要写权限的清单。
然后在 Web 服务器层面禁止上传目录执行 PHP。
Nginx 在站点配置的 server {} 里加:
location ~* ^/uploads/.*\.(php|php5|phtml|phar)$ {
deny all;
}
Apache 则在 uploads/ 目录下放一个 .htaccess:
<FilesMatch "\.(php|php5|phtml|phar)$">
Require all denied
</FilesMatch>
第三步:收紧 PHP 本身
这一步要解决的是「即使有代码漏洞,也跑不了系统命令」。
编辑 php.ini,把这几项设成:
disable_functions = exec,passthru,shell_exec,system,popen,proc_open,pcntl_exec,putenv,assert
display_errors = Off
expose_php = Off
open_basedir = /www/wwwroot/你的站点目录:/tmp
改完重启 PHP-FPM:
systemctl restart php-fpm
注意:
disable_functions里不要顺手把file_get_contents、curl_exec也禁掉,船说 CMS 的采集和远程图片下载功能会直接失效。改完记得点一遍后台的采集、上传、生成静态页,确认没报错。
第四步:管住上传和编辑器
这一步要解决的是「通过图片上传、富文本编辑器塞进 PHP 文件」这条最常见的入侵路径。
后台进「系统设置 → 上传设置」:
- 允许的扩展名只留
jpg,jpeg,png,gif,webp,ico - 禁止
php,php5,phtml,asp,aspx,jsp,sh,htaccess - 单文件大小限制调到 2MB 以内(除非你确实要传大附件)
富文本编辑器(一般是 UEditor 或百度编辑器)要单独检查一遍,进它的配置界面,把「允许的上传文件类型」里的非图片项全部删掉,并把「在线文件管理」功能关掉——这个功能等于给攻击者一个网页版文件管理器。
后台如果有「在线模板编辑」或「在线修改文件」的入口,不用就关掉,或者把模板目录设为只读(644 + 属主改成 root)。
第五步:关掉不用的功能模块
这一步要解决的是「攻击面太大」。船说 CMS 自带的会员中心、留言板、采集模块、友情链接申请,用不到的就在「系统 → 模块管理」里全部关闭。每少一个对外接口,就少一批能被利用的入口。
同时养成看官方更新的习惯:后台「系统 → 版本信息」里会显示当前版本号,发现官方发了安全补丁就尽快升,别拖。
第六步:开日志、做备份、定期体检
这一步要解决的是「出事之后能查、能恢复」。
- 后台「系统设置 → 日志设置」里开启操作日志,并把日志目录指向站点根目录之外的位置
- 加一条定时任务,每天凌晨备份数据库:
0 3 * * * mysqldump -ucs_user -p'你的密码' cs_db | gzip > /backup/db_$(date +\%F).sql.gz
- 备份文件不要放在网站目录里,否则被人下载走等于数据库裸奔
- 如果用的是宝塔面板,装上「Nginx 防火墙」或「网站防火墙」插件,开启 CC 防护和 SQL 注入拦截
- 全站上 HTTPS,并在 Nginx 里加
add_header Strict-Transport-Security "max-age=31536000" always;
体检频率建议每月一次:进「系统 → 文件校验」(部分版本叫「安全检测」),对比核心文件的修改时间,发现 uploads 目录里有 .php 文件立刻删掉并改数据库密码。
小结
- 改掉默认后台入口文件名,换掉 admin 账号和弱密码,登录加验证码和失败锁定
- 目录 755、文件 644,可写目录单独给权限,永远不用 777
- 上传目录禁止执行 PHP,php.ini 禁用高危函数并设 open_basedir
- 上传白名单只留图片格式,关掉编辑器的在线文件管理功能
- 不用的会员、留言、采集模块直接关闭,及时打官方补丁
- 每天自动备份数据库到站点目录之外,定期做文件校验和日志检查
原文链接:https://www.gj0.com/thread-927.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。