nixos/shadow: use su from sudo-rs when enabled (#495216)

This commit is contained in:
Adam C. Stephens
2026-03-07 23:27:43 +00:00
committed by GitHub
4 changed files with 20 additions and 1 deletions
+8 -1
View File
@@ -22,6 +22,13 @@ in
'';
};
security.shadow.su.package = lib.mkPackageOption pkgs [ "shadow" "su" ] {
extraDescription = ''
This can be overridden by other modules (e.g. sudo-rs) to provide
an alternative `su` implementation.
'';
};
security.loginDefs = {
package = lib.mkPackageOption pkgs "shadow" { };
@@ -262,7 +269,7 @@ in
};
in
{
su = mkSetuidRoot "${cfg.package.su}/bin/su";
su = mkSetuidRoot "${config.security.shadow.su.package}/bin/su";
sg = mkSetuidRoot "${cfg.package.out}/bin/sg";
newgrp = mkSetuidRoot "${cfg.package.out}/bin/newgrp";
newuidmap = mkSetuidRoot "${cfg.package.out}/bin/newuidmap";
+2
View File
@@ -215,6 +215,8 @@ in
];
security.sudo.enable = lib.mkDefault false;
security.shadow.su.package = lib.mkDefault cfg.package;
security.sudo-rs.extraRules =
let
defaultRule =
+5
View File
@@ -171,5 +171,10 @@ in
shadow.wait_for_file("/tmp/leo")
assert "leo" in shadow.succeed("cat /tmp/leo")
shadow.send_chars("logout\n")
with subtest("su wrapper should point to shadow by default"):
output = shadow.succeed("grep -aoP '/nix/store/[a-z0-9]{32}-[^\\x00]+' /run/wrappers/bin/su | head -1").strip()
assert "shadow" in output, \
f"su should come from shadow, but points to: {output}"
'';
}
+5
View File
@@ -162,5 +162,10 @@ in
with subtest("non-wheel users should be unable to run sudo thanks to execWheelOnly"):
strict.fail('faketty -- su - noadmin -c "sudo --help"')
with subtest("su should come from sudo-rs"):
output = machine.succeed("grep -aoP '/nix/store/[a-z0-9]{32}-[^\\x00]+' /run/wrappers/bin/su | head -1").strip()
assert "sudo-rs" in output, \
f"su should come from sudo-rs, but points to: {output}"
'';
}