Unverified Commit 087055ed authored by Peder Bergebakken Sundt's avatar Peder Bergebakken Sundt Committed by GitHub
Browse files

Merge pull request #293118 from xyven1/harden-plex-service

nixos/plex: Harden plex service
parents 6eca1ac4 201a5ff6
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -93,6 +93,17 @@ in
        '';
      };

      accelerationDevices = mkOption {
        type = types.listOf types.str;
        default = ["*"];
        example = [ "/dev/dri/renderD128" ];
        description = ''
          A list of device paths to hardware acceleration devices that Plex should
          have access to. This is useful when transcoding media files.
          The special value `"*"` will allow all devices.
        '';
      };

      package = mkPackageOption pkgs "plex" {
        extraDescription = ''
          Plex subscribers may wish to use their own package here,
@@ -133,6 +144,24 @@ in
        KillSignal = "SIGQUIT";
        PIDFile = "${cfg.dataDir}/Plex Media Server/plexmediaserver.pid";
        Restart = "on-failure";

        # Hardening
        NoNewPrivileges = true;
        PrivateTmp = true;
        PrivateDevices = cfg.accelerationDevices == [];
        DeviceAllow = mkIf (cfg.accelerationDevices != [] && !lib.elem "*" cfg.accelerationDevices) cfg.accelerationDevices;
        ProtectSystem = true;
        ProtectHome = true;
        ProtectControlGroups = true;
        ProtectKernelModules = true;
        ProtectKernelTunables = true;
        RestrictAddressFamilies = ["AF_UNIX" "AF_INET" "AF_INET6" "AF_NETLINK"];
        # This could be made to work if the namespaces needed were known
        # RestrictNamespaces = true;
        RestrictRealtime = true;
        RestrictSUIDSGID = true;
        MemoryDenyWriteExecute = true;
        LockPersonality = true;
      };

      environment = {