pat*_*lea 7 kernel centos selinux docker bpf
我正在运行一个 docker 容器,用于监控 Centos 7 服务器中的其他容器。由于 SELinux 默认启用,因此当它使用以下信息调用任何 bpf 操作时,它会阻止我的监控进程:
type=AVC msg=audit: avc: denied { map_create } for
pid=16739 comm="monitor" scontext=system_u:system_r:spc_t:s0
tcontext=system_u:system_r:spc_t:s0 tclass=bpf permissive=0
Run Code Online (Sandbox Code Playgroud)
我正在使用这样的 test-bpf.c 程序
#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <linux/bpf.h>
#include <unistd.h>
#include <sys/syscall.h>
int main() {
union bpf_attr attr = {
.map_type = BPF_MAP_TYPE_HASH,
.key_size = 4,
.value_size = 4,
.max_entries = 256,
};
int ret = syscall(__NR_bpf, BPF_MAP_CREATE, &attr, 120);
fprintf(stderr, "ret = %d (%s)\n", ret, strerror((ret > 0) ? 0 : ret));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和一个 Dockerfile 像
FROM ubuntu:20.04
ADD strace /usr/bin/strace
ADD test-bpf /test-bpf
Run Code Online (Sandbox Code Playgroud)
并使用--privileged --security-opt seccomp=unconfined -v /sys/kernel/debug:/sys/kernel/debug.
如果 docker 服务器在 ubuntu(默认情况下禁用 SELinux)上运行,则此方法有效。我可以更新主机上的 SELinux 策略以允许容器中的 bpf 调用吗?docker 服务器可以修改 SELinux 策略以启用 bpf 调用吗?
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |