第 12 章 管理文件系统权限
文件系统权限控制用户和组帐户读、修改和执行文件的内容以及进入目录的能力。仔细设置权限以保护您的数据免于未授权访问。
12.1. 管理文件权限
每个文件或目录都有三个级别的所有权:
- 用户所有者(u)。
- 组所有者(g)。
- 其他(o)。
可为每个级别的所有权分配以下权限:
- 读(r)。
- 写(w)。
- 执行(x)。
请注意,文件的执行权限允许执行该文件。目录的执行权限允许访问目录中的内容,但不执行它。
创建新文件或目录时,会自动为其分配默认权限集。文件或目录的默认权限基于两个因素:
- 基本权限。
- user file-creation mode mask(umask)。
12.1.1. 基本文件权限
每当创建新文件或目录时,会自动为其分配基本权限。文件或目录的基本权限可以使用符号或者数值表示。
权限 | 符号 | 数值 |
无权限 | --- | 0 |
执行 | --x | 1 |
写 | -w- | 2 |
写和执行 | -wx | 3 |
读 | r-- | 4 |
读和执行 | r-x | 5 |
读写 | rw- | 6 |
读、写、执行 | rwx | 7 |
目录的基本权限是 777
(drwxrwxrwxrwx
),它为任何人都授予读、写和执行的权限。这意味着目录所有者、组和其它可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。
请注意,一个目录中的单个文件可以有它们自己的权限,例如可以阻止用户您编辑它们,即使用户对该目录有非受限的访问权限。
文件的基本权限为 666
(-rw-rw-rw-
),它为所有人都授予读取和写入的权限。这意味着文件所有者、组和其它用户都可以读和编辑该文件。
例 12.1. 文件的权限
如果文件有以下权限:
$ ls -l -rwxrw----. 1 sysadmins sysadmins 2 Mar 2 08:43 file
-
-
表示它是文件。 -
rwx
表示文件所有者有读、写和执行文件的权限。 -
rw-
表示组有读写权限,但不能执行文件。 -
---
表示其他用户没有读、写或执行文件的权限。 -
.
表示为该文件设定了 SELinux 安全上下文。
例 12.2. 目录的权限
如果一个目录有以下权限:
$ ls -dl directory drwxr-----. 1 sysadmins sysadmins 2 Mar 2 08:43 directory
-
d
表示它是一个目录。 rwx
表示目录所有者有读、写和访问目录内容的权限。作为目录所有者,您可以列出目录中的项目(文件、子目录),访问这些项目的内容并进行修改。
-
r-x
表示组有读目录内容的权限,但没有写权限 - 创建新条目或删除文件。x
权限意味着您也可以使用cd
命令访问该目录。 ---
表示其他用户没有权限读取、写入或者访问该目录的内容。作为不是用户拥有者或该目录的组所有者的用户,您无法列出目录中的项目、关于这些项目的访问信息或修改它们。
-
.
表示为该目录设定了 SELinux 安全性上下文。
自动分配给某个文件或者目录的基本权限不是文件或目录最终的默认权限。当您创建文件或目录时,基本权限会被 umask 更改。基本权限和 umask 的组合会为文件和目录创建默认权限。
12.1.2. 用户文件创建模式掩码
用户文件创建模式掩码(umask)是一个变量,用于控制如何为新创建的文件和目录设置文件权限。umask 会自动从基本权限值中删除权限,以提高 Linux 系统的整体安全性。umask 可以用符号 或 八进制 值表示。
权限 | 符号 | 数值 |
读、写和执行 | rwx | 0 |
读写 | rw- | 1 |
读和执行 | r-x | 2 |
读 | r-- | 3 |
写和执行 | -wx | 4 |
写 | -w- | 5 |
执行 | --x | 6 |
无权限 | --- | 7 |
标准用户的默认 umask 是 0002
。root
用户的默认 umask 为 0022
。
umask 的第一个数字代表特殊权限(sticky 位)。umask 的最后三位数字分别代表从用户拥有者(u)、组群所有者(g)和其它(o)中删除的权限。
例 12.3. 在创建文件时应用 umask
下面的例子演示了,对一个基本权限为 777
的文件应用值为 0137
的 umask,使在创建该文件时其默认权限变为 640
。
12.1.3. 默认的文件权限
为所有新创建的文件和目录自动设置默认权限。默认权限的值通过将 umask 应用到基本权限来确定。
例 12.4. 标准用户创建的目录的默认权限
当 标准用户 创建了一个新 目录 时,umask 被设为 002
(rwxrwxr-x
),目录的基本权限被设为 777
(rwxrwxrwx
)。这会使默认权限为 775(
drwxrwxr-x
)。
符号 | 数值 | |
基本权限 | rwxrwxrwx | 777 |
Umask | rwxrwxr-x | 002 |
默认权限 | rwxrwxr-x | 775 |
这意味着目录所有者、组和其它可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。其他用户只能列出该目录的内容并将其下移到其中。
例 12.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 |
这意味着,文件拥有者和组群可以读取和编辑该文件,而其他用户只能读取该文件。
例 12.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 |
这意味着目录所有者可以列出目录的内容,并可以在该目录下(以及其子目录)中创建、删除和编辑项。这个组群和其它只能列出该目录的内容并将其下移。
例 12.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
)。但是,创建的目录可以具有执行权限。
12.1.4. 使用符号值更改文件权限
您可以使用带有符号值(字母和符号的组合)的 chmod
工具来更改文件或目录的文件权限。
您可以分配以下 权限 :
- 读(r)
- 写(w)
- 执行(x)
权限可分配给以下 所有权级别 :
- 用户所有者 (u)
- 组所有者(g)
- 其他 (o)
- 所有 (a)
要添加或删除权限,您可以使用以下 符号 :
-
+
在现有权限之上添加权限 -
-
从现有权限中删除权限 -
=
删除现有权限,并明确定义新权限
流程
验证
要查看特定文件的权限,请使用:
$ ls -l file-name
用文件名替换 file-name。
要查看特定目录的权限,请使用:
$ ls -dl directory-name
使用目录名替换 directory-name。
要查看特定目录中所有文件的权限,请使用:
$ ls -l directory-name
使用目录名替换 directory-name。
例 12.8. 更改文件和目录的权限
要将
my-file.txt
的文件权限从-rw-rw-r--
改为-rw------
,请使用:显示
my-file.txt
的当前权限:$ ls -l my-file.txt -rw-rw-r--. 1 username username 0 Feb 24 17:56 my-file.txt
从组所有者(
g
)和其他用户(o
)删除读、写和执行(rwx
)文件的权限:$ chmod go= my-file.txt
请注意,任何在等号(
=
)之后没有被指定的权限都会被自动禁止。验证
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
,请使用:显示
my-directory
的当前权限:$ ls -dl my-directory drwxrwx---. 2 username username 4096 Feb 24 18:12 my-directory
为所有用户(
a
) 添加读和执行(r-x
)权限:$ chmod o+rx my-directory
验证
my-directory
及其内容的权限是否设置正确:$ ls -dl my-directory drwxrwxr-x. 2 username username 4096 Feb 24 18:12 my-directory
12.1.5. 使用数值更改文件权限
您可以使用带有八进制(数字)的 chmod
工具来更改文件或目录的文件权限。
流程
要为现有文件或者目录更改文件权限,请使用:
$ chmod octal_value file-name
用文件或目录的名称替换 file-name。使用数值替换 octal_value。如需了解更多详细信息,请参阅 基本文件权限。