Skip to content

Commit

Permalink
nixos/haproxy: Revive the haproxy user and group
Browse files Browse the repository at this point in the history
Running haproxy with "DynamicUser = true" doesn't really work, since
it prohibits specifying a TLS certificate bundle with limited
permissions. This revives the haproxy user and group, but makes them
dynamically allocated by NixOS, rather than statically allocated. It
also adds options to specify which user and group haproxy runs as.
  • Loading branch information
talyz committed Mar 11, 2020
1 parent 5c50087 commit bb7ad85
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
4 changes: 2 additions & 2 deletions nixos/modules/misc/ids.nix
Expand Up @@ -133,7 +133,7 @@ in
tcpcryptd = 93; # tcpcryptd uses a hard-coded uid. We patch it in Nixpkgs to match this choice.
firebird = 95;
#keys = 96; # unused
#haproxy = 97; # DynamicUser as of 2019-11-08
#haproxy = 97; # dynamically allocated as of 2020-03-11
mongodb = 98;
openldap = 99;
#users = 100; # unused
Expand Down Expand Up @@ -448,7 +448,7 @@ in
#tcpcryptd = 93; # unused
firebird = 95;
keys = 96;
#haproxy = 97; # DynamicUser as of 2019-11-08
#haproxy = 97; # dynamically allocated as of 2020-03-11
#mongodb = 98; # unused
openldap = 99;
munin = 102;
Expand Down
26 changes: 25 additions & 1 deletion nixos/modules/services/networking/haproxy.nix
Expand Up @@ -26,6 +26,18 @@ with lib;
'';
};

user = mkOption {
type = types.str;
default = "haproxy";
description = "User account under which haproxy runs.";
};

group = mkOption {
type = types.str;
default = "haproxy";
description = "Group account under which haproxy runs.";
};

config = mkOption {
type = types.nullOr types.lines;
default = null;
Expand All @@ -49,7 +61,8 @@ with lib;
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
DynamicUser = true;
User = cfg.user;
Group = cfg.group;
Type = "notify";
# when running the config test, don't be quiet so we can see what goes wrong
ExecStartPre = "${pkgs.haproxy}/sbin/haproxy -c -f ${haproxyCfg}";
Expand All @@ -60,5 +73,16 @@ with lib;
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
};
};

users.users = optionalAttrs (cfg.user == "haproxy") {
haproxy = {
group = cfg.group;
isSystemUser = true;
};
};

users.groups = optionalAttrs (cfg.group == "haproxy") {
haproxy = {};
};
};
}

0 comments on commit bb7ad85

Please sign in to comment.