DedeCMS 织梦目录权限安全设置说明文档
概述:为什么目录权限如此重要?
DedeCMS 是一个基于 PHP + MySQL 开源的内容管理系统,其工作原理是通过 PHP 脚本处理用户请求,读写服务器上的文件和数据库,如果目录权限设置不当,就可能被恶意攻击者利用,进行上传木马、篡改网页、窃取数据等操作。

(图片来源网络,侵删)
核心安全原则:
- 最小权限原则:只授予程序运行所必需的最小权限,能不写的目录就不给写权限,能不执行的目录就不给执行权限。
- 职责分离:Web 用户(通常是
www-data或apache)和系统管理员用户的职责应分离,避免使用 root 用户运行 Web 服务。 - 纵深防御:目录权限是 Web 安全的第一道防线,需结合其他安全措施(如文件校验、SQL注入防护等)共同构建安全体系。
准备工作:确定 Web 运行用户
在设置权限之前,您必须知道您的 Web 服务器是以哪个系统用户身份来运行脚本的,这通常是:
- Nginx/Apache (Linux):
www-data - Apache (Linux/CentOS):
apache - Windows (IIS):
IUSR
如何查看?
在 Linux 服务器上,可以创建一个 info.php 文件,内容为 <?php phpinfo(); ?>,然后在浏览器中访问该文件,在 "Loaded Configuration File" 或 "Environment" 变量中查找 USER 或 Apache 相关的用户名。
核心目录权限详解与设置建议
以下目录结构基于 DedeCMS 默认安装路径 /dedecms/ 进行说明,请根据您的实际安装路径进行调整。

