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

Ste*_*eve 33 linux root permissions

我有以下文件:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我无法执行此文件。

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

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

ilk*_*chu 41

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

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

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

它实际上不适用于执行未标记为可执行文件的文件。( ) 中的注释generic_permissionfs/namei.c,在访问检查文件之前,说

读/写 DAC 始终是可覆盖的。当设置了至少一个 exec 位时,可执行 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 的安全模块
  • chattr不可变+i且仅+a在 ext2/ext3/ext4 上附加标志,这两者甚至会停止 root,并防止文件重命名等。
  • 网络文件系统,服务器可以在其中进行自己的访问控制,例如root_squash在 NFS 中将 root 映射到 nobody
  • FUSE,我认为它可以做任何事情
  • 只读挂载
  • 只读设备


Kev*_*ire 14

这与您注意到的默认权限完全一样:

  • 读写:
    默认情况下,Root 用户可以访问系统中的任何文件。您可以通过更改诸如在这里解释的属性来删除此访问权限:chattr。然后将其与能力相关联。

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

  • 我说的是这样的情况:[不可写文件](https://serverfault.com/questions/246360/cannot-write-to-file-as-root),[不可删除文件](https://unix.stackexchange .com/questions/206594/why-cant-i-delete-this-file-as-root) (2认同)

GAD*_*D3R 5

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
Run Code Online (Sandbox Code Playgroud)

--------- 意味着没有用户,组和其他权限。

root 用户可以不受限制地修改此文件。读/写被授予。要执行此文件,root 用户无论如何都需要使其可执行。(chmod 100, 010 或 001)