Skip to content
Snippets Groups Projects
restricted-service.nix 1.68 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Provide secure defaults for systemd services
    #
    # Good reads:
    # https://gist.github.com/ageis/f5595e59b1cddb1513d1b425a323db04
    # https://docs.arbitrary.ch/security/systemd.html
    # https://www.freedesktop.org/software/systemd/man/systemd.exec.html
    
    
    Florian Sesser's avatar
    Florian Sesser committed
      DynamicUser = true;
    
    Florian Sesser's avatar
    Florian Sesser committed
      # This set of restrictions is mostly dervied from
    
      # - running `systemd-analyze security zkap-spending-service.service`
    
    Florian Sesser's avatar
    Florian Sesser committed
      # - 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";