📜  Linux 中的高级文件权限

📅  最后修改于: 2022-05-13 01:57:28.970000             🧑  作者: Mango

Linux 中的高级文件权限

Linux 文件权限不限于“ rwx ”位,除了这些“ rwx ”权限之外,还有 3 个特殊权限,分别是SUID、SGID、Sticky Bit 。本文是关于 3 种特殊文件权限以及如何设置和删除这些权限位。

设置用户 ID (SUID)

在 Linux 中,默认情况下,当用户执行文件时,该文件以执行它的用户的权限执行。如果我们在可执行文件上设置 SUID(set-user-ID) 位,这个行为可以改变,那么文件将始终以文件所有者的权限运行,无论谁运行可执行文件。
注意:只有文件的所有者或 root 可以设置 SUID 位

1.您可以通过将u + s传递给 chmod 命令来设置 SUID 位:

设置-SUID

2.或者,您可以通过在八进制字符串加上“ 4 ”前缀来使用八进制符号。 (如 4724 而不是 724)。



使用八进制符号设置 SUID

当您注意到“s”字母而不是通常的“x”来执行所有者的权限时。此字母“s”表示已为相关文件或目录设置了 SUID(set-user-ID) 位。

3.您可以通过将u – s传递给 chmod 命令来删除 SUID 位:

SUID-删除

设置组 ID (SGID)

在文件上设置组 ID 位:设置组 ID (SGID) 类似于 SUID,不同之处在于,设置了 SGID 位的可执行文件以拥有文件的组的权限运行

1.您可以通过将g + s传递给 chmod 命令来设置 SGID 位:

设置SGID位

2.或者,您可以通过在八进制字符串加上“ 2 ”前缀来使用八进制符号。 (例如 2755 而不是 755)。



SGID-八进制表示法

当您注意到组的执行权限中的“s”字母而不是通常的“x”时。此字母“s”表示已为相关文件或目录设置了 SGID(set-group-ID) 位。

3.您可以通过将g –s传递给 chmod 命令来删除 SGID 位:

SGID 位集

在目录上设置组 ID 位:当设置组 ID (SGID) 位时,目录下所有新创建的子目录/文件将继承与目录本身相同的组所有权。如果未设置 SGID 位,则所有新创建的文件都将有一个组作为用户的默认组。

Set-group-ID 在多用户设置中非常有用,其中具有不同主要组的用户可以访问彼此的文件,如本文所示。

这里有一个例子可以更好地理解这一点。

1.让我们创建一个由用户:root 和组:root 拥有的目录父目录。

SGID-create-user-owned-directory

2.现在,如果我们在不同用户的父目录下创建一个子目录,那么该目录的组所有者默认为用户的主要组。



SGID-group-owner-default-primary-group

3.现在,如果我们为 parent 设置 SGID 位并再次在 parent 下创建新的子目录,那么这次它将具有默认为 parent 的组的组。这是因为父级设置了 SGID 位,其下新创建的子目录/文件将继承父级的组。

seti-SGID-for-parent-bit

粘性位

如果设置了目录上的粘滞位,则该目录下的子目录/文件只能由文件所有者、目录所有者或 root 用户删除。此特殊权限可用于防止用户删除每个人都具有读取、写入和执行访问权限的共享文件夹中其他用户的文件。

让我们看一个例子。

1.首先创建一个共享文件夹,每个人都拥有读取、写入和执行权限。

创建共享文件夹

2.在此共享文件夹中,可以删除其他用户的目录/文件。

删除其他用户的目录文件

3.现在让我们在 sharedFolder 上设置粘性位。

设置粘性位

正如您在其他人的执行权限中注意到“t”字母而不是通常的“x”一样。此字母“t”表示已为相关文件或目录设置了粘滞位。现在因为在 sharedFolder 上设置了粘性位,文件/目录只能由所有者或 root 用户删除。

用户或根用户只删除文件