BPFトークン移譲

IncusはLinuxカーネル6.9で追加されたBPFトークンを通してBPFケーパビリティーの移譲をサポートします。

security.bpffs.delegate_cmdssecurity.bpffs.delegate_mapssecurity.bpffs.delegate_progssecurity.bpffs.delegate_attachsのいずれかの設定オプションが設定されている場合、IncusはBPFファイルシステムをsecurity.bpffs.path設定オプションで指定されたパスでコンテナにマウントし指定されたケーパビリティーをコンテナに移譲します。

これらのオプションに設定可能な値はカーネルのバージョンに依存し、BPFのヘッダーファイル(カーネルツリー内ではinclude/uapi/linux/bpf.h、ほとんどのディストリビューションではカーネルソースをインストールしていれば/usr/include/linux/bpf.h)内のenumsで定義されています:

キー

カーネルのenum

除去する接頭辞

security.bpffs.delegate_cmds

bpf_cmd

BPF_

security.bpffs.delegate_maps

bpf_map_type

BPF_MAP_TYPE_

security.bpffs.delegate_progs

bpf_prog_type

BPF_PROG_TYPE_

security.bpffs.delegate_attachs

bpf_attach_type

BPF_

これらの設定オプションはカンマ区切りリストの値をとり、さらにanyという値を指定するとそのタイプのすべての可能な値を移譲します。

キー

security.bpffs.delegate_cmds

map_create,obj_get,link_create

security.bpffs.delegate_maps

hash,array,devmap,queue,stack

security.bpffs.delegate_progs

socket_filter,kprobe,cgroup_sysctl

security.bpffs.delegate_attachs

any

$ mount -t bpf
none on /sys/fs/bpf type bpf (rw,relatime,delegate_cmds=map_create:obj_get:link_create,delegate_maps=hash:array:devmap:queue:stack,delegate_progs=socket_filter:kprobe:cgroup_sysctl,delegate_attachs=any)