Permissions cap_dac_覆盖cap_dac_read_search的超集吗?

Permissions cap_dac_覆盖cap_dac_read_search的超集吗?,permissions,linux-kernel,linux-capabilities,Permissions,Linux Kernel,Linux Capabilities,我正致力于限制现有复杂应用程序的能力,我一直在寻找一个可靠的来源来证明这一点 cap\u dac\u override中包含的权限是cap\u dac\u read\u search的超集 从以下几点来看,情况确实如此,这似乎是合乎逻辑的: CAP_DAC_覆盖 *绕过文件读、写和执行权限检查 CAP\u DAC\u READ\u SEARCH *绕过文件读取权限检查和目录读取并执行权限检查 *在(2)处通过句柄调用open *使用linkat(2)AT_EMPTY_PATH标志创建指向文件描述

我正致力于限制现有复杂应用程序的能力,我一直在寻找一个可靠的来源来证明这一点
cap\u dac\u override
中包含的权限是
cap\u dac\u read\u search
的超集

从以下几点来看,情况确实如此,这似乎是合乎逻辑的:

CAP_DAC_覆盖
*绕过文件读、写和执行权限检查

CAP\u DAC\u READ\u SEARCH
*绕过文件读取权限检查和目录读取并执行权限检查
*在(2)处通过句柄调用open
*使用linkat(2)AT_EMPTY_PATH标志创建指向文件描述符引用的文件的链接

此外,我的能力检查跟踪实验证实
cap\u dac\u override
应该足够了<每次执行读取访问时,在
cap\u dac\u覆盖
之前都会选中code>cap\u dac\u read\u search

我还发现了上的以下帖子,令人遗憾的是,它只涉及
/proc

上游内核的工作方式是首先检查CAP_DAC_覆盖,然后搜索CAP_DAC_READ_以查找这种情况

如果我想授予我的应用程序对整个文件系统的完全读取访问权,我仍然不确定省略
cap\u dac\u read\u search
是否完全安全。我完全知道,
cap\u dac\u override
额外授予写入权限,我希望这样

在内核的某个地方,是否可能只检查
cap\u dac\u read\u search
,而不检查
cap\u dac\u override


为了安全起见,我应该包括这两种功能吗?或者在这种情况下,
cap\u dac\u read\u search
是完全冗余的吗?

经过一些额外的验证和实际测试,似乎确实是这样的情况,
cap\u dac\u override
cap\u dac\u read\u search
的超集


当从相关应用程序中删除
cap\u dac\u read\u search
时,没有任何操作因权限被拒绝而失败

不,不是
CAP_DAC_OVERRIDE
仅允许忽略文件的权限位
CAP_DAC_READ_SEARCH
允许忽略读取权限位,并允许执行系统调用
open_by_handle_at
,该调用可用于在容器chroot外部读取

有关实际应用,请参阅


如果您的应用程序只需要完全访问文件系统,那么正如您已经得出的结论那样,
CAP\u DAC\u OVERRIDE

您显然是对的,有趣的是手册页明确提到了它,而我却没有注意到这个细节。在我的例子中,确实只是文件系统访问,所以它起作用了。