我有以下文件:
---------- 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 的安全模块
chattr
ext2/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 没有任何限制。