cap_dac_override 是 cap_dac_read_search 的超集吗?

tom*_*x86 6 permissions linux-kernel linux-capabilities

我正在努力限制现有复杂应用程序的功能,并且我一直在寻找可靠的来源一段时间,证明其中包含的权限cap_dac_overridecap_dac_read_search.

事实确实如此,这似乎是合乎逻辑的,如下所示capabilities(7)

CAP_DAC_OVERRIDE
* 绕过文件读取、写入和执行权限检查。

CAP_DAC_READ_SEARCH
* 绕过文件读取权限检查和目录读取和执行权限检查;
* 调用 open_by_handle_at(2);
* 使用 linkat(2) AT_EMPTY_PATH 标志创建到文件描述符引用的文件的链接。

另外,我对能力检查跟踪器的实验证实这cap_dac_override应该足够了。似乎在每次执行读访问cap_dac_read_search之前都会进行检查。cap_dac_override

我还在grsecurity 论坛上找到了以下帖子,不幸的是,该帖子仅涉及/proc

在这种情况下,上游内核的工作方式是首先检查 CAP_DAC_OVERRIDE,然后检查 CAP_DAC_READ_SEARCH。

cap_dac_read_search我仍然不确定如果我想授予我的应用程序对整个文件系统的完整读取访问权限,省略是否完全安全。我完全知道cap_dac_override另外授予写入权限,并且我想要这样。

是否有可能在内核中的某个地方只检查 forcap_dac_read_search而不检查 for cap_dac_override

为了安全起见,我应该包含这两种功能还是cap_dac_read_search在这种情况下完全多余?

Ohm*_*men 4

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

实际应用请参见https://github.com/gabrtv/shocker 。

如果您的应用程序只需要完全访问文件系统,那么CAP_DAC_OVERRIDE正如您已经得出的结论。