为什么 uploads 目录权限如此重要?
uploads 目录是网站存放所有用户上传文件的地方,比如文章图片、软件附件、会员头像等。

-
权限过高(如 777)的风险:
- 被写入木马:如果权限设置为
777,意味着服务器上的任何用户(包括黑客)都可以对这个目录进行写入、修改、删除操作,黑客可以利用网站的其他漏洞(如SQL注入、编辑器漏洞等)向uploads目录上传一个恶意的.php文件(木马)。 - 执行恶意代码:一旦木马文件被上传到
uploads目录,并且该目录的配置允许执行PHP脚本,黑客就可以通过浏览器访问这个木马文件,从而获得网站的最高控制权,可以窃取数据、篡改网页、植入后门等。
- 被写入木马:如果权限设置为
-
权限过低的风险:
- 网站功能无法使用:如果权限设置得过低(如
600或644),Web服务器(如Apache、Nginx)的运行用户(通常是www-data或apache)将没有写入权限,这将导致:- 无法上传图片或附件。
- 无法生成缩略图。
- 无法更新缓存文件。
- 网站后台的很多功能会报错。
- 网站功能无法使用:如果权限设置得过低(如
核心原则:uploads 目录需要“可写入”,但“不可执行”,也就是说,Web服务器需要有写入文件的权限,但不能在这个目录里直接运行PHP等脚本。
正确的 uploads 目录权限设置
目录权限
对于 uploads 目录本身,最推荐的权限是 755。

755的含义:- 所有者:读、写、执行 (
rwx) - 所属组:读、执行 (
r-x) - 其他人:读、执行 (
r-x)
- 所有者:读、写、执行 (
这个权限意味着:
- 所有者(通常是网站管理员):可以完全控制目录。
- Web服务器用户:可以进入目录(执行权限
x),并读取目录列表(读权限r),从而可以写入文件,但它不能在这个目录下直接创建或删除文件(因为文件权限是独立的)。 - 其他用户:只能看到目录存在,但无法进入或修改。
如何设置: 在Linux服务器上,通过SSH连接,执行以下命令:
# 将 uploads 目录及其所有子目录和文件的权限都设置为 755
find /path/to/your/dede/uploads -type d -exec chmod 755 {} \;
/path/to/your/dede/uploads 请替换成你网站中 uploads 目录的实际路径。
目录下文件的权限
对于 uploads 目录下的所有文件,最推荐的权限是 644。
644的含义:- 所有者:读、写 (
rw-) - 所属组:读 (
r--) - 其他人:读 (
r--)
- 所有者:读、写 (
这个权限意味着:
- Web服务器用户:可以读取和写入文件(因为所有者是
www-data,或者通过chown命令将文件所有者设置为Web服务器用户)。 - 任何人都不能执行:文件没有
x(执行) 权限,这从根本上杜绝了上传的.php文件被服务器执行的可能性。
如何设置:
# 将 uploads 目录及其所有子目录下的文件权限都设置为 644
find /path/to/your/dede/uploads -type f -exec chmod 644 {} \;
一个更安全的做法:禁止执行PHP脚本
仅仅设置文件权限为 644 是不够的,因为Web服务器的配置可能会覆盖文件权限,最彻底、最安全的方法是通过 .htaccess 文件来明确禁止在 uploads 目录及其子目录中执行任何脚本。
在你的 uploads 目录下创建或编辑一个名为 .htaccess 的文件,并添加以下内容:
# 禁止执行PHP、Perl、Python等脚本
<Files "*.php">
Order deny,allow
Deny from all
</Files>
<Files "*.pl">
Order deny,allow
Deny from all
</Files>
<Files "*.py">
Order deny,allow
Deny from all
</Files>
# 禁止访问 .htaccess 文件本身
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
这个 .htaccess 文件的作用是:
即使黑客上传了一个名为 shell.php 的木马文件,当黑客试图通过 http://yourdomain.com/uploads/shell.php 访问它时,Apache服务器会读取这个 .htaccess 文件,发现规则是禁止访问 .php 文件,从而直接返回 403 Forbidden 错误,木马无法被激活。
总结与操作步骤
为了确保你的织梦网站 uploads 目录安全,请按以下步骤操作:
-
SSH登录服务器:使用你的SSH工具(如PuTTY、Xshell)登录到你的Linux服务器。
-
找到网站根目录:定位到你织梦网站的根目录,
/www/wwwroot/yourdomain.com。 -
设置目录权限:执行以下命令,将
uploads目录及其子目录的权限设为755。chmod -R 755 /www/wwwroot/yourdomain.com/uploads
-
设置文件权限:执行以下命令,将
uploads目录及其子目录下的所有文件权限设为644。find /www/wwwroot/yourdomain.com/uploads -type f -exec chmod 644 {} \; -
创建
.htaccess文件:- 进入
uploads目录:cd /www/wwwroot/yourdomain.com/uploads - 创建
.htaccess文件:touch .htaccess - 编辑文件内容(使用
vi或nano编辑器):vi .htaccess
- 将上面提供的
.htaccess代码粘贴进去,保存并退出。
- 进入
-
检查所有者:
- 确保网站目录和文件的所有者是正确的Web服务器用户(通常是
www-data),如果不确定,可以执行以下命令:chown -R www-data:www-data /www/wwwroot/yourdomain.com
注意:此命令会将整个网站目录的所有权都更改,请确保操作正确。
- 确保网站目录和文件的所有者是正确的Web服务器用户(通常是
-
最终验证:
- 登录织梦网站后台,尝试上传一张图片或一个附件,确保功能正常。
- 尝试在浏览器中访问
uploads目录下的一个.php文件(你可以自己临时创建一个测试),确认返回的是403错误。
通过以上步骤,你的织梦 uploads 目录就能在保证功能正常的前提下,最大限度地提升安全性,有效防止木马上传和执行。
