enhancement(security): Harden SystemD service (#6696)
* enhancement(security): Harden SystemD service This takes a first pass at hardening the service file we ship with Vector. Depending on a user's need, they could harden it further by, for example, disabling network binding if they aren't using a source that requires it or the file system if they don't need to use a component that needs to read or write to it. My aim here was to provide a broad enough set that it should cover any vector configuration. Output of `systemd-analyze security vector`: ``` root@72314b979f5b:/# systemd-analyze security vector NAME DESCRIPTION EXPOSURE - PrivateNetwork= Service has access to the host's network 0.5 + User=/DynamicUser= Service runs under a static non-root user identity + CapabilityBoundingSet=~CAP_SET(UID|GID|PCAP) Service cannot change UID/GID identities/capabilities + CapabilityBoundingSet=~CAP_SYS_ADMIN Service has no administrator privileges + CapabilityBoundingSet=~CAP_SYS_PTRACE Service has no ptrace() debugging abilities - RestrictAddressFamilies=~AF_(INET|INET6) Service may allocate Internet sockets 0.3 + RestrictNamespaces=~CLONE_NEWUSER Service cannot create user namespaces + RestrictAddressFamilies=~… Service cannot allocate exotic sockets + CapabilityBoundingSet=~CAP_(CHOWN|FSETID|SETFCAP) Service cannot change file ownership/access mode/capabilities + CapabilityBoundingSet=~CAP_(DAC_*|FOWNER|IPC_OWNER) Service cannot override UNIX file/IPC permission checks + CapabilityBoundingSet=~CAP_NET_ADMIN Service has no network configuration privileges + CapabilityBoundingSet=~CAP_RAWIO Service has no raw I/O access + CapabilityBoundingSet=~CAP_SYS_MODULE Service cannot load kernel modules + CapabilityBoundingSet=~CAP_SYS_TIME Service processes cannot change the system clock + DeviceAllow= Service has a minimal device ACL - IPAddressDeny= Service does not define an IP address whitelist 0.2 + KeyringMode= Service doesn't share key material with other services + NoNewPrivileges= Service processes cannot acquire new privileges + NotifyAccess= Service child processes cannot alter service state + PrivateDevices= Service has no access to hardware devices + PrivateMounts= Service cannot install system mounts + PrivateTmp= Service has no access to other software's temporary files - PrivateUsers= Service has access to other users 0.2 + ProtectControlGroups= Service cannot modify the control group file system + ProtectHome= Service has no access to home directories + ProtectKernelModules= Service cannot load or read kernel modules + ProtectKernelTunables= Service cannot alter kernel tunables (/proc/sys, …) + ProtectSystem= Service has strict read-only access to the OS file hierarchy + RestrictAddressFamilies=~AF_PACKET Service cannot allocate packet sockets + SystemCallArchitectures= Service may execute system calls only with native ABI + SystemCallFilter=~@clock System call whitelist defined for service, and @clock is not included - SystemCallFilter=~@debug System call whitelist defined for service, and @debug is included 0.2 + SystemCallFilter=~@module System call whitelist defined for service, and @module is not included + SystemCallFilter=~@mount System call whitelist defined for service, and @mount is not included + SystemCallFilter=~@raw-io System call whitelist defined for service, and @raw-io is not included + SystemCallFilter=~@reboot System call whitelist defined for service, and @reboot is not included + SystemCallFilter=~@swap System call whitelist defined for service, and @swap is not included + SystemCallFilter=~@privileged System call whitelist defined for service, and @privileged is not included + SystemCallFilter=~@resources System call whitelist defined for service, and @resources is not included - AmbientCapabilities= Service process receives ambient capabilities 0.1 + CapabilityBoundingSet=~CAP_AUDIT_* Service has no audit subsystem access + CapabilityBoundingSet=~CAP_KILL Service cannot send UNIX signals to arbitrary processes + CapabilityBoundingSet=~CAP_MKNOD Service cannot create device nodes - CapabilityBoundingSet=~CAP_NET_(BIND_SERVICE|BROADCAST|RAW) Service has elevated networking privileges 0.1 + CapabilityBoundingSet=~CAP_SYSLOG Service has no access to kernel logging + CapabilityBoundingSet=~CAP_SYS_(NICE|RESOURCE) Service has no privileges to change resource use parameters + RestrictNamespaces=~CLONE_NEWCGROUP Service cannot create cgroup namespaces + RestrictNamespaces=~CLONE_NEWIPC Service cannot create IPC namespaces + RestrictNamespaces=~CLONE_NEWNET Service cannot create network namespaces + RestrictNamespaces=~CLONE_NEWNS Service cannot create file system namespaces + RestrictNamespaces=~CLONE_NEWPID Service cannot create process namespaces + RestrictRealtime= Service realtime scheduling access is restricted + SystemCallFilter=~@cpu-emulation System call whitelist defined for service, and @cpu-emulation is not included + SystemCallFilter=~@obsolete System call whitelist defined for service, and @obsolete is not included + RestrictAddressFamilies=~AF_NETLINK Service cannot allocate netlink sockets - RootDirectory=/RootImage= Service runs within the host's root directory 0.1 + SupplementaryGroups= Service has no supplementary groups + CapabilityBoundingSet=~CAP_MAC_* Service cannot adjust SMACK MAC + CapabilityBoundingSet=~CAP_SYS_BOOT Service cannot issue reboot() + Delegate= Service does not maintain its own delegated control group subtree + LockPersonality= Service cannot change ABI personality + MemoryDenyWriteExecute= Service cannot create writable executable memory mappings + RemoveIPC= Service user cannot leave SysV IPC objects around + RestrictNamespaces=~CLONE_NEWUTS Service cannot create hostname namespaces + UMask= Files created by service are accessible only by service's own user by default + CapabilityBoundingSet=~CAP_LINUX_IMMUTABLE Service cannot mark files immutable + CapabilityBoundingSet=~CAP_IPC_LOCK Service cannot lock memory into RAM + CapabilityBoundingSet=~CAP_SYS_CHROOT Service cannot issue chroot() + CapabilityBoundingSet=~CAP_BLOCK_SUSPEND Service cannot establish wake locks + CapabilityBoundingSet=~CAP_LEASE Service cannot create file leases + CapabilityBoundingSet=~CAP_SYS_PACCT Service cannot use acct() + CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG Service cannot issue vhangup() + CapabilityBoundingSet=~CAP_WAKE_ALARM Service cannot program timers that wake up the system - RestrictAddressFamilies=~AF_UNIX Service may allocate local sockets 0.1 ``` Signed-off-by: Jesse Szwedko <jesse@szwedko.me> * Swap out specific groups with @system-service Signed-off-by: Jesse Szwedko <jesse@szwedko.me>
J
Jesse Szwedko committed
136cb6c7148a302c550254d7abb446ab121359f5
Parent: d4503f8
Committed by GitHub <noreply@github.com>
on 6/25/2021, 6:27:01 PM