(图片来源网络,侵删)
1. 根目录 (/var/www/html/dedecms/)
- 目录作用: 网站主目录,包含所有程序文件。
- 安全风险: 如果此目录具有可写权限,攻击者可能上传恶意脚本并直接执行。
- 权限设置:
- 目录:
755或750 - 文件:
644 - 执行命令:
# 设置目录权限 find /path/to/dedecms/ -type d -exec chmod 755 {} \; # 设置文件权限 find /path/to/dedecms/ -type f -exec chmod 644 {} \;
- 目录:
- 说明:
755(rwxr-xr-x): 所有者可读、写、执行;组用户和其他用户可读、执行,这是标准的目录权限。644(rw-r--r--): 所有者可读、写;组用户和其他用户只读,这是标准的文件权限。- 特别注意: 根目录下的
index.php、install目录(安装完成后)、data目录等需要特殊处理,详见下文。
2. /data/ 目录
- 目录作用: 核心敏感目录,存放配置文件 (
config.php)、缓存、Session 文件、数据备份等,这是攻击者首要攻击的目标。 - 安全风险:
config.php可被写入,网站数据库密码等核心信息将完全暴露。 - 权限设置:
- 目录:
755 - 文件:
config.php:644(仅允许 Web 服务器读取)- 其他缓存文件 (如
cache_*,sessions*):644
- 执行命令:
# 设置目录权限 chmod 755 /path/to/dedecms/data/ # 设置关键配置文件权限 chmod 644 /path/to/dedecms/data/config.php # 设置其他文件权限 find /path/to/dedecms/data/ -type f -exec chmod 644 {} \;
- 目录:
- 最佳实践:
- 如果您的服务器支持,可以将此目录的所有者修改为
root或其他非 Web 运行用户,然后通过 ACL (Access Control Lists) 授权给 Web 运行用户只读权限,这能提供最高级别的保护。 - 定期检查
config.php文件是否被篡改。
- 如果您的服务器支持,可以将此目录的所有者修改为
3. /uploads/ 目录及其子目录
- 目录作用: 用户文件上传目录,如文章附件、图片、会员头像等。
- 安全风险: 这是最高危的目录,如果权限不当,攻击者可以上传
.php、.phtml等 Web 脚本,并通过浏览器直接访问,从而获取服务器控制权。 - 权限设置:
- 目录:
755 - 文件:
644 - 执行命令:
# 设置目录权限 find /path/to/dedecms/uploads/ -type d -exec chmod 755 {} \; # 设置文件权限 find /path/to/dedecms/uploads/ -type f -exec chmod 644 {} \;
- 目录:
- 最佳实践:
- 禁止执行脚本: 这是至关重要的一步,在
httpd.conf(Apache) 或nginx.conf(Nginx) 中,针对此目录进行配置,禁止解析 PHP 等脚本。- Apache 示例 (在虚拟主机配置中添加):
<Directory "/path/to/dedecms/uploads"> php_flag engine off # 或者更严格地,禁止所有脚本的执行 <FilesMatch "\.(php|php3|php4|php5|phtml|pl|py|jsp|asp|sh|cgi)$"> Order Deny,Allow Deny from all </FilesMatch> </Directory> - Nginx 示例 (在 server 块中添加):
location ~* ^/uploads/.*\.(php|php5|phtml)$ { deny all; } # 或者直接禁用整个目录的PHP执行 location ~* ^/uploads/ { location ~* .*\.(php|php5)?$ { deny all; } }
- Apache 示例 (在虚拟主机配置中添加):
- 定期清理: 定期检查
uploads目录,删除可疑的非图片、非文档文件。
- 禁止执行脚本: 这是至关重要的一步,在
4. /templets/ 目录
- 目录作用: 存放网站模板文件(.htm)。
- 安全风险: 模板文件本身是静态的,但如果目录可写,攻击者可能篡改模板,进行挂马或钓鱼攻击。
- 权限设置:
- 目录:
755 - 文件:
644 - 执行命令:
find /path/to/dedecms/templets/ -type d -exec chmod 755 {} \; find /path/to/dedecms/templets/ -type f -exec chmod 644 {} \;
- 目录:
- 说明: DedeCMS 在生成静态页面时需要写入此目录下的缓存文件,因此需要写权限,但如果您的网站是纯动态运行,可以尝试将此目录设为只读。
5. /special/ 目录
- 目录作用: 存放专题页面,通常是静态 HTML 文件。
- 安全风险: 与
templets类似,可写则可能被篡改。 - 权限设置:
- 目录:
755 - 文件:
644 - 执行命令:
find /path/to/dedecms/special/ -type d -exec chmod 755 {} \; find /path/to/dedecms/special/ -type f -exec chmod 644 {} \;
- 目录:
- 说明: DedeCMS 在生成专题时会写入此目录,需要写权限,生成完毕后,可以尝试将权限收紧。
6. /a/ 目录
- 目录作用: 存放生成的文章静态 HTML 文件。
- 安全风险: 与
special类似。 - 权限设置:
- 目录:
755 - 文件:
644 - 执行命令:
find /path/to/dedecms/a/ -type d -exec chmod 755 {} \; find /path/to/dedecms/a/ -type f -exec chmod 644 {} \;
- 目录:
- 说明: 这是文章内容最终展示的地方,通常不需要写权限,除非您开启了“仅动态”模式,如果网站是静态化运行的,此目录可以设为只读。
7. /include/ 目录
- 目录作用: 核心功能库目录,包含
.php类库文件。 - 安全风险: 包含大量可执行代码,如果被上传恶意文件或直接访问,可能导致核心逻辑被篡改。
- 权限设置:
- 目录:
755 - 文件:
644 - 执行命令:
find /path/to/dedecms/include/ -type d -exec chmod 755 {} \; find /path/to/dedecms/include/ -type f -exec chmod 644 {} \;
- 目录:
- 最佳实践:
- 在服务器配置中,禁止直接访问
include目录下的非入口文件,但 DedeCMS 的结构使得这一点较难实现,因此保持严格的文件权限(644)是关键。
- 在服务器配置中,禁止直接访问
8. /install/ 目录
- 目录作用: 安装程序目录。
- 安全风险: 安装程序是网站的后门,安装完成后必须删除或锁定,否则任何人都可以重新安装并覆盖您的网站。
- 权限设置:
- 安装完成后:
- 最佳选择: 彻底删除此目录。
- 次选方案: 将目录名修改为随机字符串,或将其所有者修改为非 Web 用户,并移除所有用户的执行和写入权限。
- 安装完成后:
- 说明: 这是最容易被忽视但极其重要的安全步骤。
一键设置脚本 (Linux)
以下是一个 Bash 脚本示例,可以快速应用上述大部分权限设置。请在使用前务必确认您的安装路径,并先备份网站!
#!/bin/bash
# ==============================================================================
# DedeCMS 安全权限设置脚本
# 使用前请务必修改 DEDE_PATH 为您的实际安装路径
# ==============================================================================
# !!! 重要:请修改为您的 DedeCMS 安装路径 !!!
DEDE_PATH="/var/www/html/dedecms"
# 检查路径是否存在
if [ ! -d "$DEDE_PATH" ]; then
echo "错误:路径 $DEDE_PATH 不存在!请修改脚本。"
exit 1
fi
echo "开始为 $DEDE_PATH 设置安全权限..."
# 1. 设置所有目录为 755,所有文件为 644
echo "步骤 1: 设置基本目录和文件权限..."
find "$DEDE_PATH" -type d -exec chmod 755 {} \;
find "$DEDE_PATH" -type f -exec chmod 644 {} \;
# 2. 特殊目录处理
echo "步骤 2: 处理特殊目录..."
# /data/ 目录
echo " -> 设置 /data/ 目录..."
chmod 755 "$DEDE_PATH/data"
# 将 config.php 设为仅可读
if [ -f "$DEDE_PATH/data/config.php" ]; then
chmod 644 "$DEDE_PATH/data/config.php"
fi
# /uploads/ 目录
echo " -> 设置 /uploads/ 目录..."
chmod 755 "$DEDE_PATH/uploads"
# 尝试将上传目录内的所有文件设为不可执行,即使扩展名是.php
# 这是一种额外的保护,但主要依靠 Web 服务器配置
find "$DEDE_PATH/uploads" -type f -name "*.php" -exec chmod 644 {} \;
# /templets/ 目录
echo " -> 设置 /templets/ 目录..."
chmod 755 "$DEDE_PATH/templets"
# /special/ 目录
echo " -> 设置 /special/ 目录..."
chmod 755 "$DEDE_PATH/special"
# /a/ 目录 (文章静态目录)
echo " -> 设置 /a/ 目录..."
chmod 755 "$DEDE_PATH/a"
# /include/ 目录
echo " -> 设置 /include/ 目录..."
chmod 755 "$DEDE_PATH/include"
# 3. 处理 install 目录
echo "步骤 3: 检查 /install/ 目录..."
if [ -d "$DEDE_PATH/install" ]; then
echo " -> 警告: /install/ 目录仍然存在!为了安全,建议您删除它。"
echo " 您可以执行: rm -rf $DEDE_PATH/install"
else
echo " -> /install/ 目录已不存在,安全。"
fi
echo "----------------------------------------------------------------------"
echo "权限设置完成!"
echo "----------------------------------------------------------------------"
echo "重要提醒:"
echo "1. 请确保您已在 Web 服务器配置中禁止了 /uploads/ 目录的 PHP 执行。"
echo "2. 请定期检查网站文件,特别是 /data/config.php 是否被篡改。"
echo "3. 保持 DedeCMS 程序和插件为最新版本。"
echo "----------------------------------------------------------------------"
总结与补充
| 目录 | 权限 | 安全说明 |
|---|---|---|
| 根目录 | 755 / 644 |
基础权限,禁止根目录可写 |
/data/ |
755 / 644 |
核心敏感区,config.php 必须不可写 |
/uploads/ |
755 / 644 |
高危区,必须配合 Web 服务器禁止脚本执行 |
/templets/ |
755 / 644 |
模板目录,生成静态时需写权限 |
/special/ |
755 / 644 |
专题目录,生成静态时需写权限 |
/a/ |
755 / 644 |
文章静态目录,静态化运行时建议只读 |
/include/ |
755 / 644 |
核心库目录,保持文件不可写 |
/install/ |
删除或锁定 | 安装完成后必须移除 |
补充安全建议:
- 定期更新: 及时关注 DedeCMS 官方安全公告,升级到最新版本。
- 使用安全插件: 安装官方或信誉良好的安全插件,用于文件校验、登录防护等。
- 数据库权限: 确保 DedeCMS 连接数据库的用户仅拥有对
dede_相关表的SELECT,INSERT,UPDATE,DELETE权限,禁止DROP,CREATE,ALTER等危险操作。 - 服务器安全: 保持操作系统、Web 服务器、PHP、MySQL 等软件为最新版本,并做好防火墙配置。
通过遵循以上设置和建议,可以极大地提高您的 DedeCMS 网站的安全性,有效抵御大部分常见的 Web 攻击。
