Merge master into staging-next
This commit is contained in:
@@ -61,6 +61,17 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
security.sudo.execWheelOnly = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Only allow members of the <code>wheel</code> group to execute sudo by
|
||||
setting the executable's permissions accordingly.
|
||||
This prevents users that are not members of <code>wheel</code> from
|
||||
exploiting vulnerabilities in sudo such as CVE-2021-3156.
|
||||
'';
|
||||
};
|
||||
|
||||
security.sudo.configFile = mkOption {
|
||||
type = types.lines;
|
||||
# Note: if syntax errors are detected in this file, the NixOS
|
||||
@@ -216,9 +227,20 @@ in
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
security.wrappers = {
|
||||
sudo.source = "${cfg.package.out}/bin/sudo";
|
||||
sudoedit.source = "${cfg.package.out}/bin/sudoedit";
|
||||
security.wrappers = let
|
||||
owner = "root";
|
||||
group = if cfg.execWheelOnly then "wheel" else "root";
|
||||
setuid = true;
|
||||
permissions = if cfg.execWheelOnly then "u+rx,g+x" else "u+rx,g+x,o+x";
|
||||
in {
|
||||
sudo = {
|
||||
source = "${cfg.package.out}/bin/sudo";
|
||||
inherit owner group setuid permissions;
|
||||
};
|
||||
sudoedit = {
|
||||
source = "${cfg.package.out}/bin/sudoedit";
|
||||
inherit owner group setuid permissions;
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [ sudo ];
|
||||
|
||||
@@ -150,6 +150,10 @@ in
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [{
|
||||
boot.kernelModules = [ "bridge" "veth" ];
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.conf.all.forwarding" = mkOverride 99 true;
|
||||
"net.ipv4.conf.default.forwarding" = mkOverride 99 true;
|
||||
};
|
||||
environment.systemPackages = [ cfg.package ]
|
||||
++ optional cfg.enableNvidia pkgs.nvidia-docker;
|
||||
users.groups.docker.gid = config.ids.gids.docker;
|
||||
|
||||
@@ -45,5 +45,8 @@ import ./make-test-python.nix ({ pkgs, ...} : {
|
||||
|
||||
# Must match version 4 times to ensure client and server git commits and versions are correct
|
||||
docker.succeed('[ $(docker version | grep ${pkgs.docker.version} | wc -l) = "4" ]')
|
||||
docker.succeed("systemctl restart systemd-sysctl")
|
||||
docker.succeed("grep 1 /proc/sys/net/ipv4/conf/all/forwarding")
|
||||
docker.succeed("grep 1 /proc/sys/net/ipv4/conf/default/forwarding")
|
||||
'';
|
||||
})
|
||||
|
||||
+20
-1
@@ -10,7 +10,7 @@ in
|
||||
maintainers = [ lschuermann ];
|
||||
};
|
||||
|
||||
machine =
|
||||
nodes.machine =
|
||||
{ lib, ... }:
|
||||
with lib;
|
||||
{
|
||||
@@ -48,6 +48,19 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
nodes.strict = { ... }: {
|
||||
users.users = {
|
||||
admin = { isNormalUser = true; extraGroups = [ "wheel" ]; };
|
||||
noadmin = { isNormalUser = true; };
|
||||
};
|
||||
|
||||
security.sudo = {
|
||||
enable = true;
|
||||
wheelNeedsPassword = false;
|
||||
execWheelOnly = true;
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
''
|
||||
with subtest("users in wheel group should have passwordless sudo"):
|
||||
@@ -79,5 +92,11 @@ in
|
||||
|
||||
with subtest("users in group 'barfoo' should not be able to keep their environment"):
|
||||
machine.fail("sudo -u test3 sudo -n -E -u root true")
|
||||
|
||||
with subtest("users in wheel should be able to run sudo despite execWheelOnly"):
|
||||
strict.succeed('su - admin -c "sudo -u root true"')
|
||||
|
||||
with subtest("non-wheel users should be unable to run sudo thanks to execWheelOnly"):
|
||||
strict.fail('su - noadmin -c "sudo --help"')
|
||||
'';
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user