summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicoo <nicoo@mur.at>2023-10-22 19:38:22 +0000
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2023-11-26 20:36:46 +0000
commit030744785911434ed78cd14060da79f6e758f013 (patch)
tree77fb6b42c53b49479d2ae366fdce8a2f925ccdf3
parentMerge pull request #270220 from NixOS/backport-269970-to-release-23.11 (diff)
downloadnixpkgs-030744785911434ed78cd14060da79f6e758f013.tar.gz
nixos/btrbk: Support both Miller's sudo and sudo-rs
(cherry picked from commit 19af28537bb59c849a666fce27e15d1f33fb03ee)
-rw-r--r--nixos/modules/services/backup/btrbk.nix35
1 files changed, 18 insertions, 17 deletions
diff --git a/nixos/modules/services/backup/btrbk.nix b/nixos/modules/services/backup/btrbk.nix
index 9b7f1566eb1e..1e90ef54d33f 100644
--- a/nixos/modules/services/backup/btrbk.nix
+++ b/nixos/modules/services/backup/btrbk.nix
@@ -47,8 +47,21 @@ let
then [ "${name} ${value}" ]
else concatLists (mapAttrsToList (genSection name) value);
+ sudoRule = {
+ users = [ "btrbk" ];
+ commands = [
+ { command = "${pkgs.btrfs-progs}/bin/btrfs"; options = [ "NOPASSWD" ]; }
+ { command = "${pkgs.coreutils}/bin/mkdir"; options = [ "NOPASSWD" ]; }
+ { command = "${pkgs.coreutils}/bin/readlink"; options = [ "NOPASSWD" ]; }
+ # for ssh, they are not the same than the one hard coded in ${pkgs.btrbk}
+ { command = "/run/current-system/sw/bin/btrfs"; options = [ "NOPASSWD" ]; }
+ { command = "/run/current-system/sw/bin/mkdir"; options = [ "NOPASSWD" ]; }
+ { command = "/run/current-system/sw/bin/readlink"; options = [ "NOPASSWD" ]; }
+ ];
+ };
+
sudo_doas =
- if config.security.sudo.enable then "sudo"
+ if config.security.sudo.enable || config.security.sudo-rs.enable then "sudo"
else if config.security.doas.enable then "doas"
else throw "The btrbk nixos module needs either sudo or doas enabled in the configuration";
@@ -157,22 +170,10 @@ in
};
config = mkIf (sshEnabled || serviceEnabled) {
environment.systemPackages = [ pkgs.btrbk ] ++ cfg.extraPackages;
- security.sudo = mkIf (sudo_doas == "sudo") {
- extraRules = [
- {
- users = [ "btrbk" ];
- commands = [
- { command = "${pkgs.btrfs-progs}/bin/btrfs"; options = [ "NOPASSWD" ]; }
- { command = "${pkgs.coreutils}/bin/mkdir"; options = [ "NOPASSWD" ]; }
- { command = "${pkgs.coreutils}/bin/readlink"; options = [ "NOPASSWD" ]; }
- # for ssh, they are not the same than the one hard coded in ${pkgs.btrbk}
- { command = "/run/current-system/sw/bin/btrfs"; options = [ "NOPASSWD" ]; }
- { command = "/run/current-system/sw/bin/mkdir"; options = [ "NOPASSWD" ]; }
- { command = "/run/current-system/sw/bin/readlink"; options = [ "NOPASSWD" ]; }
- ];
- }
- ];
- };
+
+ security.sudo.extraRules = mkIf (sudo_doas == "sudo") [ sudoRule ];
+ security.sudo-rs.extraRules = mkIf (sudo_doas == "sudo") [ sudoRule ];
+
security.doas = mkIf (sudo_doas == "doas") {
extraRules = let
doasCmdNoPass = cmd: { users = [ "btrbk" ]; cmd = cmd; noPass = true; };