3

功能手册页相当长,我不完全理解某些内容。

例如,一个决定我们是否可以访问 CAP_NET_RAW 的函数会是什么样子?

输入:

  • a = 有效 uid 为 0
  • b = 有一些真实的/保存的/任何 uid 为 0
  • c = CAP_NET_RAW 为 +e
  • d = CAP_NET_RAW 为 +i
  • e = CAP_NET_RAW 为 +p
  • f = CAP_NET_RAW 被排除在“边界集”之外

输出:

  • x = 我们现在可以调用socket而不是得到 EPERM
  • y = 经过一些诡计(不涉及基于文件系统chmod +ssetcap访问提升或连接到外部助手),例如,capsetp我们终于可以让自己打开原始套接字。

据我目前了解,它是这样的:

  • x = !f && (a || c)
  • y = !f && (b || a || c || e)

实际情况如何?

4

1 回答 1

0

多阅读文档,现在看起来是这样的:

x = c
can_regain_caps_without_execve = (a || b) && !NO_NEW_PRIVS && (!SECBIT_NO_SETUID_FIXUP || ( CAP_SETPCAP && !SECBIT_NO_SETUID_FIXUP_LOCKED))
y = c || e || can_regain_caps_without_execve

IE

  • 零/非零 uid 仅在其更改且“root hacks”处于活动状态时才有意义;
  • 仅使用有效的能力进行检查;其他都是能力管理;
  • 边界集和继承的能力是关于 execve => 超出这个答案的范围。
于 2013-02-01T19:01:05.680 回答