功能手册页相当长,我不完全理解某些内容。
例如,一个决定我们是否可以访问 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)
实际情况如何?