【问题标题】:How Linux Capabilities relate to zero/non-zero UID?Linux 功能如何与零/非零 UID 相关?
【发布时间】:2013-01-31 16:04:58
【问题描述】:

manpage的能力比较长,有些东西我不是很懂。

例如,一个决定我们是否有权访问 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)

现实情况如何?

【问题讨论】:

  • 如果有效 UID 为 0,那么您仍然需要在允许或有效集中有 CAP_NET_RAW(但当 uid 更改为 0 时,P 集被复制到 E设置),所以 IIUC x = !f && (c || a && e).

标签: linux setuid linux-capabilities


【解决方案1】:

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

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

  • 零/非零 uid 仅在其更改且“root hack”处于活动状态时才有意义;
  • 只有有效的能力用于检查;其他都是能力管理;
  • 边界集和继承的功能是关于 execve => 超出此答案的范围。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 2021-01-26
    • 2011-12-28
    • 2022-08-18
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    相关资源
    最近更新 更多