Linux功能如何与零/非零UID相关?

时间:2013-01-31 16:04:58

标签: linux setuid linux-capabilities

能力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)

现实情况如何?

1 个答案:

答案 0 :(得分: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

即。

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