Skip to content
Snippets Groups Projects
restricted-service.nix 1.56 KiB
Newer Older
{
  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";
  };
}