# linux下文件夹权限的问题

- Link: https://yjyj.net/learn/centos/3668.html
- Published: 2013-09-06T23:24:59+08:00
- Author: 小 虾

⚡ 生猛大蝦编辑部 · 30 秒核心看点

 * 目录和文件权限别混着设：常见安全组合是目录 0755、文件 0644。
 * 777 不是“万能修复”，把所有文件都设成 777 反而会放大安全风险。
 * 目录没有执行权限就打不开；PHP 需要写入时，才考虑给目标目录更高权限。

**先直接给出正确的权限：**

**文件夹 0755 文件 0644**

**那些让你吧所有文件都设置为0777权限的人都是白痴＋sb**

Linux的文件权限是linux能有如此安全性能的最大的保障之一，有朋友可能会知道，很多攻击
windows的方法都是通过漏洞获取到创建用户的权限从而达到控制计算机的目的，在linux下，
Root帐户有最大的权限，可以干任何事情，其他用户只能拥有自己的文件的所有权限和该改组
成员赋予的文件的权限，下面开始对文件权限的一个说明，请各位Homezz用户仔细阅读。

**读权限R。**简单的说就是打开文件查看内容的权限，在web服务器中，若文件没有打开权限，
则web服务器则视为该文件不存在，发送404 file not  found错误,**用数字**4表示。

**写权限W。**一个**文件/文件夹**若没有写的权限，那么该**文件**则无法更改，**文件
夹**若没有写权限，则该**文件夹**下无法创建新文件,**用数字**2表示。

**执行权限X。**程序文件若要执行，必须有执行权限，否则无法执行。打开一个文件夹也是
执行，所以**文件夹若没有执行权限**，则无法被打开。**用数字**1表示。

  |  谁拥有这个权限 |  文件所有者 |  组内用户 |  公共用户 |  
 |  可读=4 |  0 |  0 |  0 |  
 |  可写=2 |  0 |  0 |  0 |  
 |  可执行=1 |  0 |  0 |  0 |  
 |  实际权限，纵向相加 |  0 |  0 |  0 |

公共用户为所有者和组内用户之外的用户，比如访问web时候，linux可能用公共的用户去读
取文件，这里不妨理解成是访客所能操作的那个用户。

下面举例（再次提醒，文件夹和文件不一样）:

**文件所有用户可写： 666 （3类用户均可读写）**

  |  谁拥有这个权限 |  文件所有者 |  组内用户 |  公共用户 |  
 |  可读=4 |  4 |  4 |  4 |  
 |  可写=2 |  2 |  2 |  2 |  
 |  可执行=1 |  0 |  0 |  0 |  
 |  实际权限，纵向相加 |  6 |  6 |  6 |

接上面的，假设我们吧**文件夹设置成0666**会怎么样，结果很明显，因为该文件夹没有执行
权限，无法被打开，所以设置成0666则无法被访问到。

文件夹只可文件所有者有全部权限，组内用户、公共用户可读和执行（755）。**一般web根
目录文件夹都要这样设置**，才安全。再次提示：**文件夹没有执行权限，则该用户无法打开**。

正常的服务器，若根目录权限也为0777，则会出现500错误

  |  谁拥有这个权限 |  文件所有者 |  组内用户 |  公共用户 |  
 |  可读=4 |  4 |  5 |  4 |  
 |  可写=2 |  2 |  0 |  0 |  
 |  可执行=1 |  1 |  1 |  1 |  
 |  实际权限，纵向相加 |  7 |  5 |  5 |

如果php需要在某文件夹下创建文件，请把该文件的权限全部设置：**即可都可写和可执行777**

  |  谁拥有这个权限 |  文件所有者 |  组内用户 |  公共用户 |  
 |  可读=4 |  4 |  4 |  4 |  
 |  可写=2 |  2 |  2 |  2 |  
 |  可执行=1 |  1 |  1 |  1 |  
 |  实际权限，纵向相加 |  7 |  7 |  7 |

为了安全起见，正常的php文件应该设置成：所有者可读可写，组用户可读，公共用户可读**
644**

  |  谁拥有这个权限 |  文件所有者 |  组内用户 |  公共用户 |  
 |  可读=4 |  4 |  4 |  4 |  
 |  可写=2 |  2 |  0 |  0 |  
 |  可执行=1 |  0 |  0 |  0 |  
 |  实际权限，纵向相加 |  6 |  4 |  4 |

其他权限，请大家自行思考。homezz的用户，若您还不熟悉这些基本的权限，建议您仔细再次
阅读一遍。

对于那些建议把所有文件和文件夹都设置成 777的人，我只能说你要么在误导别人，要么在
残害新手！

 

来自 homezz 伟大的东哥

❓ 延伸问答与排错指南（FAQ）

Linux 目录为什么常用0755？

0755 的意思是所有者可读写执行，组用户和其他用户可读可执行但不可写。对网站根目录这类
目录来说，这样既能让服务正常读取文件，又能避免普通用户随意改写目录内容，兼顾可用性
和安全性。

文件为什么通常设置成0644？

0644 表示所有者可读写，组用户和其他用户只读。对普通 PHP 文件或静态文件来说，这样
足够程序读取和执行，同时减少被误改、被篡改的风险。一般不建议把代码文件设成 777。

目录设成0666会发生什么？

目录没有执行权限就无法被打开，也就不能进入目录、读取目录内容或在其中创建文件。0666
只有读写没有执行，放在目录上会导致访问异常；目录权限要特别注意“执行位”是否存在。

📚 【[CentOS 学习](https://yjyj.net/category/learn/centos)】专栏延伸阅读与热门精选（
[全站文章归档](https://yjyj.net/archive)）：

 * [新手必须掌握的Linux命令](https://yjyj.net/learn/centos/3662.html)
 * [在centos6上安装Ajenti](https://yjyj.net/learn/centos/3656.html)
 * [测试一下Ajenti与各种国产一键环境的兼容性(Ajenti+AMH)](https://yjyj.net/learn/centos/3764.html)
 * [Error: bin/bash^M 让人悲囧的傻逼问题导致脚本无法运行](https://yjyj.net/learn/centos/3784.html)
 * 热门必读[程序员漫游指南](https://yjyj.net/what/5830.html)
 * 热门必读[升级一下iptables](https://yjyj.net/learn/centos/3208.html)
