Skip to content
Snippets Groups Projects
restricted-service.nix 1.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • {
      serviceConfig.DynamicUser = true;
    
      serviceConfig = {
    
        # This set of restrictions is mostly dervied from
        # - running `systemd-analyze security zkap-spending-service.service
        # - Looking at the restrictions from the nixos nginx config.
        AmbientCapabilities = "";
        CapabilityBoundingSet = "";
        LockPersonality = true;
        MemoryDenyWriteExecute = true;
        NoNewPrivileges = true;
        PrivateDevices = true;
        PrivateMounts = true;
        PrivateNetwork = true;
        PrivateTmp = true;
        PrivateUsers = true;
        ProcSubset = "pid";
        ProtectClock = true;
        ProtectControlGroups = true;
        ProtectHome = true;
        ProtectHostname = true;
        ProtectKernelLogs = true;
        ProtectKernelModules = true;
        ProtectKernelTunables = true;
        ProtectProc = "invisible";
        ProtectSystem = "strict";
        RemoveIPC = true;
        RestrictAddressFamilies = "AF_UNIX";
        RestrictNamespaces = true;
        RestrictRealtime = true;
        RestrictSUIDSGID = true;
        SystemCallArchitectures = "native";
        # Lines starting with "~" are deny-list the others are allow-list
        # Since the first line is allow, that bounds the set of allowed syscalls
        # and the further lines restrict it.
        SystemCallFilter = [
          # From systemd.exec(5), @system-service is "A reasonable set of
          # system calls used by common system [...]"
          "@system-service"
          # This is from the nginx config, except that `@ipc` is not removed,
          # since twisted uses a self-pipe.
          "~@cpu-emulation @debug @keyring @mount @obsolete @privileged @setuid"
        ];
        Umask = "0077";
      };
    }