52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ lib, ... }:
 | 
						|
let
 | 
						|
  pools = map (pool: "phpfpm-${pool}") [
 | 
						|
    "idp"
 | 
						|
    "mediawiki"
 | 
						|
    "pvv-nettsiden"
 | 
						|
    "roundcube"
 | 
						|
    "snappymail"
 | 
						|
  ];
 | 
						|
in
 | 
						|
{
 | 
						|
  # Source: https://www.pierreblazquez.com/2023/06/17/how-to-harden-apache-php-fpm-daemons-using-systemd/
 | 
						|
  systemd.services = lib.genAttrs pools (_: {
 | 
						|
    serviceConfig = let
 | 
						|
      caps = [
 | 
						|
        "CAP_NET_BIND_SERVICE"
 | 
						|
        "CAP_SETGID"
 | 
						|
        "CAP_SETUID"
 | 
						|
        "CAP_CHOWN"
 | 
						|
        "CAP_KILL"
 | 
						|
        "CAP_IPC_LOCK"
 | 
						|
        "CAP_DAC_OVERRIDE"
 | 
						|
      ];
 | 
						|
    in {
 | 
						|
      AmbientCapabilities = caps;
 | 
						|
      CapabilityBoundingSet = caps;
 | 
						|
      DeviceAllow = [ "" ];
 | 
						|
      LockPersonality = true;
 | 
						|
      MemoryDenyWriteExecute = false;
 | 
						|
      NoNewPrivileges = true;
 | 
						|
      PrivateMounts = true;
 | 
						|
      ProtectClock = true;
 | 
						|
      ProtectControlGroups = true;
 | 
						|
      ProtectHome = true;
 | 
						|
      ProtectHostname = true;
 | 
						|
      ProtectKernelLogs = true;
 | 
						|
      ProtectKernelModules = true;
 | 
						|
      ProtectKernelTunables = true;
 | 
						|
      RemoveIPC = true;
 | 
						|
      UMask = "0077";
 | 
						|
      RestrictNamespaces = "~mnt";
 | 
						|
      RestrictRealtime = true;
 | 
						|
      RestrictSUIDSGID = true;
 | 
						|
      SystemCallArchitectures = "native";
 | 
						|
      KeyringMode = "private";
 | 
						|
      SystemCallFilter = [
 | 
						|
        "@system-service"
 | 
						|
      ];
 | 
						|
    };
 | 
						|
  });
 | 
						|
}
 |