emit a warning in networkd if managed sysctls are changed
authorMatteo Croce <teknoraver@meta.com>
Mon, 1 Jul 2024 19:58:30 +0000 (21:58 +0200)
committerMatteo Croce <teknoraver@meta.com>
Wed, 11 Sep 2024 21:07:00 +0000 (23:07 +0200)
commit6d9ef22acdeac4b429efb75164341233955484af
tree16e3452e31120d66a6da0f871cb6135e7198e1f4
parent64629617b6abbe3665a7f886f068c9e4f3b366a4
emit a warning in networkd if managed sysctls are changed

Monitor the sysctl set by networkd for writes, if a sysctl is
overwritten with a different value than the one we set, emit a warning.
Writes are detected with an eBPF program attached as BPF_CGROUP_SYSCTL
which reports the sysctl writes only in net/.

The eBPF program only reports sysctl writes from a different cgroup than networkd.
To do this, it uses the `bpf_current_task_under_cgroup_proto()` helper,
which will be available allowed in BPF_CGROUP_SYSCTL from kernel 6.12[1].

Loading a BPF_CGROUP_SYSCTL program requires the CAP_SYS_ADMIN capability,
so drop it just after the program load, whether it loads successfully or not.

Writes are logged but permitted, in future the functionality can be
extended to also deny writes to managed sysctls.

[1] https://lore.kernel.org/bpf/20240819162805.78235-3-technoboy85@gmail.com/
14 files changed:
catalog/systemd.catalog.in
src/network/bpf/sysctl_monitor/meson.build [new file with mode: 0644]
src/network/bpf/sysctl_monitor/sysctl-monitor-skel.h [new file with mode: 0644]
src/network/bpf/sysctl_monitor/sysctl-monitor.bpf.c [new file with mode: 0644]
src/network/bpf/sysctl_monitor/sysctl-write-event.h [new file with mode: 0644]
src/network/meson.build
src/network/networkd-link.c
src/network/networkd-manager.c
src/network/networkd-manager.h
src/network/networkd-sysctl.c
src/network/networkd-sysctl.h
src/network/networkd.c
src/systemd/sd-messages.h
units/systemd-networkd.service.in