cap_dac_override是cap_dac_read_search的超集吗?

时间:2018-01-18 20:24:49

标签: permissions linux-kernel linux-capabilities

我正致力于限制现有的复杂应用程序的功能,我一直在寻找可靠的来源证明这一点 cap_dac_override中包含的权限是cap_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 forums上的帖子,其中只有/proc令人不安:

  

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

如果我想授予我的应用程序对整个文件系统的完全读取权限,我仍然不确定是否完全可以省略cap_dac_read_search。我完全清楚cap_dac_override还授予了写入权限,我希望如此。

内核中的somwhere是否有可能只检查cap_dac_read_search而不是cap_dac_override

为了安全起见,我是否应该同时包含这些功能,或者cap_dac_read_search在这种情况下是否完全冗余?

2 个答案:

答案 0 :(得分:2)

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

有关实际应用,请参见https://github.com/gabrtv/shocker

如果您的应用程序仅需要对文件系统的完全访问权限,那么就像您已经得出的结论,CAP_DAC_OVERRIDE

答案 1 :(得分:0)

经过一些额外的验证和实际测试后,似乎cap_dac_override确实是cap_dac_read_search的超集。

从相关应用程序中删除cap_dac_read_search时,由于权限被拒绝,单个操作不会失败。