By running it on command line with strace, I know that for instance at least
sendto
andrecvfrom
systemcalls are being used. However, when I empty the SystemCallFilter (SystemCallFilter=
), the service still can be loaded and runs as usual.
CapabilityBoundingSet=CAP_NET_ADMIN AmbientCapabilities=CAP_NET_ADMIN
Resposta
Esses dois trechos de sua pergunta (acima) meio que respondem por que seu serviço OpenVPN está tendo acesso a todos os syscalls necessários.
Primeiro: SystemCallFilter=
não bloqueia todos os syscalls. Manpage :
Note that the
execve
,exit
,exit_group
,getrlimit
,rt_sigreturn
,sigreturn
system calls and the system calls for querying time and sleeping are implicitly whitelisted and do not need to be listed explicitly.
Segundo: Se você der uma olhada na socket(7)
página de manual, você Veja que praticamente todos os syscalls relacionados a soquetes (incluindo sendto
e recvfrom
) e os recursos de manipulação de interface de rede podem ser acessados se CAP_NET_ADMIN
estiver definido como um processo / arquivo. capabilities(7)
página de manual:
CAP_NET_ADMIN Perform various network-related operations: * interface configuration; * administration of IP firewall, masquerading, and accounting; * modify routing tables; * bind to any address for transparent proxying; * set type-of-service (TOS) * clear driver statistics; * set promiscuous mode; * enabling multicasting; * use setsockopt(2) to set the following socket options: SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside the range 0 to 6), SO_RCVBUFFORCE, and SO_SNDBUFFORCE.
Terceiro: NoNewPrivileges=
será ignorado por SystemCallFilter=
, SystemCallArchitectures=
, RestrictAddressFamilies=
, RestrictNamespaces=
, PrivateDevices=
, ProtectKernelTunables=
, ProtectKernelModules=
, MemoryDenyWriteExecute=
, RestrictRealtime=
ou% opçõesLockPersonality=
. Dê uma olhada na manpage acima.
Se você der uma olhada na documentação, você verá que systemd
está cheio de advertências, então, meu palpite é que, mesmo que você não esteja permitindo essas syscalls, elas são parte de CAP_NET_ADMIN
.
Você pode usar systemd-analyze syscall-filter
para verificar seu serviço openvpn.