博主头像
mxd's Blog

以技术为翼,以生活为魂

Linux 文件权限与网站目录设置

本文章经过AI润色,但是我逐字逐句审查过,有时候AI其实总结的很好。不用担心知识错误问题。

刚接触 Linux 的时候,我一直觉得权限系统很乱。

什么 chmod 755chown www-data、用户组、所属用户,看着一堆概念混在一起。尤其网上很多教程,出了权限问题直接:

chmod -R 777 /var/www

虽然“能用”,但其实问题很大。

后面自己真正开始部署网站、配 Nginx、跑 PHP 之后,才发现 Linux 权限这东西其实逻辑很简单,本质上就是:

谁可以读,谁可以改,谁可以执行。

理解这个之后,很多东西就顺了。


Linux 里基本一切都算“文件”。

每个文件都有:

  • 所有者
  • 所属组
  • 权限

比如:

-rw-r--r-- 1 www-data www-data index.php

前面这一串:

-rw-r--r--

就是权限。

后面的:

www-data www-data

分别是:

所有者    所属组

Linux 权限里最核心的只有三个字母:

字母含义
r
w
x执行

数字权限其实就是它们的组合:

数字权限
4r
2w
1x

所以:

7 = rwx = 4+2+1
6 = rw- = 4+2
5 = r-x = 4+1
4 = r--

这也是为什么会有:

755
644
777

这种写法。


网站里最常见的文件权限其实是 644

比如:

chmod 644 index.php

对应:

rw-r--r--

意思就是:

  • 文件所有者可以修改
  • 其他人只能读

对于:

  • PHP
  • HTML
  • CSS
  • JS

这种文件来说,基本已经完全够用了。

因为 Web 服务器通常只需要读取它们。


目录一般会用 755

比如:

chmod 755 /var/www

对应:

rwxr-xr-x

意思是:

  • 所有者拥有完整权限
  • 其他人可以读取、进入目录
  • 但不能修改

这里有个很多新手容易搞混的点:

目录上的 x 不代表“执行目录”。

它表示:

是否允许进入这个目录。

所以目录通常都得有 x 权限,不然连 cd 都进不去。


很多教程最喜欢干的事情就是:

chmod -R 777

因为这样“肯定能跑”。

777 本质上等于:

  • 所有人都能读
  • 所有人都能写
  • 所有人都能执行

也就是整个目录完全开放。

PHP 网站如果有漏洞,这种权限基本等于直接送 WebShell。

很多网站被挂马,本质上不是漏洞多高级,而是权限给太大了。


chmod 是改权限。

比如:

chmod 644 index.php

表示修改文件权限。

递归修改:

chmod -R 755 /var/www/site

但这里其实有个问题:

文件和目录通常不应该同权限。

因为:

  • 文件一般不需要执行权限
  • 目录必须有执行权限

所以更合理的做法一般是分开设。

目录:

find /var/www/site -type d -exec chmod 755 {} \;

文件:

find /var/www/site -type f -exec chmod 644 {} \;

这是比较标准的网站权限方案。


然后就是 chown

很多人会把 chmodchown 搞混。

其实区别很大。

chmod 改的是:

谁能干什么

chown 改的是:

这个文件是谁的

比如:

chown www-data:www-data index.php

意思就是:

所有者:www-data
所属组:www-data

Linux 一般会给服务单独创建用户。

比如:

服务用户
Nginxwww-data
Apacheapache
MySQLmysql

这样做主要是为了权限隔离。

否则 Web 服务一旦出问题,就容易直接影响整个系统。


PHP 网站比较常见的一套权限,大概是这样:

类型推荐权限
网站目录755
PHP/HTML/CSS/JS644
上传目录775
配置文件600 或 640

上传目录比较特殊。

因为:

  • 用户头像
  • 图片上传
  • 缓存
  • session

这些东西 PHP 需要写入。

所以通常会:

chown -R www-data:www-data uploads
chmod -R 775 uploads

这里的 775 已经比 777 安全很多。

因为它只允许:

  • 所有者
  • 所属组

写入。

不是所有人都能写。


还有个很多教程会犯的问题:

chown -R www-data:www-data /var/www/site

整个网站都直接给 www-data

其实并不太推荐。

更合理的做法通常是:

chown -R 你的用户:www-data /var/www/site

比如:

chown -R mxd:www-data /var/www/site

这样:

  • 你自己能正常改代码
  • Web 服务也能读取
  • 权限关系更清晰

否则后面你会经常碰到:

Permission denied

然后开始到处 sudo


配置文件权限一般建议更严格一点。

尤其:

.env
config.php
database.yml

这种文件里面经常有:

  • 数据库密码
  • API Key
  • SMTP 密码
  • Redis 密码

一般建议:

chmod 600 .env

或者:

chmod 640 .env

别随便给所有用户读取权限。


SSH 密钥权限更严格。

很多人第一次用 SSH 都碰到过:

WARNING: UNPROTECTED PRIVATE KEY FILE!

本质上就是 OpenSSH 觉得:

你这私钥别人也能看。

一般推荐:

文件权限
~/.ssh700
id_rsa600
authorized_keys600

基本是固定搭配。


Linux 权限这东西,说到底核心其实就一句话:

只给必须的权限。

644 就别 666

755 就别 777

很多服务器安全问题,并不是什么特别高级的漏洞。

而是管理员配置不合理。

Linux 文件权限与网站目录设置
https://blog.mxdyeah.com/post/linux-permission-chmod-chown-guide
本文作者 mxdyeah
发布时间 2026-05-10
许可协议 CC BY-NC-SA 4.0
仅有 1 条评论
  1. 评论头像

    通俗易懂 学习了

    bzhwk May 13, 2026 08:16   Windows 10/11 x64 Edition(Windows 10/11 x64 Edition) / Firefox 150.0(Firefox 150.0) 回复
发表新评论

AD: