与其请求原谅,不如先斩后奏...

作者:Shawn Powers

...相比理解 Linux 权限! 说实话,其实并非如此。Linux 权限简单而优雅,一旦你理解它们,就很容易使用。八进制表示法有点奇怪,但一旦你理解了它存在的原因,它也就变得有意义了。

用户和组

首先,我需要说明 Linux 确实支持文件和文件夹权限的 ACL。但这并非默认的工作方式,ACL 的添加是为了解决某些情况下需要的精细控制。大多数 Linux 系统依赖于标准的 POSIX 权限。 这正是我在这里要介绍的内容。

每个文件都有一个所有者和一个组成员身份。 如果你输入 ls -l,你将在当前目录中的所有文件和文件夹中看到所有者和组。POSIX 权限允许你控制用户、组和第三组用户“其他”的读取、写入和执行能力。在三组不同的用户上使用这三个方面,可以在文件系统上实现相当复杂的“谁可以做什么” 。

图 1 显示了文件列表的示例。我已经分隔了不同的部分,显示了哪些字段是什么。请注意,第一个字段通常是“d”或“-”;前者出现在目录上,后者出现在常规文件上。 对于文件,权限的意义很直接。如果“读取”位被打开,则表示该用户(用户、组或其他)可以读取文件的内容。如果设置了“写入”位,则可以写入文件;如果设置了“执行”位,则可以执行该文件。执行位通常设置在二进制文件或您要直接运行的脚本上。

图 1. 文件列表示例

在文件夹上,权限的工作方式几乎相同:读取意味着能够查看文件夹中的文件,写入是能够将文件保存到文件夹中。执行有点不太明显。当“执行”位被设置时,它表示用户或组可以进入该目录。因此,只要您具有对文件夹的执行访问权限,cd 命令就可以工作。

更改权限

虽然 Linux 系统通常在文件创建时带有相当合理的权限标准,但通常需要更改它们。为此,您可以使用 chmod 工具。格式是使用


chmod u+rw,g-r,o+rwx file.txt

诚然,这是一个相当复杂的例子,但让我们分解一下。加号或减号之前的字母 u 代表用户,g 代表组,o 代表其他。然后,您可以添加或删除(+ 或 -)您想要的任何方面。不需要指定所有三个用户定义,它们可以像这样组合在一起


chmod ugo+rw file.txt

如果您想同时更改用户、组和其他,也可以省略“ugo”。因此,以下示例都执行相同的操作


chmod ugo-rw file.txt
chmod -rw file.txt
chmod u-rw,g-rw,o-rw file.txt

虽然 “ugo” 格式相当强大,但有时构造加号和减号的字符串以获得您想要的确切权限字符串非常复杂。这就是八进制表示法发挥作用的地方。它有点令人困惑,但一旦理解,就方便得多。

八进制表示法

在图 2 中,您可以看到我已经显示了每个权限位的数值。 通过简单地将数字相加,可以使用三个数字创建任何可能的权限组合。图 3 显示了一些如何计算这些权限的示例。

图 2. 每个权限位的数值

图 3. 创建权限

因此,使用八进制表示法,以下两个 chmod 语句在功能上是相同的


chmod ug+rw,ug-x,o+r,o-wx file.txt
chmod 662 file.txt

虽然使用八进制表示法设置权限不是必需的,但这通常是完成这项工作的方式。

我建议您稍微玩一下 chmod,直到您在使用八进制表示法时获得预期的结果。然后,为了好玩,看看您是否可以将一堆加号和减号串在一起以获得相同的结果!

Linux 权限简单、优雅,并在文件系统上提供了一些非常灵活的文件共享选项。我们在安装 Web 应用程序时最常使用它们,因为 Web 服务器以特定用户身份运行,并且该用户(或组)需要访问它尝试提供的文件。

Shawn 是 Linux Journal 的副编辑,并且从一开始就接触 Linux。他对开源充满热情,并且热爱教学。他还喝太多咖啡,这经常在他的写作中体现出来。

加载 Disqus 评论