【发布时间】:2021-05-03 02:01:36
【问题描述】:
我正在尝试运行我编写的一个简单的 bpf 程序。但我无法以非 root 用户身份运行它。下面是我要加载的程序,它基本上获取指向 fd 为 map_fd 的地图的指针(我没有显示创建地图的代码)。它以 root 身份运行,但由于某种原因,非 root 用户失败。
uname -a 的输出
Linux 5.8.0-38-generic #43~20.04.1-Ubuntu SMP Tue Jan 12 16:39:47 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
BPF 程序
BPF_MOV64_IMM(BPF_REG_0, 0),
BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),
BPF_LD_MAP_FD(BPF_REG_1,map_fd),
BPF_RAW_INSN(BPF_CALL | BPF_JMP, 0, 0, 0, BPF_FUNC_map_lookup_elem),
BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),
BPF_EXIT_INSN(),
BPF_EXIT_INSN(),
【问题讨论】:
-
大多数程序类型仅限于root(或者,准确地说,它们require a set of capabilities非root用户通常没有)。一个值得注意的例外是附加到网络套接字的 eBPF 程序,这是您使用的吗?如果不是,则预计会遭到拒绝。您是否正在尝试以非 root 用户身份加载 XDP 程序,正如您问题上的标签所暗示的那样?
-
@Qeole 是的,我正在使用 BPF_PROG_TYPE_SOCKET_FILTER 的 prog 类型。我认为我们可以以非特权用户的身份运行这个 prog。
标签: linux-kernel bpf ebpf