Systemd 绑定规则对用户切片没有影响

Systemd 绑定规则对用户切片没有影响

我想防止用户test(1000)绑定到除 1537 之外的任何端口,因此根据systemd.资源控制我为用户 Slice配置SocketBindAllow=1537和。SocketBindDeny=any

但我仍然可以以用户 test 身份登录,运行nc -l 1234并绑定到端口 1234。我已经验证该 nc 进程是用户切片的一部分。我可以使用SocketBind*选项来限制用户可以绑定的端口以及如何限制?

# systemd --version
systemd 252 (252.6-1)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified
# cat << EOF > /etc/systemd/system/user-1000.slice.d/socket.conf
[Slice]
SocketBindAllow=80
SocketBindAllow=1537
SocketBindDeny=any
EOF
# systemd-daemon-reload
# systemctl show user-1000.slice | rg Bind
SocketBindAllow=1537
SocketBindAllow=80
SocketBindDeny=any
DropInPaths=/usr/lib/systemd/system/user-.slice.d/10-defaults.conf /etc/systemd/system.control/user-1000.slice.d/50-SocketBindDeny.conf /etc/systemd/system/user-1000.slice.d/socket.conf

我还尝试允许端口 80 来测试这是否仅适用于特权端口,但正如预期的那样,用户test无法绑定到 80。

答案1

我自己找到了答案:

它的工作原理与描述的一样,但systemd必须使用+BPF_FRAMEWORK当前 Debian 上的情况进行编译,因此这些选项不起作用。

相关内容