解密 Linux 文件系统权限

已发表: 2017-02-24

Linux 文件权限对某些人来说似乎是神秘的数论象形文字,这是可以理解的。 Linux 的文件系统权限模型源于 UNIX 的遗留问题。 但是,一旦您了解了它们背后的逻辑,它们就很容易掌握。

权限组和类型

使用以下信息在文件系统中定义所有文件和文件夹访问控制:

  • 三个权限组: u代表所有者, g组, oa ,所有用户。
  • 三种权限类型: r 、read、 x 、execute、 w 、write。

权限类型是字符“r”、“x”和“w”,称为标志,如果您以某种方式列出文件或文件夹的权限,就会显示为这样。 未设置的标志用“-”字符表示。 权限组用于更改文件所有权和组的命令,我们将在稍后进行深入研究。

查看权限

您可以使用 GUI 文件管理器或通过在控制台终端中检查ls命令的输出来查看文件或文件夹的权限。

打开终端并输入以下命令:

$触摸测试

$ ls -la 测试

-rw-r–r– 1 yorgos 员工 0 Feb 23 17:07 测试

字符串“-rw-r–r–”包含我们感兴趣的文件系统权限信息。其余字段从左到右显示以下信息:

  • 该文件有多少个链接 (1)
  • 所有者用户 ID (yorgos)
  • 组 ID(员工)
  • 以字节为单位的文件长度 (0)
  • 创建日期(2 月 23 日)
  • 创建时间 (17:07)
  • 文件名(测试)

权限位

您会注意到有 9 种不同的权限组和类型组合,但有 10 个标志位置。 第一个显示文件类型标志,而后者指示权限本身。 文件类型可以是:“-”代表文件,“l”代表符号链接(这些文件系统链接只指向另一个文件)和“d”代表目录。 由于我们示例中的第一个字符/标志是“-”,因此我们谈论的是一个简单的文件。 继续,让我们分解权限字段:

:文件类型(可以包含 l、- 或 d)

rw- :读写权限(不执行)。 这些权限是给所有者的。

r- : 读权限,没有写和执行权限。 这些权限涉及属于某个组的用户。

r– :读权限,不能写和执行。 最后,这些权限关系到其他所有人。

所以实际上,这只是意味着“这个文件可以由所有者读取和写入,而其他人是只读的”。 该组共享相同的权限。

修改权限

同样,为了修改文件或文件夹的权限,您可以使用 GUI 命令(这超出了本文的范围,因此我们不会去那里)或在终端中使用某些 linux 命令。 我们将要使用的命令称为chmod (更改文件模式)。 chmod命令接受以多种不同方式改变其行为的各种参数,但其一般用途如下:

$ chmod <模式> <文件>

<mode> 由以下符号指定:

r读取标志

w写标志

x执行标志

u用户/所有者权限标志

g组权限标志

o其他用户权限标志

还有一些其他的,但我们将在文章的最后部分讨论这些。

因此,假设您想为属于该组的用户授予执行权限(但首先要确保您是文件的所有者!):

$ chown g+x 测试
$ ls -l 测试
-rwxrwxrwx 1 yorgos 员工 0 Feb 23 17:07 测试

或者,也许您需要完全锁定其他所有人。 他们将无法读取、写入或执行文件:

$ chown o-rwx 测试
$ ls -l 测试
-rwxrwx— 1 yorgos 员工 0 Feb 23 17:07 测试

在这里,我们看到最后一个标志都未设置为“-”。
如果您想查看更多示例,请通过发出以下命令查阅 chmod 的手册页:

$ man chmod

所有者和组

您还可以使用chown命令更改文件的文件和组所有权。

chown命令接受以某种方式改变其行为各种参数,但最常见的用法如下:

# chown <所有者> <文件>

或者

# chown <所有者:组> <文件>

第一个示例用于将文件的所有者更改为另一个文件的所有者。 但请记住,您必须具有 root 访问权限才能更改文件的所有权。 因此,通过执行以下操作:

# chown 没有人测试

# ls -l 测试

-rwxrwxrwt 1 无人员工 0 Feb 23 17:07 测试

现在发现该文件归用户标识“nobody”所有,不再归“yorgos”所有。

同样的命令:

# chown none: 车轮测试

# ls -l 测试

-rwxrwxrwt 1 无人轮 0 Feb 23 17:07 测试


将文件的所有权更改为nobody并将组更改为wheel

如果您想了解有关该命令及其各种参数的更多信息,请通过发出以下命令查阅 chown 手册页:

$ man chown

特殊权限

除了我们已经在文章中提到的权限类型和组之外,还有一些其他的,称为“特殊权限”。

这些是:

s       设置用户 ID 和设置组 ID 标志。

      粘性标志。

第一个是通过在chmod命令中以通常的方式使用“s”标志设置的,如下所示:

$ chmod u+s 测试
$ ls -l 测试
-rwsrwx—   1 约戈斯  职员  0 二月 23 17:07 测试

此标志也称为 SUID(设置用户 ID)或 SGID(设置组 ID)标志。 如果设置了该位,则文件继承其所有者的访问权限。 这意味着执行文件的任何人都以所有者身份执行此操作。 SGID 类似,但文件继承了其组的访问权限。 当然,这可能会导致安全问题,因此必须小心。

粘性位或“t”特别有用。 当设置在一个目录中时,通常像 /tmp 一样共享,在那里创建的文件只能由它们各自的所有者重命名或删除。 如果未设置粘性位,则目录的所有者无法控制它们。

您可以通过发出以下命令使目录“粘性”:

$ chmod +t /目录

八进制表示

除了使用标志来定义诸如“r”和“w”之类的权限之外,您还可以使用数值。 chmod命令将以下值分配给权限:

“r” = 4

“w” = 2

“x” = 1

因此,为了将文件设置为所有者可以读/写/执行,其他人可以读/执行,意思是“-rwxr-xr-x”,我们这样计算数值:

rwx = 4+2+1 = 7

rx = 4+1 = 5

我们最后发出命令:

$ chmod 755 测试
$ ls – 测试
-rwxr-xr-x   1 约戈斯  职员  24 年 2 月 21 日 02:08 测试

通过使用不同的权限和数值自行练习以掌握它!