【发布时间】: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 +s或setcap访问提升或连接到外部助手),例如有了capsetp,我们终于可以让自己打开原始套接字了。
据我目前的理解是这样的:
- x = !f && (a || c)
- y = !f && (b || a || c || e)
现实情况如何?
【问题讨论】:
-
如果有效 UID 为 0,那么您仍然需要在允许或有效集中有
CAP_NET_RAW(但当 uid 更改为 0 时,P 集被复制到 E设置),所以 IIUCx = !f && (c || a && e).
标签: linux setuid linux-capabilities