vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / programs / ydotool.nix
blob3377ae4262610af8188489afc4164446b0cce0d5
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.programs.ydotool;
9 in
11   meta = {
12     maintainers = with lib.maintainers; [ quantenzitrone ];
13   };
15   options.programs.ydotool = {
16     enable = lib.mkEnableOption ''
17       ydotoold system service and {command}`ydotool` for members of
18       {option}`programs.ydotool.group`.
19     '';
20     group = lib.mkOption {
21       type = lib.types.str;
22       default = "ydotool";
23       description = ''
24         Group which users must be in to use {command}`ydotool`.
25       '';
26     };
27   };
29   config = let
30     runtimeDirectory = "ydotoold";
31   in lib.mkIf cfg.enable {
32     users.groups."${config.programs.ydotool.group}" = { };
34     systemd.services.ydotoold = {
35       description = "ydotoold - backend for ydotool";
36       wantedBy = [ "multi-user.target" ];
37       partOf = [ "multi-user.target" ];
38       serviceConfig = {
39         Group = config.programs.ydotool.group;
40         RuntimeDirectory = runtimeDirectory;
41         RuntimeDirectoryMode = "0750";
42         ExecStart = "${lib.getExe' pkgs.ydotool "ydotoold"} --socket-path=${config.environment.variables.YDOTOOL_SOCKET} --socket-perm=0660";
44         # hardening
46         ## allow access to uinput
47         DeviceAllow = [ "/dev/uinput" ];
48         DevicePolicy = "closed";
50         ## allow creation of unix sockets
51         RestrictAddressFamilies = [ "AF_UNIX" ];
53         CapabilityBoundingSet = "";
54         IPAddressDeny = "any";
55         LockPersonality = true;
56         MemoryDenyWriteExecute = true;
57         NoNewPrivileges = true;
58         PrivateNetwork = true;
59         PrivateTmp = true;
60         PrivateUsers = true;
61         ProcSubset = "pid";
62         ProtectClock = true;
63         ProtectControlGroups = true;
64         ProtectHome = true;
65         ProtectHostname = true;
66         ProtectKernelLogs = true;
67         ProtectKernelModules = true;
68         ProtectKernelTunables = true;
69         ProtectProc = "invisible";
70         ProtectSystem = "strict";
71         RestrictNamespaces = true;
72         RestrictRealtime = true;
73         RestrictSUIDSGID = true;
74         SystemCallArchitectures = "native";
75         SystemCallFilter = [
76           "@system-service"
77           "~@privileged"
78           "~@resources"
79         ];
80         UMask = "0077";
82         # -> systemd-analyze security score 0.7 SAFE ðŸ˜€
83       };
84     };
86     environment.variables = {
87       YDOTOOL_SOCKET = "/run/${runtimeDirectory}/socket";
88     };
89     environment.systemPackages = with pkgs; [ ydotool ];
90   };