nixos/nginx: do not run anything as root
This commit is contained in:
parent
ed5c0443c1
commit
2a413da57e
|
@ -249,6 +249,18 @@
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>SD images are now compressed by default using <literal>bzip2</literal>.</para>
|
<para>SD images are now compressed by default using <literal>bzip2</literal>.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The nginx web server previously started its master process as root
|
||||||
|
privileged, then ran worker processes as a less privileged identity user.
|
||||||
|
This was changed to start all of nginx as a less privileged user (defined by
|
||||||
|
<literal>services.nginx.user</literal> and
|
||||||
|
<literal>services.nginx.group</literal>). As a consequence, all files that
|
||||||
|
are needed for nginx to run (included configuration fragments, SSL
|
||||||
|
certificates and keys, etc.) must now be readable by this less privileged
|
||||||
|
user/group.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
OpenSSH has been upgraded from 7.9 to 8.1, improving security and adding features
|
OpenSSH has been upgraded from 7.9 to 8.1, improving security and adding features
|
||||||
|
|
|
@ -47,7 +47,7 @@ let
|
||||||
''));
|
''));
|
||||||
|
|
||||||
configFile = pkgs.writers.writeNginxConfig "nginx.conf" ''
|
configFile = pkgs.writers.writeNginxConfig "nginx.conf" ''
|
||||||
user ${cfg.user} ${cfg.group};
|
pid /run/nginx/nginx.pid;
|
||||||
error_log ${cfg.logError};
|
error_log ${cfg.logError};
|
||||||
daemon off;
|
daemon off;
|
||||||
|
|
||||||
|
@ -366,12 +366,7 @@ in
|
||||||
|
|
||||||
preStart = mkOption {
|
preStart = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
default = ''
|
default = "";
|
||||||
test -d ${cfg.stateDir}/logs || mkdir -m 750 -p ${cfg.stateDir}/logs
|
|
||||||
test `stat -c %a ${cfg.stateDir}` = "750" || chmod 750 ${cfg.stateDir}
|
|
||||||
test `stat -c %a ${cfg.stateDir}/logs` = "750" || chmod 750 ${cfg.stateDir}/logs
|
|
||||||
chown -R ${cfg.user}:${cfg.group} ${cfg.stateDir}
|
|
||||||
'';
|
|
||||||
description = "
|
description = "
|
||||||
Shell commands executed before the service's nginx is started.
|
Shell commands executed before the service's nginx is started.
|
||||||
";
|
";
|
||||||
|
@ -673,23 +668,35 @@ in
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d '${cfg.stateDir}' 0750 ${cfg.user} ${cfg.group} - -"
|
||||||
|
"d '${cfg.stateDir}/logs' 0750 ${cfg.user} ${cfg.group} - -"
|
||||||
|
];
|
||||||
|
|
||||||
systemd.services.nginx = {
|
systemd.services.nginx = {
|
||||||
description = "Nginx Web Server";
|
description = "Nginx Web Server";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
wants = concatLists (map (vhostConfig: ["acme-${vhostConfig.serverName}.service" "acme-selfsigned-${vhostConfig.serverName}.service"]) acmeEnabledVhosts);
|
wants = concatLists (map (vhostConfig: ["acme-${vhostConfig.serverName}.service" "acme-selfsigned-${vhostConfig.serverName}.service"]) acmeEnabledVhosts);
|
||||||
after = [ "network.target" ] ++ map (vhostConfig: "acme-selfsigned-${vhostConfig.serverName}.service") acmeEnabledVhosts;
|
after = [ "network.target" ] ++ map (vhostConfig: "acme-selfsigned-${vhostConfig.serverName}.service") acmeEnabledVhosts;
|
||||||
stopIfChanged = false;
|
stopIfChanged = false;
|
||||||
preStart =
|
preStart = ''
|
||||||
''
|
|
||||||
${cfg.preStart}
|
${cfg.preStart}
|
||||||
${cfg.package}/bin/nginx -c ${configPath} -p ${cfg.stateDir} -t
|
${cfg.package}/bin/nginx -c '${configPath}' -p '${cfg.stateDir}' -t
|
||||||
'';
|
'';
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${cfg.package}/bin/nginx -c ${configPath} -p ${cfg.stateDir}";
|
ExecStart = "${cfg.package}/bin/nginx -c '${configPath}' -p '${cfg.stateDir}'";
|
||||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
RestartSec = "10s";
|
RestartSec = "10s";
|
||||||
StartLimitInterval = "1min";
|
StartLimitInterval = "1min";
|
||||||
|
# User and group
|
||||||
|
User = cfg.user;
|
||||||
|
Group = cfg.group;
|
||||||
|
# Runtime directory and mode
|
||||||
|
RuntimeDirectory = "nginx";
|
||||||
|
RuntimeDirectoryMode = "0750";
|
||||||
|
# Capabilities
|
||||||
|
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" "CAP_SYS_RESOURCE" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user