我有以下文件:
---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt
我将用户切换到终端root,我注意到以下行为:
>我可以读取此文件并写入.
>我无法执行此文件.
>如果我在用户权限(— x ——)或组权限(—— x —)或其他权限(——中设置x位) — x)文件,然后我就可以执行这个文件了.
任何人都可以向我解释或指向一个教程,解释当root用户处理文件和目录时适用的所有规则吗?
解决方法:
对文件和目录的特权访问实际上是由功能决定的,而不仅仅是root用户.在实践中,root通常具有所有可能的功能,但是在某些情况下,可以删除所有/许多功能,或者将某些功能(其进程)提供给其他用户.
简而言之,您已经描述了访问控制检查如何为特权进程工作.以下是不同功能实际影响它的方式:
主capability here is CAP_DAC_OVERRIDE,一个具有它的进程可以“绕过文件读取,写入和执行权限检查”.这包括读取和写入任何文件,以及读取,写入和访问目录.
它实际上不适用于执行未标记为可执行文件的文件.在访问检查文件之前,comment in generic_permission(fs / namei.c)说明了这一点
Read/write DACs are always overridable. Executable DACs are overridable when there is at least one exec bit set.
如果您尝试执行该文件,代码会检查是否至少设置了一个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不足以忽略它. (它会给你写权限,但通常在粘性目录中你有这个,并且限制它.)
(我认为特殊设备在这里算作“文件”.至少generic_permission()只对目录进行类型检查,但我没有在那之外检查.)
当然,有些情况甚至功能都无法帮助您修改文件:
> / proc和/ sys中的一些文件,因为它们不是真正的实际文件
> SELinux和其他可能限制root的安全模块
> chattr不可变i并且只在ext2 / ext3 / ext4上附加一个标志,这两个标志都停止了root,并防止文件重命名等.
>网络文件系统,服务器可以在其中进行自己的访问控制,例如NFS中的root_squash将root映射到nobody
> FUSE,我认为可以做任何事情
>只读安装
>只读设备
标签:linux,permissions,root
来源: https://codeday.me/bug/20190808/1624178.html