nixos/ecryptfs: init

Currently, ecryptfs support is coupled to `security.pam.enableEcryptfs`, but one
might want to use ecryptfs without enabling the PAM functionality. This commit
splits it out into a `boot.supportedFilesystems` switch.

edef ea35bc94 7867b508

Changed files
+19 -6
nixos
modules
security
tasks
filesystems
+1
nixos/modules/module-list.nix
···
./tasks/filesystems/bcachefs.nix
./tasks/filesystems/btrfs.nix
./tasks/filesystems/cifs.nix
./tasks/filesystems/exfat.nix
./tasks/filesystems/ext.nix
./tasks/filesystems/f2fs.nix
···
./tasks/filesystems/bcachefs.nix
./tasks/filesystems/btrfs.nix
./tasks/filesystems/cifs.nix
+
./tasks/filesystems/ecryptfs.nix
./tasks/filesystems/exfat.nix
./tasks/filesystems/ext.nix
./tasks/filesystems/f2fs.nix
+4 -6
nixos/modules/security/pam.nix
···
++ optionals config.krb5.enable [pam_krb5 pam_ccreds]
++ optionals config.security.pam.enableOTPW [ pkgs.otpw ]
++ optionals config.security.pam.oath.enable [ pkgs.oathToolkit ]
-
++ optionals config.security.pam.enableU2F [ pkgs.pam_u2f ]
-
++ optionals config.security.pam.enableEcryptfs [ pkgs.ecryptfs ];
security.wrappers = {
unix_chkpwd = {
···
owner = "root";
setuid = true;
};
-
} // (if config.security.pam.enableEcryptfs then {
-
"mount.ecryptfs_private".source = "${pkgs.ecryptfs.out}/bin/mount.ecryptfs_private";
-
"umount.ecryptfs_private".source = "${pkgs.ecryptfs.out}/bin/umount.ecryptfs_private";
-
} else {});
environment.etc =
mapAttrsToList (n: v: makePAMService v) config.security.pam.services;
···
++ optionals config.krb5.enable [pam_krb5 pam_ccreds]
++ optionals config.security.pam.enableOTPW [ pkgs.otpw ]
++ optionals config.security.pam.oath.enable [ pkgs.oathToolkit ]
+
++ optionals config.security.pam.enableU2F [ pkgs.pam_u2f ];
+
+
boot.supportedFilesystems = optionals config.security.pam.enableEcryptfs [ "ecryptfs" ];
security.wrappers = {
unix_chkpwd = {
···
owner = "root";
setuid = true;
};
+
};
environment.etc =
mapAttrsToList (n: v: makePAMService v) config.security.pam.services;
+14
nixos/modules/tasks/filesystems/ecryptfs.nix
···
···
+
{ config, lib, pkgs, ... }:
+
# TODO: make ecryptfs work in initramfs?
+
+
with lib;
+
+
{
+
config = mkIf (any (fs: fs == "ecryptfs") config.boot.supportedFilesystems) {
+
system.fsPackages = [ pkgs.ecryptfs ];
+
security.wrappers = {
+
"mount.ecryptfs_private".source = "${pkgs.ecryptfs.out}/bin/mount.ecryptfs_private";
+
"umount.ecryptfs_private".source = "${pkgs.ecryptfs.out}/bin/umount.ecryptfs_private";
+
};
+
};
+
}