summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Hoeg <peter@hoeg.com>2020-09-01 00:01:30 +0800
committerPeter Hoeg <peter@hoeg.com>2020-09-07 18:04:03 +0800
commitd6264419f5c2ea3601f65f607f5ea8b187548bc7 (patch)
treec68c2170d20a536bea622facdf6ffa264a9c7f13
parent2b1ce6154862ad7f2bac1c90628fc44f9a66b209 (diff)
downloadnixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.tar
nixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.tar.gz
nixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.tar.bz2
nixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.tar.lz
nixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.tar.xz
nixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.tar.zst
nixpkgs-d6264419f5c2ea3601f65f607f5ea8b187548bc7.zip
nixos/nfsd: run rpc-statd as a normal user
-rw-r--r--nixos/modules/services/network-filesystems/nfsd.nix60
-rw-r--r--nixos/modules/tasks/filesystems/nfs.nix9
2 files changed, 34 insertions, 35 deletions
diff --git a/nixos/modules/services/network-filesystems/nfsd.nix b/nixos/modules/services/network-filesystems/nfsd.nix
index 1b62bfa8203..398ef73449f 100644
--- a/nixos/modules/services/network-filesystems/nfsd.nix
+++ b/nixos/modules/services/network-filesystems/nfsd.nix
@@ -8,6 +8,8 @@ let
 
   exports = pkgs.writeText "exports" cfg.exports;
 
+  rpcUser = "statd";
+
 in
 
 {
@@ -140,36 +142,40 @@ in
 
     environment.etc.exports.source = exports;
 
-    systemd.services.nfs-server =
-      { enable = true;
-        wantedBy = [ "multi-user.target" ];
+    systemd.services.nfs-server = {
+      enable = true;
+      wantedBy = [ "multi-user.target" ];
+    };
 
-        preStart =
-          ''
-            mkdir -p /var/lib/nfs/v4recovery
-          '';
-      };
+    systemd.services.nfs-mountd = {
+      enable = true;
+      restartTriggers = [ exports ];
+
+      preStart = optionalString cfg.createMountPoints ''
+        # create export directories:
+        # skip comments, take first col which may either be a quoted
+        # "foo bar" or just foo (-> man export)
+        sed '/^#.*/d;s/^"\([^"]*\)".*/\1/;t;s/[ ].*//' ${exports} \
+        | xargs -d '\n' mkdir -p
+      '';
+    };
 
-    systemd.services.nfs-mountd =
-      { enable = true;
-        restartTriggers = [ exports ];
-
-        preStart =
-          ''
-            mkdir -p /var/lib/nfs
-
-            ${optionalString cfg.createMountPoints
-              ''
-                # create export directories:
-                # skip comments, take first col which may either be a quoted
-                # "foo bar" or just foo (-> man export)
-                sed '/^#.*/d;s/^"\([^"]*\)".*/\1/;t;s/[ ].*//' ${exports} \
-                | xargs -d '\n' mkdir -p
-              ''
-            }
-          '';
+    # rpc-statd will drop privileges by changing user from root to the owner of
+    # /var/lib/nfs
+    systemd.tmpfiles.rules = [
+      "d /var/lib/nfs 0700 ${rpcUser} ${rpcUser} - -"
+    ] ++ map (e:
+      "d /var/lib/nfs/${e} 0755 root root - -"
+    ) [ "recovery" "v4recovery" "sm" "sm.bak" ];
+
+    users = {
+      groups."${rpcUser}" = {};
+      users."${rpcUser}" = {
+        description = "NFS RPC user";
+        group = rpcUser;
+        isSystemUser = true;
       };
-
+    };
   };
 
 }
diff --git a/nixos/modules/tasks/filesystems/nfs.nix b/nixos/modules/tasks/filesystems/nfs.nix
index ddcc0ed8f5a..67e5aa0bd58 100644
--- a/nixos/modules/tasks/filesystems/nfs.nix
+++ b/nixos/modules/tasks/filesystems/nfs.nix
@@ -101,13 +101,6 @@ in
       };
 
     systemd.services.rpc-statd =
-      { restartTriggers = [ nfsConfFile ];
-
-        preStart =
-          ''
-            mkdir -p /var/lib/nfs/{sm,sm.bak}
-          '';
-      };
-
+      { restartTriggers = [ nfsConfFile ]; };
   };
 }