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

标签 linux setuid linux-capabilities

能力 manpage比较长,有些东西我没有完全理解。

例如,决定我们是否有权访问 CAP_NET_RAW 的函数看起来如何?

输入:

  • a = 有效 uid 为 0
  • b = 有一些真实的/保存的/任何为 0 的 uid
  • 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)

实际情况如何?

最佳答案

多看文档,现在好像是这样的:

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 有关 => 超出此答案的范围。

关于linux - Linux 功能如何与零/非零 UID 相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629995/

相关文章:

c - 处理过多的路径分隔符

linux id 和 setuid/setgid

c - 以 root 身份打开文件,但在读取文件之前放弃权限?

linux -/usr/bin/passwd 和 CAP_CHOWN 功能

linux-kernel - 仅使用 CAP_BPF 无法在 BPF 程序中直接访问数据包?

linux - 拥有 root 用户的进程是否始终拥有 Linux 中可用的所有功能?

linux - 通过 Linux 套接字发送结构体中的 void*

linux - Linux Shell 中的 `{} +` 在 Windows 中相当于什么?

c++ - 当我写socket时return 0是什么意思?

security - system() 与 execve()