From fae4917f2f72fa00cf0c4e34d2507c5b96a2f6bb Mon Sep 17 00:00:00 2001 From: Alex Martens Date: Thu, 8 May 2025 12:28:08 -0700 Subject: [PATCH] nixos/homepage-dashboard: harden service (#377886) --- .../services/misc/homepage-dashboard.nix | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/nixos/modules/services/misc/homepage-dashboard.nix b/nixos/modules/services/misc/homepage-dashboard.nix index 1a541963187b..07ccf7112d05 100644 --- a/nixos/modules/services/misc/homepage-dashboard.nix +++ b/nixos/modules/services/misc/homepage-dashboard.nix @@ -232,12 +232,50 @@ in serviceConfig = { Type = "simple"; - DynamicUser = true; EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile; StateDirectory = "homepage-dashboard"; CacheDirectory = "homepage-dashboard"; ExecStart = lib.getExe cfg.package; Restart = "on-failure"; + + # hardening + DynamicUser = true; + DevicePolicy = "closed"; + CapabilityBoundingSet = ""; + RestrictAddressFamilies = [ + "AF_INET" + "AF_INET6" + "AF_UNIX" + "AF_NETLINK" + ]; + DeviceAllow = ""; + NoNewPrivileges = true; + PrivateDevices = true; + PrivateMounts = true; + PrivateTmp = true; + PrivateUsers = true; + ProtectClock = true; + ProtectControlGroups = true; + ProtectHome = true; + ProtectKernelLogs = true; + ProtectKernelModules = true; + ProtectKernelTunables = true; + ProtectSystem = "strict"; + LockPersonality = true; + RemoveIPC = true; + RestrictNamespaces = true; + RestrictRealtime = true; + RestrictSUIDSGID = true; + SystemCallArchitectures = "native"; + SystemCallFilter = [ + "@system-service" + "~@resources" + ]; + ProtectProc = "invisible"; + ProtectHostname = true; + UMask = "0077"; + # cpu widget requires access to /proc + ProcSubset = if lib.any (widget: widget.resources.cpu or false) cfg.widgets then "all" else "pid"; }; enableStrictShellChecks = true;