Red Hat Training

A Red Hat training course is available for RHEL 8

第 26 章 管理文件权限

文件权限控制用户和组群帐户查看、修改、访问和执行文件和目录内容的能力。

每个文件或目录都有三个级别的所有权:

  • 用户所有者(u)。
  • 组所有者(g)。
  • 其他(o)。

可为每个级别的所有权分配以下权限:

  • 读(r)。
  • 写(w)。
  • 执行(x)。

请注意,文件的执行权限允许执行该文件。目录的执行权限允许访问目录中的内容,但不执行它。

当创建新文件或目录时,会自动为其分配默认权限集。文件或目录的默认权限基于以下两个因素:

  • 基本权限。
  • user file-creation mode maskumask)。

26.1. 基本文件权限

每当创建新文件或目录时,会自动为其分配基本权限。文件或目录的基本权限可以使用符号或者数值表示。

权限

符号

数值

无权限

---

0

执行

--x

1

-w-

2

写和执行

-wx

3

r--

4

读和执行

r-x

5

读写

rw-

6

读、写、执行

rwx

7

目录的基本权限是 777 (drwxrwxrwx),它为任何人都授予读、写和执行的权限。这意味着目录所有者、组和其它可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。

请注意,一个目录中的单个文件可以有它们自己的权限,例如可以阻止用户您编辑它们,即使用户对该目录有非受限的访问权限。

文件的基本权限是 666 (-rw-rw-rw-),它为任何人都授予读写权限。这意味着文件所有者、组和其它用户都可以读和编辑该文件。

例 26.1. 文件的权限

如果文件有以下权限:

$ ls -l
-rwxrw----. 1 sysadmins sysadmins 2 Mar 2 08:43 file
  • - 表示它是一个文件。
  • rwx 表示文件所有者有读、写和执行文件的权限。
  • rw- 表示组有读写权限,但不能执行文件。
  • --- 表示其他用户没有读、写或执行文件的权限。
  • . 表示为该文件设定了 SELinux 安全上下文。

例 26.2. 目录的权限

如果一个目录有以下权限:

$ ls -dl directory
drwxr-----. 1 sysadmins sysadmins 2 Mar 2 08:43 directory
  • d 表示它是一个目录。
  • rwx 表示目录所有者有读取、写入和访问目录内容的权限。

    作为目录所有者,您可以列出目录中的项目(文件、子目录),访问这些项目的内容并进行修改。

  • r-- 表示组有读取权限,但没有写入或访问目录的内容。

    作为拥有该目录的组的成员,您可以列出目录中的项目。您无法访问目录中项目的信息或修改它们。

  • --- 表示其他用户没有权限读取、写入或者访问目录的内容。

    作为不是用户拥有者或该目录的组所有者,您无法列出目录中的项目、访问这些项目的信息或修改它们。

  • . 表示为该目录设定了 SELinux 安全上下文。
注意

自动分配给某个文件或者目录的基本权限不是文件或目录最终的默认权限。当您创建文件或目录时,基本权限会被 umask 更改。基本权限和 umask 的组合会为文件和目录创建默认权限。

26.2. 用户文件创建模式掩码

用户 file-creation 模式掩码(umask)是控制如何为新创建的文件和目录设置文件权限的变量。umask 会自动从基本权限值中删除权限,以提高 linux 系统的整体安全性。umask 可以用 符号数值 表示。

权限

符号

数值

读、写和执行

rwx

0

读写

rw-

1

读和执行

r-x

2

r--

3

写和执行

-wx

4

-w-

5

执行

--x

6

无权限

---

7

标准用户的默认 umask0002root 用户的默认 umask0022

umask 的第一个数字代表特殊权限(sticky 位)。umask 的最后三位数字分别代表从用户拥有者(u)、组群所有者(g)和其它(o)中删除的权限。

例 26.3. 在创建文件时应用 umask

以下示例演示了,带有 0137 值的 umask 应用到具有 777 基本权限的文件,以便创建具有 640 默认权限的文件。

用户组 Umask 示例

26.3. 默认文件权限

所有新创建的文件和目录会自动设置默认权限。默认权限的值通过将 umask 应用到基本权限来确定。

例 26.4. 由标准用户创建的目录的默认权限

标准用户 创建一个新 目录 时, umask 被设置为 002 (rwxrwxr-x),目录的基本权限被设置为 777 (rwxrwxrwx)。这会使默认权限为 775 (drwxrwxr-x)。

 

符号

数值

基本权限

rwxrwxrwx

777

Umask

rwxrwxr-x

002

默认权限

rwxrwxr-x

775

这意味着目录所有者、组和其它可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。其他用户只能列出该目录的内容并将其下移到其中。

例 26.5. 由标准用户创建的文件的默认权限

