理解用户权限的工作原理是掌握 Linux 的最重要部分之一。从这里开始学习基础知识。
译自 Linux: How File Permissions Work,作者 Damon M Garn。
Linux:Linux 技能模块库的配套实验室文章。在本系列文章中,我们还介绍了如何选择发行版、Linux 内核如何与硬件交互以及如何Linux 管理系统服务、存储和用户和组权限。
权限控制用户对文件和目录的访问。例如,权限决定用户是否可以读取文件 sales.txt。它们还决定用户是否可以编辑或更改该文件的内容。权限还指定用户是否可以运行程序或脚本。
如果您已经熟悉 Windows 权限,您会发现 Linux 权限要简单得多。
本文介绍了标准 Linux 权限可用的身份和访问级别,解释了绝对模式与符号模式,并展示了 chmod 和 chown 命令的语法。
我将从一个简短的命令参考部分开始,演示如何创建一些用户、组、文件和目录,您可以在设置权限时使用它们。
查看我之前的帖子,“了解 Linux 命令行”,以更好地使用这些命令。
创建一些用户帐户,以便您可以使用以下示例为不同的人设置不同的权限:
$ sudo useradd fsmith
图 1:创建用户 fsmith 的命令。
使用相同的方法创建 slee 和 mgarcia。
注意:以 root(管理员)用户身份登录 Linux 系统是一种糟糕的 安全实践。大多数系统强制您以普通用户身份登录,然后使用 sudo(超级用户执行)命令提升您的权限。使用 sudo 时,系统可能会提示您输入密码。
查看用户管理命令:
命令 | 描述 |
---|---|
useradd username | 创建新用户 |
usermod username | 修改现有用户 |
userdel username | 删除现有用户 |
也创建一些组。以下是一个示例:
$ sudo groupadd IT
创建 HR 和 PR 组,使用相同的语法。
查看组管理命令:
命令 | 描述 |
---|---|
groupadd groupname | 创建新群组 |
groupmod groupname | 修改现有群组 |
groupdel groupname | 删除现有群组 |
您可以在我最近的 Linux 用户和组文章 中找到更多详细信息。
现在您已经拥有了一些用户和组,请创建一些资源,以便您可以使用权限控制对它们的访问。
切换到 /home/fsmith 主目录。使用 mkdir 命令创建以下目录:
- departments
- departments/it_dept
- departments/hr_dept
- departments/pr_dept
图 2:确认部门目录已存在。
这些代表您管理 Linux 服务器的模拟公司中的三个部门。
使用 touch 命令在指定目录中创建这些文件:
- 在 it_dept 目录中,创建 password-reset.txt
- 在 hr_dept 目录中,创建 policies.txt
- 在 pr_dept 目录中,创建 press-releases.txt
在 此处 找到有关 管理 Linux 文件和目录的更多信息。
用户、文件和权限都是单个较大主题的一部分:访问控制。用户帐户是身份,文件是资源。权限根据身份控制对资源的访问。例如,权限控制 fsmith 是否可以读取 fileA.txt 和 slee 是否可以更改 fileB.txt 的内容。
您可能会认为用户和组管理、文件管理和文件权限教程的内容是一个相关的主题集合——控制对文件的访问。
设置权限需要您了解可用的访问级别并管理这些访问级别适用于谁。本节介绍管理 Linux 权限所需的权限和身份。
Linux 权限提供三种访问级别:读、写和执行。它们的行为在应用于文件或目录时略有不同。
下表解释了读、写和执行权限在应用于文件时的含义。
权限 | 字符 | 描述 |
---|---|---|
读 | r | 查看文件内容 |
写 | w | 修改文件内容 |
执行 | x | 如果文件是程序或脚本,则运行它 |
此表显示了读、写和执行权限如何应用于目录。
权限 | 字符 | 描述 |
---|---|---|
读 | r | 列出和复制目录内容 |
写 | w | 在目录中添加或删除文件(也需要 x) |
执行 | x | 使用 cd 进入目录 |
一个重要的区别是,需要在目录上拥有执行权限才能使用 cd 命令进入该目录。需要在文件上拥有执行权限才能将其作为程序或脚本运行。
Linux 识别三种用于访问控制的身份:
- 拥有文件或目录的一个用户。
- 与文件或目录关联的一个组。
- 所有不是该用户或组成员的其他人。
身份 | 字符 | 描述 |
---|---|---|
用户(所有者) | u | 文件或目录的创建者或关联身份。 |
组 | g | 与文件或目录关联的一个组。 |
其他 | o | 所有不是用户或组的帐户。 |
三种访问级别(rwx)可以应用于三种身份(ugo)。
显示目录内容的命令是 ls(“list”的缩写)。添加 -l 选项以显示文件和目录权限。在这些示例中使用 ls -l 来显示对权限的更改。
图 3:使用 ls -l 命令显示现有权限。
图 4:识别哪些权限块适用于哪些身份。
上图用颜色编码来解释哪些权限适用于哪些身份。黄色框(rwx)中的权限适用于用户 fsmith。绿色框显示 IT 组的权限(rw-)。其他身份只有读权限(r--),如红色框所示。破折号表示未授予权限。
Linux 管理员有两种不同的设置权限的方法:绝对模式和符号模式。您的系统识别这两种模式,因此使用对您最简单的模式。您可能会发现自己在不同的时间点使用这两种模式。
绝对模式使用数字八进制值来表示权限级别。
权限 | 八进制值 |
---|---|
r(读) | 4 |
w(写) | 2 |
x(执行) | 1 |
绝对模式将数字权限值相加以表示整体访问级别。值的总和按特定顺序排列:用户、然后是组、然后是其他人。
示例 1: 读、写和执行访问 = r (4) + w (2) + x (1) = 7
- 所有访问级别的绝对模式值为 7 (4+2+1)
示例 2: 读和写(但不能执行) = r (4) + w (2) = 6
- 对文件的读写但不能执行访问的绝对模式值为 6。
示例 3: 仅读(无写和无执行) = r (4)
- 仅读访问的绝对模式值为 4。
绝对模式还按特定顺序使用三个身份,始终是用户、组、其他人(ugo)。
示例 1: 用户拥有 rwx,组拥有 r-x,其他人没有访问权限 = 750
- 用户拥有 7(读+写+执行的值),组拥有 5(读+执行),其他人拥有 0(没有值)。
示例 2: 用户拥有 rw-,组拥有 r–,其他人拥有 r– = 644
- 用户拥有 6 (r+w),组和其他人拥有 4 (读)。
绝对模式听起来非常复杂,但一旦您习惯了这些值,它比符号模式更简单、更快。我几乎总是使用绝对模式在 Linux 上工作。
符号模式将身份字母(ugo)、权限字母(rwx)和数学运算符(+,-,=)组合起来以配置权限。
以下是一些示例:
- 授予用户对文件的读权限如下所示:u+r(为用户添加读权限)。
- 为组授予读写权限为 g+rw(为组添加读写权限)。
- 从其他人那里删除读写权限为 o-rw(从其他人那里减去读写权限)。
符号模式的优点是能够逻辑地推断出您想要什么,而不是仅仅应用数学结果。您可能会对自己说,“我想为用户和组添加读写权限。” 这看起来很合乎逻辑:ug+rw。
现在您已经可以解释标准的 Linux 权限,是时候使用 chmod(“更改模式”)命令来设置权限。您将在这里使用绝对模式或符号模式。
无论您喜欢哪种模式,chmod 语法如下所示:
$ chmod PERMISSION filename
文件名值是命令的参数(它所作用的对象)。在以下示例中,我将对 fileA.txt 应用各种权限。
绝对模式示例:
示例 1:将用户权限设置为 u = rwx、group = r-x 和 others = —。
$ chmod 760 fileA.txt
示例 2:将 user = rw-、group = r–、others = r–
$ chmod 644 fileA.txt
此方法要求您使用三个身份的总和来声明所需的实际权限级别。
注意:本教程末尾有一个关于这些概念的练习。
符号模式不同,因为它从现有值中添加或减去所需的权限。如果用户已经对文件具有读取权限,但您还想授予写入权限,那么您只需将写入权限添加到现有值中:
$ chmod u+w fileA.txt
图 6:使用 chmod 命令设定使用符号模式的权限。
此示例保留了用户现有的读取权限,并且根本没有修改组或其他权限。
授予组读取和写入权限如下所示:
$ chmod g+rw fileA.txt
同样,这会保留现有的用户和其他人权限。
本教程末尾有一个关于这些概念的练习。
语法回顾:
- 绝对模式使用表示 rwx 权限的值之和。这些值按表示用户、组和其他的顺序列出。
- 符号模式将三个身份的首字母缩写(ugo)与三个访问级别的首字母缩写(rwx)结合使用 + 和 - 来添加或删除权限。
那么,在日常 Linux 任务中应该使用哪种模式?您应该了解并识别这两种模式,原因如下:
- 认证考试会测试您对这两种方法的掌握程度。
- 文档可能使用任一方法编写,因此您必须能够理解每种方法。
但是,您可以随意使用对您最有意义的模式。我更喜欢绝对模式,因为它需要更少的输入并且更直接。其他人则乐于使用符号模式。只要确保您理解这两种方法即可。
chmod 命令允许您设置权限,但 chown 命令会更改权限适用的对象。您可以更改用户(所有者)和组关联,将各种目录和文件重新分配给系统中的任何人。
您可能希望进行三种所有权更改:更改所有者(用户)、更改关联的组或同时更改两者。
要更改文件或目录的所有者,请键入:
$ chown user FILE
要更改分配给文件或目录的组,请键入:
$ chown :group FILE
要同时更改这两个值,请键入:
$ chown user:group FILE
考虑以下示例,您需要将 fsmith 帐户设置为 password-reset.txt 文本文件的所有者,您是在本教程开始时创建的:
$ chown fsmith password-reset.txt
接下来,将 HR 组与 hr_dept 目录关联。
$ chown :HR hr_dept
也许您需要将 mgarcia 设置为所有者,并将 PR 组与 pr_dept 目录同时关联:
$ chown mgarcia:PR pr_dept
使用 -R 选项更改目录及其所有内容的所有权。-R 选项代表“递归”。要将 IT 组与 it_dept 目录中的任何目录和文件关联,请键入:
$ chown -R :IT it_dept
我编写了一些基本练习,以帮助您练习使用 chmod 和 chown。
如果您没有在文章开头创建用户、组、目录和文件,请现在返回并创建它们。您可以根据需要修改用户名、组、目录和文件。通过匹配以下要求,练习使用本教程中的命令。
使用 chown 命令设置部门目录的所有权和组关联:
- 将 fsmith 设置为 it_dept 目录的所有者(使其递归)。
- 将 mgarcia 设置为 pr_dept 目录的所有者(使其递归)。
- 将 slee 设置为 hr_dept 目录的所有者(使其递归)。
- 将 IT、HR 和 PR 组递归地与匹配的部门目录关联。
图 7:根据说明中指定的设置所有者和组的结果。
使用绝对模式设置以下访问级别:
- 将 mgarcia 的递归权限设置为 rwx,PR 组的权限设置为 rwx,其他人的权限设置为 r-x,应用于 pr_dept 目录。
- 将 slee 的递归权限设置为 rwx,HR 组的权限设置为 rwx,其他人的权限设置为 r-x,应用于 hr_dept 目录。
- 将 fsmith 的递归权限设置为 rwx,IT 组的权限设置为 rwx,其他人的权限设置为 rwx,应用于 it_dept 目录。
图8:如说明中所述设置权限的结果。
使用 chown 命令设置所有权,以及使用具有 symbolic 模式的 chmod 命令来添加和取消权限,直到它们满足以下要求:
- 将 password-reset.txt 文件的访问权限授予 fsmith(rw-)、当前用户组(rw-)和其他人(rw-)。
- 将 press-releases.txt 文件的访问权限授予 mgarcia(rwx)、当前用户组(r--)和其他人(无访问权限)。
- 将 policies.txt 文件的访问权限授予 slee(rw-)、当前用户组(rw-)和其他人(r--)。
图 9:按照本说明设置权限后的结果。
可以自由创建其他用户、组、目录和文件以练习权限。
控制对资源的访问是管理员的一项关键技能。它始于创建正确的用户和组帐户来代表用户。接下来,创建和组织文件和目录,并牢记安全性。最后,为所有者 (u)、组 (g) 和所有其他人 (o) 设置适当的权限。这种身份、资源和权限的组合是控制数据访问的基本组成部分。
本教程介绍了标准的 Linux 权限,但还有一些额外的特殊权限可以修改它们的工作方式。额外的 Linux 访问控制列表提供了更强大的控制文件安全性的方法。
花时间练习管理对文件和目录的访问非常值得,方法是创建一些示例资源和用户,然后设置各种权限和所有权。