您正在尝试修复您的 Web 服务器的权限问题,并在 Internet 上找到信息,说您需要递归地chmod 777访问 Web 目录。在此之前,请确保您了解做了chmod -R 777什么,以及为什么永远不应将权限设置为 777。
本文解释了基本的 Linux 权限模型以及权限对应的数字的含义。
了解 Linux 文件权限
在 Linux 中,对文件的访问由操作系统使用文件权限、属性和所有权来控制。了解 Linux 文件系统权限模型可以让您将文件和目录的访问权限仅限于授权用户和进程,并使您的系统更加安全。
每个文件由特定用户和组拥有,并为三种不同类别的用户分配了访问权限:
- 文件所有者
- 小组成员
- 其他人(其他所有人)
有三种文件权限类型适用于每个用户类,并允许您指定允许哪些用户读取文件、写入文件或执行文件。相同的权限属性适用于具有不同含义的文件和目录:
- 读取权限
- 该文件是可读的。例如,当设置了读取权限时,用户可以在文本编辑器中打开文件。
- 可以查看目录的内容。用户可以使用ls 命令列出目录中的文件。
- 写权限
- 该文件可以更改或修改。
- 目录的内容可以更改。用户可以创建新文件 、删除现有文件 、移动文件 、重命名文件 等。
- 执行权限
- 该文件可以执行。
- 可以使用cd 命令进入目录。
可以使用ls 命令查看文件权限。这是一个例子:
$ls -l filename.txt
-rw-r--r-- 12 mryunwei users 12.0K Apr 8 20:51 filename.txt
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group
| | | | | +-------------------> 6. Owner
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions
| | +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type
第一个字符显示文件类型。它可以是常规文件 ( -)、目录 ( d)、符号链接 ( l) 或任何其他特殊类型的文件。
接下来的九个字符代表文件权限,三个三元组,每个字符三个字符。第一个三元组显示所有者权限,第二个组权限,最后一个三元组显示其他所有人权限。
许可号
文件权限可以用数字或符号格式表示。在本文中,我们将重点介绍数字格式。
权限编号可以由三位数或四位数组成,范围从 0 到 7。
当使用3位数字时,第一位代表文件所有者的权限,第二位代表文件组,最后一位代表所有其他用户。
写入、读取和执行权限具有以下数值:
- r(读取)= 4
- w(写)= 2
- x(执行)= 1
- 没有权限 = 0
特定用户类的权限位是该类权限值的总和。
权限编号的每个数字可能是 4、2、1 和 0 的总和:
- 0 (0+0+0) – 没有权限
- 1 (0+0+1) – 仅执行权限
- 2 (0+2+0) – 仅写权限
- 3 (0+2+1) – 写入和执行权限
- 4 (4+0+0) – 仅读取权限
- 5 (4+0+1) – 读取和执行权限
- 6 (4+2+0) – 读写权限
- 7 (4+2+1) – 读取、写入和执行权限
例如,如果权限号设置为 750,则表示文件的所有者有读、写和执行权限,文件所属的组有读和执行权限,其他用户没有权限:
- 所有者:rwx=4+2+1=7
- 组:rx=4+0+1=5
- 其他:rx=0+0+0=0
当使用 4 位数字时,第一个数字的含义如下:
- setuid=4
- setgid=2
- sticky=1
- no changes = 0
接下来的三位数字与使用 3 位数字时的含义相同。如果第一个数字是 0 可以省略,模式可以用 3 位表示。数字模式0755与 相同755。
要以数字(八进制)表示法查看文件的权限,请使用以下stat 命令:
stat -c "%a" filename
Output:
644
从不使用 chmod 777
对一个文件或目录设置777权限意味着它对所有用户都是可读、可写和可执行的,可能会带来巨大的安全风险。
例如,如果您递归地将目录下所有文件和子目录的权限更改为/var/www,777则系统上的任何用户都将能够创建、删除或修改该目录中的文件。
如果您的 Web 服务器遇到权限问题,请不要将权限递归设置为 ,而是777将文件的所有权更改为运行应用程序的用户,并将文件的权限设置为 ,644并将目录的权限设置为755。
可以使用该命令更改文件所有权,并使用该chown 命令更改权限chmod 。
假设您的服务器上有一个 PHP 应用程序以“linuxize”用户身份运行。要设置正确的权限,您将运行:
$chown -R linuxize: /var/www
$find /var/www -type d -exec chmod 755 {} \;
$find /var/www -type f -exec chmod 644 {} \;
只有 root、文件所有者或具有 sudo 权限的用户可以更改文件的权限。使用时要格外小心chmod,尤其是在递归更改权限时。
总结
如果您正在管理 Linux 系统,了解 Linux 权限的工作方式至关重要。
您永远不应设置 777 ( rwxrwxrwx) 权限文件和目录权限。777 意味着任何人都可以对这些文件做任何事情。