标准用户 创建一个新 文件 时, umask 被设置为 002 (rwxrwxr-x),文件的基本权限被设置为 666 (rw-rw-rw-)。这会使默认权限为 664 (-rw-rw-r--)。

 

符号

数值

基本权限

rw-rw-rw-

666

Umask

rwxrwxr-x

002

默认权限

rw-rw-r--

664

这意味着,文件拥有者和组群可以读取和编辑该文件,而其他用户只能读取该文件。

例 26.6. root 用户创建的目录的默认权限

root 用户 创建一个新 目录 时, umask 被设置为 022 (rwxr-xr-x),目录的基本权限被设置为 777 (rwxrwxrwx)。这会使默认权限为 755 (rwxr-xr-x)。

 

符号

数值

基本权限

rwxrwxrwx

777

Umask

rwxr-xr-x

022

默认权限

rwxr-xr-x

755

这意味着目录所有者可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。这个组群和其它只能列出该目录的内容并将其下移。

例 26.7. root 用户创建的文件的默认权限

root 用户 创建一个新 文件 时, umask 被设置为 022 (rwxr-xr-x),文件的基本权限被设置为 666 (rw-rw-rw-)。这会使默认权限为 644 (-rw-r—r--)。

 

符号

数值

基本权限

rw-rw-rw-

666

Umask

rwxr-xr-x

022

默认权限

rw-r—r--

644

这意味着,文件所有者可以读取和编辑文件,而组和其它用户只能读取该文件。

注意

出于安全考虑,常规文件默认无法具有执行权限,即使 umask 被设置为 000 (rwxrwxrwx)。但是,创建的目录可以具有执行权限。

26.4. 使用符号值更改文件权限

您可以使用带有符号值(组合字母和符号)的 chmod 工具来更改文件或目录的文件权限。

您可以分配以下 权限:

  • 读(r)
  • 写(w)
  • 执行(x)

可将权限分配给以下 级别的所有权:

  • 用户所有者(u)
  • 组所有者(g)
  • 其他(o)
  • 所有(a)

要添加或删除权限,您可以使用以下 符号:

  • + 在现有权限之上添加权限
  • - 从现有权限中删除权限
  • = 删除现有权限并明确定义新权限

流程

  • 要更改文件或目录的权限,请使用:

    $ chmod <level><operation><permission> file-name

    使用您要设置权限 的所有权级别 替换 <level>。使用其中一个 符号 替换 <operation>。使用您要分配的 权限 替换 <permission>。用文件或目录的名称替换 file-name。例如:要为任何人都授予读取、写入和执行(rwx) my-script.sh 的权限,使用 chmod a=rwx my-script.sh 命令。

    详情请查看基本 权限

验证步骤

  • 要查看特定文件的权限,请使用:

    $ ls -l file-name

    用文件名替换 file-name

  • 要查看特定目录的权限,请使用:

    $ ls -dl directory-name

    使用目录名替换 directory-name

  • 要查看特定目录中所有文件的权限,请使用:

    $ ls -l directory-name

    使用目录名替换 directory-name

例 26.8. 更改文件和目录的权限

  • 要将 my-file.txt 的文件权限从 -rw-rw-r-- 改为 -rw------,请使用:

    1. 显示 my-file.txt 的当前权限:

      $ ls -l my-file.txt
      -rw-rw-r--. 1 username username 0 Feb 24 17:56 my-file.txt
    2. 从组所有者(g)删除读取、写入和执行(rwx)文件的权限:o

      $ chmod go= my-file.txt

      请注意,任何在等号(=)后没有被指定的权限都会被自动禁止。

    3. 验证 my-file.txt 的权限是否已正确设置:

      $ ls -l my-file.txt
      -rw-------. 1 username username 0 Feb 24 17:56 my-file.txt
  • 要将 my-directory 的文件权限从 drwxrwx--- 改为 drwxrwxr-x,请使用:

    1. 显示 my-directory 的当前权限:

      $ ls -dl my-directory
      drwxrwx---. 2 username username 4096 Feb 24 18:12 my-directory
    2. 添加所有用户的读取、写入、执行(rwx)访问(a):

      $ chmod o+rx my-directory
    3. 验证 my-directory 及其内容的权限是否已正确设置:

      $ ls -dl my-directory
      drwxrwxr-x. 2 username username 4096 Feb 24 18:12 my-directory

26.5. 使用数值更改文件权限

您可以使用带有数值的 chmod 实用程序(数字)来更改文件或目录的文件权限。

流程

  • 要为现有文件或者目录更改文件权限,请使用:

    $ chmod octal_value file-name

    用文件或目录的名称替换 file-name。使用数值替换 octal_value。详情请查看基本 权限