“root”用户的文件权限如何工作?

“root”用户的文件权限如何工作?

我有以下文件:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

我在终端中切换了用户root,我注意到以下行为:

  • 我可以读取这个文件并写入它。

  • 我无法执行这个文件。

  • 如果我设置该文件的x用户权限(---x------)或组权限(------x---)或其他权限(---------x)中的位,那么我将能够执行该文件。

root谁能向我解释或向我指出一个教程,该教程解释了用户处理文件和目录时适用的所有规则?

答案1

对文件和目录的特权访问实际上是由能力决定的,而不仅仅是由存在root与否决定的。在实践中,root通常具有所有可能的功能,但在某些情况下可能会删除所有/许多功能,或者将某些功能提供给其他用户(他们的进程)。

简而言之,您已经描述了特权进程的访问控制检查如何工作。以下是不同功能对其的实际影响:

主要的这里的能力是CAP_DAC_OVERRIDE,拥有它的进程可以“绕过文件读取、写入和执行权限检查”。这包括读取和写入任何文件,以及读取、写入和访问目录。

它实际上不适用于执行未标记为可执行文件的文件。这发表评论generic_permission( fs/namei.c),在访问检查文件之前,表示

读/写 DAC 始终是可覆盖的。当至少设置了一个执行位时,可执行 DAC 是可覆盖的。

x如果您尝试执行该文件,代码会检查是否至少设置了一位。我怀疑这只是一个方便的功能,以防止意外运行随机数据文件并获得错误或奇怪的结果。

无论如何,如果您可以覆盖权限,您只需制作一个可执行副本并运行它即可。(虽然理论上来说,进程的 setuid 文件可能会覆盖文件权限 ( CAP_DAC_OVERRIDE),但没有其他相关功能 ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID)。但是CAP_DAC_OVERRIDE允许编辑/etc/shadow和类似的内容,所以它大约是相等的无论如何,只是拥有完全的 root 访问权限。)

还有CAP_DAC_READ_SEARCH允许读取任何文件和访问任何目录的功能,但不能执行或写入它们;这CAP_FOWNER允许进程执行通常仅为文件所有者保留的操作,例如更改权限位和文件组。

仅在 下提到了覆盖目录上的粘性位CAP_FOWNER,因此似乎CAP_DAC_OVERRIDE不足以忽略这一点。 (它会给你写权限,但通常在粘性目录中你无论如何都有这个权限,并+t限制它。)

(我认为特殊设备在这里算作“文件”。至少generic_permission()只有目录的类型检查,但我没有检查除此之外的内容。)


当然,仍然存在即使功能也无法帮助您修改文件的情况:

  • /proc和中的一些文件/sys,因为它们不是真正的实际文件
  • SELinux 和其他可能限制 root 的安全模块
  • chattrext2/ext3/ext4 上的不可变+i和仅附加+a标志,这两个标志甚至会停止 root,并阻止文件重命名等。
  • 网络文件系统,服务器可以进行自己的访问控制,例如root_squash在 NFS 中将根映射到无人
  • FUSE,我认为它可以做任何事情
  • 只读挂载
  • 只读设备

答案2

这与您注意到的默认权限完全相同:

  • 读和写:
    默认情况下,Root用户可以访问系统中的任何文件。您可以通过更改属性来删除此访问权限,如下所示:查特尔。然后将其与能力联系起来。

  • 执行:
    除非至少设置了一个执行位,否则 root 用户没有执行权限。

答案3

myFile.txt通过 获得的chmod 000 myFile.txt

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

---------表示用户、组和其他没有权限。

root 用户有一个无限制的修改此文件的能力。读/写被授予。要执行此文件,root 用户需要使其可执行。 (chmod 100、010 或 001)

答案4

让我从理论上解释一下。

root用户是操作系统的王者。

如果一个文件或目录具有 X 等任何执行权限,但没有其他权限,并且像 Steve 用户这样的用户拥有该文件,那么 root 也可以执行该文件。

永远记住,在 Linux 中 root 可以做任何事情,root 没有任何限制。

相关内容