Linux文件权限755、644含义,chmod修改权限
前言
部署网站时常遇到 Nginx 报 403、PHP 无法写入上传目录,根子多半是文件/目录权限不对。理解 Linux 三组身份(属主、属组、其他)和 rwx 三位数字,再用 chmod/chown 调整,问题基本都能解决。本篇讲清 755、644 等常用权限数字的含义和修改方法。
一、先看权限:ls -l
ls -l index.php
# 输出示例:-rw-r--r-- 1 www www 1234 Oct 22 07:20 index.php
第一位 - 是文件类型(d 目录、l 软链接);后面9位分三组:
| 分组 | 含义 | 对应数字位 |
|---|---|---|
| 前三位 | 文件属主 user | 第1位 |
| 中间三位 | 文件属组 group | 第2位 |
| 后三位 | 其他用户 other | 第3位 |
二、rwx 与数字对应关系
r读 = 4w写 = 2x执行 = 1-无权限 = 0
把每组数字相加得到该组权限:
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r-x= 4+0+1 = 5r--= 4+0+0 = 4
三、常用权限数字含义
- 644 文件:属主读写,属组和其他只读。普通网页文件、配置文件标准权限。
- 755 目录 / 可执行脚本:属主读写执行,属组和其他读+执行。目录必须有
x才能进入,脚本必须有x才能执行。 - 777 所有人全权:方便但不安全,仅临时调试用,网站目录绝不要长期开放 777。
- 600 私密文件:只有属主能读写,适合存放密钥、配置里的密码文件。
目录规范建议:目录 755,普通文件 644,可执行脚本 755。
四、chmod 修改权限
# 给单个文件设644
chmod 644 index.php
# 给目录设755
chmod 755 /var/www/html
# 递归修改目录及其下所有文件权限(注意目录和文件权限要分开处理)
chmod -R 755 /var/www/html
符号写法(叠加/去除):
# 给属主加执行权限
chmod u+x script.sh
# 给组和其他去除写权限
chmod go-w index.php
# 属组可写
chmod g+w /data
五、chown 属主属组
权限对了但属主不对,PHP 进程仍可能写不进去:
# 修改属主为 www
chown www index.php
# 同时改属主和属组
chown www:www /var/www/html
# 递归修改
chown -R www:www /var/www/html
六、常见坑
- 目录没加 x 权限:目录权限 644 会导致无法
cd进入和列目录,网页报 403; - 把文件也设成 755/777:普通文件不需要执行位,777 会放大安全风险;
- 递归时文件目录一刀切:用
find分开处理目录和文件,见下方命令; - 只改权限不改属主:Nginx/PHP-FPM 以 www 用户运行,文件属主是 root 时仍读不到;
- SELinux 拦截:CentOS 上权限看似正确仍 403/500,要检查 SELinux 上下文。
目录与文件分开递归:
# 目录全部755
find /var/www/html -type d -exec chmod 755 {} \;
# 文件全部644
find /var/www/html -type f -exec chmod 644 {} \;
总结
r=4 w=2 x=1,文件常用 644、目录常用 755;chmod 改权限、chown 改属主属组;递归时目录和文件权限分开设置,网站目录不要长期用 777。
遇到问题加QQ23979811 协助处理
PHP报错Permission denied权限问题解决
前言
PHP写文件、读文件、上传文件,突然报"Permission denied"?这是Linux文件权限问题,最常见就是文件或目录的所有者不对、权限不够。本文讲怎么排查和解决。
一、报错长啥样
Warning: fopen(/data/test.txt): failed to open stream: Permission denied in /www/test.php on line 5
意思:PHP没权限操作这个文件/目录。
二、常见原因
原因1:文件/目录权限不够
PHP没有读或写的权限。
原因2:文件/目录所有者不对
PHP用www用户跑,但文件是root创建的,www没权限。
原因3:SELinux开着
CentOS默认开SELinux,即使权限对了也不让访问。
原因4:目录权限不够
要写文件的话,目录本身也要有写权限。
三、排查步骤
第一步:看报错的文件路径
报错信息里会告诉你是哪个文件:
Permission denied: /data/upload/test.jpg
就是 /data/upload/ 这个目录的问题。
第二步:看文件权限
ls -l /data/upload/
输出类似:
-rw-r--r-- 1 root root 1024 Oct 9 10:00 test.txt
看第一个字段:
-rw-r--r--表示所有者能读写,其他人只能读
看所有者:
root root表示所有者和组都是root
第三步:看PHP用什么用户跑
ps aux | grep php-fpm
输出里会看到:
www 1234 0.0 0.5 123456 7890 ? S 10:00 0:00 php-fpm: pool www
PHP是用 www 用户跑的。
如果文件所有者是root,那www用户就没权限写。
四、解决方法
方法1:改文件所有者
把文件/目录的所有者改成PHP的用户:
# 改单个文件
chown www:www /data/upload/test.txt
# 改整个目录(包括里面的文件)
chown -R www:www /data/upload/
推荐这个方法,最安全。
方法2:改权限
给所有人加权限:
# 文件加写权限
chmod 666 /data/upload/test.txt
# 目录加写权限
chmod 777 /data/upload/
注意: 777太不安全了,尽量用方法1改所有者。
方法3:看SELinux
CentOS开了SELinux的话,即使权限对了也不行。
检查SELinux:
getenforce
输出 Enforcing 就是开着。
临时关掉:
setenforce 0
永久关掉:
vi /etc/selinux/config
把:
SELINUX=enforcing
改成:
SELINUX=disabled
重启服务器生效。
或者只给目录加SELinux权限:
chcon -R -t httpd_sys_rw_content_t /data/upload/
五、常见场景
场景1:上传图片报错
用户上传图片,报Permission denied。
原因: uploads目录所有者不对。
解决:
chown -R www:www /www/wwwroot/你的站/uploads/
场景2:写日志报错
PHP写日志文件,报Permission denied。
原因: 日志目录没权限。
解决:
chown -R www:www /var/log/你的应用/
场景3:session不存
PHP session存不进去。
原因: session目录没权限。
解决:
chown -R www:www /var/lib/php/session/
场景4:缓存目录没权限
ThinkPHP/Laravel缓存写不进去。
原因: runtime目录没权限。
解决:
chown -R www:www runtime/
六、常用命令
看文件权限
ls -l 文件名
看目录权限
ls -ld 目录名
改所有者
chown 用户:组 文件
chown -R 用户:组 目录
改权限
chmod 755 目录
chmod 644 文件
七、权限数字含义
| 数字 | 含义 |
|---|---|
| 7 | 读+写+执行 (4+2+1) |
| 6 | 读+写 (4+2) |
| 5 | 读+执行 (4+1) |
| 4 | 只读 |
常用:
- 目录:755
- 文件:644
- 上传目录:775(或改所有者)
八、常见坑
坑1:只改了文件,没改目录
要写文件的话,目录本身也要有写权限。
解决: 目录也要改所有者。
坑2:递归改权限
chmod -R 777 目录
太危险了,所有人都能写。
解决: 优先改所有者,不要随便777。
坑3:SELinux偷偷开着
CentOS7以后默认开SELinux,权限对了也不行。
检查:
getenforce
坑4:父目录没权限
比如 /data/upload/ 有权限了,但 /data/ 没权限,还是进不去。
解决: 从根开始一层一层检查。
总结
记住:
- 报错先看是哪个文件/目录
- 看文件所有者是不是PHP的用户(一般是www)
- 不是就
chown -R www:www 目录 - 还不行就检查SELinux
- 尽量改所有者,不要随便777
最常用:
chown -R www:www /你的目录/
遇到问题加QQ23979811 协助处理
Linux文件权限755、644含义,chmod修改权限
前言
Linux 文件权限是新手最头疼的东西之一,经常遇到 403 权限不足的报错。755、644 这些数字到底是什么意思?怎么改?本文一次讲清楚。
权限基础
三种身份
Linux 把用户分三类:
- 文件所有者(u):文件的主人
- 同组用户(g):和主人在同一个组的人
- 其他用户(o):所有人
三种权限
每种身份有三种权限:
- 读(r):4
- 写(w):2
- 执行(x):1
加起来就是权限数字。
755、644 是什么意思
755
7 = rwx(读+写+执行)= 4+2+1
5 = r-x(读+执行)= 4+1
5 = r-x(读+执行)= 4+1
合起来就是:所有者能读写执行,同组和其他用户只能读和执行。
常用于: 目录、可执行脚本
644
6 = rw-(读+写)= 4+2
4 = r--(只读)= 4
4 = r--(只读)= 4
合起来就是:所有者能读写,其他人只能读。
常用于: 普通文件、网页
常用权限速查表
| 数字 | 含义 | 用途 |
|---|---|---|
| 755 | rwxr-xr-x | 目录、脚本 |
| 644 | rw-r--r-- | 普通文件、网页 |
| 700 | rwx------ | 私人目录 |
| 600 | rw------- | 私人文件(比如密钥) |
| 777 | rwxrwxrwx | 所有人都能读写执行(不推荐) |
chmod 修改权限
数字方式(最常用)
chmod 755 文件名
比如把 index.php 改成 644:
chmod 644 index.php
字母方式
chmod u+x 文件名
意思是给所有者(u)加执行权限(x)。
常用的:
u+x:所有者加执行权限u-w:所有者去掉写权限g+w:同组加写权限o+r:其他用户加读权限a+x:所有人加执行权限
递归修改目录下所有文件
加 -R 参数:
chmod -R 755 /var/www/html
警告: 递归改权限要小心,别把系统目录改坏了。
chown 修改所有者
有时候不是权限数字的问题,是文件属主不对。
查看文件属主
ls -l 文件名
输出第一列后面就是属主:
-rw-r--r-- 1 www www 1234 Oct 6 10:00 index.php
前面的 www 是用户,后面的 www 是组。
修改文件属主
chown 用户:组 文件名
比如把文件改成 www 用户:
chown www:www index.php
递归修改目录属主
chown -R www:www /var/www/html
常见坑
坑1:网站 403 权限不足
网页打不开,报 403 Forbidden。
原因: 文件权限不对,或者属主不对。
解决:
- 文件改成 644:
chmod 644 文件 - 目录改成 755:
chmod 755 目录 - 属主改成运行用户:
chown www:www 文件
坑2:777 万能解决?
一遇到权限问题就 chmod 777。
原因: 图省事,但不安全。
解决: 777 意味着所有人都能读写执行,恶意文件可以直接往你的目录里写木马。生产环境绝对不要用 777。
坑3:改了权限还是不行
执行了 chmod 还是报权限不足。
原因: SELinux 拦截了。
解决: 检查 SELinux:
getenforce
如果是 Enforcing,临时关掉试试:
setenforce 0
坑4:上传文件没有执行权限
写了个脚本想运行,报 Permission denied。
原因: 文件没有执行权限。
解决:
chmod +x 脚本.sh
总结
| 命令 | 作用 |
|---|---|
chmod 755 文件名 |
改成 755 权限 |
chmod 644 文件名 |
改成 644 权限 |
chmod -R 755 目录 |
递归改目录权限 |
chown www:www 文件名 |
改文件属主 |
chown -R www:www 目录 |
递归改目录属主 |
记住两个常用的:目录 755,文件 644,基本就够用了。
遇到问题加QQ23979811 协助处理
Linux文件权限详解,chmod和chown命令使用
前言
Nginx 报 403 Forbidden?文件改完了不生效?权限不对导致各种奇怪问题?Linux 的文件权限是新手最容易搞混的地方。什么是 rwx?755 和 644 有什么区别?chown 和 chmod 分别是干嘛的?本文就把 Linux 文件权限讲明白,让你一看就懂。
查看文件权限
用 ls -l 查看文件详细信息:
ls -l /var/www/html/index.html
输出示例:
-rw-r--r-- 1 nginx nginx 1234 Oct 5 10:30 /var/www/html/index.html
权限字符串详解
最开头的 -rw-r--r-- 就是权限,拆解一下:
- rw- r-- r--
① ② ③ ④
- ① 文件类型:
-是普通文件,d是目录,l是链接 - ② 所有者权限(user):
rw-= 可读可写,不可执行 - ③ 所属组权限(group):
r--= 只读 - ④ 其他人权限(other):
r--= 只读
rwx 含义
| 字符 | 含义 | 数字 |
|---|---|---|
r |
读(read) | 4 |
w |
写(write) | 2 |
x |
执行(execute) | 1 |
所以:
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r--= 4+0+0 = 4r-x= 4+0+1 = 5
常用权限数字
| 数字 | 权限 | 说明 |
|---|---|---|
| 755 | rwxr-xr-x | 所有者可读写执行,其他人可读执行(常用目录、脚本) |
| 644 | rw-r--r-- | 所有者可读写,其他人只读(常用文件) |
| 700 | rwx------ | 只有所有者能读写执行(私密文件) |
| 600 | rw------- | 只有所有者能读写(私密文件) |
| 777 | rwxrwxrwx | 所有人都能读写执行(不安全,尽量别用) |
记住两个最常用的:
- 目录用
755 - 文件用
644
chmod 修改权限
数字方式
chmod 755 /var/www/html
把目录权限改成 755。
chmod 644 /var/www/html/index.html
把文件权限改成 644。
递归修改
chmod -R 755 /var/www/html/
把目录下所有文件和子目录都改成 755。
注意: 递归修改的时候要小心,一般文件应该是 644,目录是 755。如果全部改成 755,文件就能执行了,不安全。
字母方式
chmod u+x script.sh
给所有者加执行权限。
chmod g+w file.txt
给所属组加写权限。
chmod o-r file.txt
去掉其他人的读权限。
u:所有者g:所属组o:其他人+:加权限-:减权限
chown 修改所有者
修改文件所有者
chown nginx /var/www/html/index.html
把文件所有者改成 nginx。
修改所有者和所属组
chown nginx:nginx /var/www/html/index.html
所有者改成 nginx,所属组也改成 nginx。
递归修改
chown -R nginx:nginx /var/www/html/
把整个目录的所有者和所属组都改成 nginx。
实际应用场景
场景1:Nginx 报 403
Nginx 访问网站报 403 Forbidden,一般是权限不对。
ls -l /var/www/html/index.html
看所有者和权限。如果文件是 root 的,Nginx 进程读不到,就会 403。
chown nginx:nginx /var/www/html/index.html
chmod 644 /var/www/html/index.html
场景2:脚本不能执行
写了个 shell 脚本,运行提示 Permission denied。
chmod +x script.sh
加执行权限就能跑了。
场景3:目录权限不对
网站目录权限不对,上传的图片打不开。
chmod -R 755 /var/www/html/
chown -R nginx:nginx /var/www/html/
常见坑
坑1:chmod 777 解决一切
很多人一遇到权限问题就 chmod 777,这是最懒也最不安全的做法。777 意味着所有人都能读写执行,黑客上传个木马就直接跑了。
正确做法: 文件用 644,目录用 755,所有者设成运行服务的用户。
坑2:只改权限不改所有者
权限对了,但所有者不对,服务还是读不到文件。
解决: 权限和所有者都要对。比如 Nginx 运行用户是 nginx,文件所有者也要是 nginx。
坑3:递归 chmod 把文件也改成 755
chmod -R 755 把所有文件都改成可执行了,不安全。
正确做法: 目录用 755,文件用 644。可以用 find 分开改:
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
坑4:改了权限不生效
改了权限但还是不对,看看是不是有 SELinux 在捣乱。
解决: 先临时关掉 SELinux 测试:
setenforce 0
如果关了就好了,说明是 SELinux 的问题。
总结
Linux 文件权限核心:
- rwx = 4+2+1
- 目录用 755,文件用 644
- chmod 改权限,chown 改所有者
- 不要随便用 777
记住两个最常用的:目录 755,文件 644。遇到权限问题先 ls -l 看看,再改,别上来就 777。
遇到问题加QQ23979811 协助处理