假设我们有以下由用户root
和组拥有的文件root
:
-rw-r----- 1 root root 54 2017-12-18 04:21 1.txt
并假设我们有一个进程,其 afsuid
为root
,但其 a 为fsgid
除 之外的其他组root
。
文件的用户权限表示所有者用户可以读取和写入该文件,但不能执行该文件。但我认为既然进程有一个fsuid
of root
,那么该文件的用户权限不适用于该进程,因此该进程将能够读写和执行该文件,对吗?
现在假设我们有一个进程,其 afsgid
为root
,但其 a 为fsuid
除 之外的其他用户root
。
文件的组权限表示所有者组可以读取该文件,但不能写入和执行该文件。现在我认为在这种情况下,进程没有对该文件的完全访问权限,只有文件的组权限适用于该进程,对吗?
答案1
规则如下:
- 如果用户是 root 用户 (UID=0) 则授予完全访问权限
- 如果用户是所有者,则使用所有者三元组作为权限
- 如果用户不是所有者但属于组,则使用组三元组作为权限
- 如果用户既不是组的所有者也不是成员,则使用 other-triplet 作为权限
因此,对于 root 来说,这并不重要 - 但对于其他用户来说,它是适用的最具体的权限三元组。因此,在您的示例中,如果用户既是组的所有者又是组的成员,则使用所有者三元组(而不是组三元组)。因此,如果该组同时获得了读和写权限,但所有者只获得了读权限;那么只允许所有者读取该文件 - 即使他的组成员身份应该让他也写信吧。该组的其他(非所有者)成员将被允许读取和写入该文件。
如果需要,文件的所有者总是可以为自己添加更多权限 - 有时程序可以为您做到这一点。例如,如果您有一个写保护的文件(例如权限 r--r-----),某些编辑器将允许您无论如何写入它们(通常在确认后)。编辑器会像您一样运行,并且当您拥有该文件并可以更改其权限时,编辑器可以删除写保护并允许您保存该文件。
+++
这意味着 root 用户拥有该文件并获得读取和写入该文件的权限 - 所有者(root)也可以更改文件的权限。并且允许根组的成员阅读它。其他用户无法读取、写入或执行该文件。 (由于它是一个文本文件,因此执行它可能没什么意义。)
Linux 系统上的许多文件都以 root 用户作为其所有者,以 root 组作为其组。尽管传统上各种系统用户和系统组(例如 bin、sys、proc、operator)拥有许多文件而不是 root。例如,二进制文件(可执行程序)通常具有 bin-user 和/或 bin-group 作为所有权(例如 bin:bin 或 root:bin)。
例外的是必须以 root 身份运行的可执行文件 - 它们必须由 root 用户拥有。通常,程序会在执行该程序的用户的许可下执行。如果您运行该命令ls
,它将以您的权限运行,因此无法显示您不允许列出的目录(如其他用户的目录)。另一方面,如果命令以 root 权限运行,则它可以访问整个系统(这就是为什么您不希望在大多数可执行文件上这样做)。
一个很好的例子是passwd
- 命令,它可以让您更改密码。它以 root 身份运行,并为任何用户提供访问受限用于存储用户和密码数据库的文件。
rwsr-xr-x root:root /usr/bin/passwd
s=x+S,其中 x 是执行权限,S 作为所有者运行或作为组运行,具体取决于它是为所有者还是组三元组设置。
所以 root 用户是所有者;并获得读、写、执行权限。 root-group是组,有读取和执行权限。而其他用户也获得了读取和执行权限。此外,可执行文件将以其所有者的权限运行 - 即。 root - 并且没有执行它的用户的权限(这是正常的),这要归功于所有者三元组中的“s”(u+s)。
另一个例子,这次来自 BSD(UNIX 操作系统):
rws-x--- root:wheel /bin/su
这意味着可执行文件su
始终以其所有者(root)身份运行。该 root 用户可以读取、写入和执行它。轮组的成员可以执行它,但不能读取(例如复制)它。并且其他用户既不能读取、写入也不能执行它。 (该命令su
也存在于 Linux 上,但这里所有用户都可以执行它 - 但它仍然以 root 用户身份运行。)
其他程序也可以作为某些系统用户(和组)运行 - 例如,apache
网络服务器通常作为 www-data-user(和 www-data-group)运行。这样,如果由于缺乏不属于它的权限而受到损害,它就不会造成太大的损害。
答案2
您的第二点是正确的,组成员root
可以读取该文件,但不能写入或执行它。
您的第一点是不正确的 - 即使用户也root
无法执行该文件。root
可以轻松更改权限以使其可执行,但在执行该步骤之前无法实际执行它。
需要注意的一个重要警告是,对于 shell 脚本或其他纯文本脚本,可以“获取”它们来执行,而无需设置可执行位。在此示例中,如果文件的内容1.txt
实际上是 bash 脚本,即使具有 0650 权限,您也可以运行bash 1.txt
并执行文件内的命令,有效地运行脚本并似乎绕过执行权限位。
警告可以在这里看到:
# ./myecho
Hi there!
# chmod -x myecho
# ./myecho
-bash: ./myecho: Permission denied
# sh myecho
Hi there!