我是一名织梦CMS安全运维工程师,多年扑在DedeCMS的前线,天天和各类漏洞、挂马、搬家、域名迁移打交道,我把那些踩过的坑、填过的雷,全部摊开来写一遍,看完这篇文章,你也能自己搞定织梦CMS的定时生成计划任务、后台安全加固、挂马清理、整站搬家以及数据库迁移,照着做,不出错。
场景:后台生成计划任务报错,怀疑被挂马了
某天,你登录织梦CMS后台,点击“系统” -> “计划任务管理” -> “定时生成”,结果页面卡死,或者提示“文件写入失败”,更诡异的是,网站首页跳转到莫名其妙的广告页,或者生成出的HTML里多了一段外链JS脚本,你慌了,这八成是被挂马了。
织梦CMS定时生成计划任务,从安全运维到整站迁移的硬核操作指南
第一步:立即断网+备份
别急着删文件,先做两件事:第一,用FTP或服务器管理面板,把整个网站目录打包下载到本地,第二,进phpMyAdmin或命令行,导出数据库,备份是救命稻草,万一清理出错,还能回滚。
第二步:定位挂马文件
挂马最常见的藏身地:
/data目录下的config.cache.inc.php、common.inc.php等缓存文件/include下的common.inc.php、dedeinc.php/templets模板文件里的<!--#include file=""-->或eval语句/plus下的feedback.php、search.php等动态文件/uploads目录,尤其注意userup子目录,经常被上传webshell
用文本搜索工具(如Notepad++、Sublime的“在文件夹中查找”功能)搜以下特征字符串:
eval(base64_decode(
gzinflate(
@include
preg_replace
assert(
把搜索到的疑似挂马文件先备份到另一个文件夹,然后删除,注意:删除后,立即修改该文件所在的目录权限为755或更低,防止二次写入。
第三步:清理数据库
很多挂马是写进数据库的,比如在 #@__arctype 表里的 typedir 字段加了跳转JS,或者在 #@__addonarticle 的 body 字段里插了恶意链接,执行SQL:
SELECT * FROM `#@__arctype` WHERE `typedir` LIKE '%script%'; SELECT * FROM `#@__addonarticle` WHERE `body` LIKE '%http://bad.com%';
找到后,用 UPDATE 语句把恶意内容替换为空,检查 #@__sys_task 表里的计划任务记录,看看有没有异常的定时任务。
第四步:恢复定时生成功能
清理完挂马后,进入后台“系统” -> “系统基本参数” -> “性能选项”,把“计划任务执行方式”改为“手动”,然后去“计划任务管理”里,选择“定时生成首页”或“定时生成栏目”,点击“执行”,测试是否能成功生成。
如果还报错,把 /data/tplcache 和 /data/tplcache2 目录清空,重新生成模板缓存,同时检查 /include/taglib 目录下的标签库文件,尤其是自定义标签,看是否被篡改。
后台路径直接暴露,被暴力破解怎么办?
默认后台路径是 /dede,黑客用工具扫个几小时,弱口令就被破了,改后台路径是第一步。
修改后台路径方法
- 在FTP里,把
/dede文件夹重命名为一个复杂的、无规律的词,admin_secret_2024 - 打开
/data/config.cache.inc.php,找到:$cfg_cmspath = '/'; $cfg_admin_path = '/dede';
把第二行改为:
$cfg_admin_path = '/admin_secret_2024';
- 打开根目录下的
index.php和/include/common.inc.php,搜索代码段:if(file_exists(DEDEDATA.'/config.cache.inc.php')) { ... }将其中的
$cfg_admin_path相关逻辑调整为指向新路径(这一步实际可以跳过,因为上一步已全局改好,但为保险,搜一下是否有硬编码的/dede字段)。 - 修改后,进入新后台地址登录,如果404,检查
.htaccess或nginx.conf中是否有重写规则指向了旧的/dede。
额外安全设置
- 在后台“系统” -> “系统基本参数” -> “安全选项”里,开启“验证码登录”、“记录登录失败次数”、“限制IP登录”。
- 删除
/install目录,若需要保留,则改为install_off并加密码访问。 - 把
/data目录权限设为755,/uploads设为755,/include设为755。
整站搬家,域名换了,数据替换技巧
搬家是高频需求,尤其换域名时,数据库里还有大量绝对路径的链接要替换。
整站搬家完整流程
-
打包旧站
在旧服务器上,用tar -czf oldsite.tar.gz /website或直接用面板打包,下载到本地。 -
导出数据库
mysqldump -u用户名 -p密码 数据库名 > backup.sql
-
新服务器部署
上传oldsite.tar.gz到新服务器,解压,新建同名数据库,导入backup.sql:mysql -u用户名 -p密码 数据库名 < backup.sql
-
修改配置文件
打开/data/common.inc.php,修改:$cfg_dbhost = '新数据库地址'; $cfg_dbname = '新数据库名'; $cfg_dbuser = '新数据库用户'; $cfg_dbpwd = '新数据库密码'; $cfg_dbprefix = 'dede_'; // 如果改过前缀,这里保持一致
域名更换后数据替换技巧
数据库中的文章内容、栏目链接、附件路径里都可能有旧域名,用SQL批量替换:
UPDATE `#@__addonarticle` SET body = REPLACE(body, '旧域名.com', '新域名.com'); UPDATE `#@__archives` SET description = REPLACE(description, '旧域名.com', '新域名.com'); UPDATE `#@__arctype` SET typedir = REPLACE(typedir, '旧域名.com', '新域名.com'); UPDATE `#@__sys_task` SET taskurl = REPLACE(taskurl, '旧域名.com', '新域名.com');
注意:如果文章内容存储在 #@__addonarticle 的 body 字段,或者 #@__archives 的 description 字段,都要跑一遍,同时检查 #@__member 表里的 userinfo 字段、#@__feedback 里的 msg 字段。
数据库备份和恢复操作
备份
- 用phpMyAdmin导出
勾选“添加DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT 语句”,确保导出后恢复时不会报“表已存在”。 - 用命令行(推荐,更有掌控感):
mysqldump -u用户名 -p密码 --opt --routines --triggers 数据库名 > backup_$(date +%Y%m%d).sql
--opt包含优化选项,--routines导出存储过程,--triggers导出触发器,织梦很少用触发器,但带上无害。
恢复
- 清空旧表(慎用,先确认新数据没问题):
DROP DATABASE 数据库名; CREATE DATABASE 数据库名 CHARACTER SET utf8;
- 导入:
mysql -u用户名 -p密码 数据库名 < backup.sql
- 如果遇到字符集乱码,在导入前执行:
SET NAMES utf8;
配置定时生成计划任务,再也不用手动点
清理完挂马、搬完家、改好了域名,是时候让系统自动生成了。
操作步骤
- 进入后台“系统” -> “计划任务管理”。
- 点击“添加新任务”,任务名称填“定时生成首页”,任务类型选“生成HTML”,执行文件路径填:
/plus/task.php?action=makeall&type=index也可以添加多个任务,如:
- 生成首页:
/plus/task.php?action=makeall&type=index - 生成栏目:
/plus/task.php?action=makeall&type=category - 生成文章:
/plus/task.php?action=makeall&type=article
- 生成首页:
- 设置执行时间,如凌晨3:00,频率选择“每天”。
- 保存后,确保服务器定时任务(cron)能访问这个地址,通常配置为:
curl http://你的域名/plus/task.php(实际为带参数的那个URL)
或者用PHP cli执行:
php /网站根目录/plus/task.php(同理,需带参数)
- 测试:手动点击“执行”按钮,看是否正常生成,成功后,再到服务器上跑一次cron任务验证。
注意事项
- 如果计划任务不执行,检查
plus/task.php是否有写入权限,以及data/目录下是否有task_log.txt文件记录错误。 - 建议把
plus/task.php文件权限设为644,避免被外部随意触发。
从挂马清理到后台路径修改,从整站搬家到域名替换,再到数据库备份和定时生成计划任务的配置,每一步都有章可循,织梦CMS虽然版本老旧,但只要做好安全基线和日常维护,依然可以稳定运行,定期检查 /data 和 /uploads 目录,删掉可疑文件;数据库里敏感字段要加密或替换;计划任务一定要配置正确,否则生成会卡死,照着本文操作,就算你不是专业运维,也能把织梦CMS操练得稳如老狗。



发表评论