我正致力于限制现有的复杂应用程序的功能,我一直在寻找可靠的来源证明这一点
cap_dac_override
中包含的权限是cap_dac_read_search
的超集。
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
在这种情况下是否完全冗余?
答案 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
时,由于权限被拒绝,单个操作不会失败。