noqqe » blog | sammelsurium | photos | projects | about

NixOS mit ecryptfs

2018-01-05 @ ecryptfs, NixOS

Dank gpunktschmitz haben wir nun eine Virtualisierungslösung in der K4CG die mit Hyper-V umgesetzt wurde. Ich habe damit noch nie was gemacht, aber muss sagen das das wesentlich cooler ist als ich es mir vorgestellt hab!

Ich habe ein NixOS installiert und wollte ein verschlüsseltes Volume via ecryptfs aufsetzen.

Also erstmal in die /etc/nixos/configuration.nix das ecryptfs hinzugefügt.

environment.systemPackages = with pkgs; [
  tmux
  ecryptfs
];

Via nixos-rebuild switch hab ich die neue Konfiguration dann angewendet. Scheinbar reicht aber das reine Paket nicht aus um ecryptfs zu benutzen. Ich muss das Kernel Modul noch laden!

boot.kernelModules = [
  "ecryptfs"
];

Ist das geil oder was? Natürlich hab ich mich zu früh gefreut. Ich hab auch gleich den mount Block eingebaut, weswegen die Maschine nicht mehr bootete.

fileSystems."/data" = { neededForBoot = false;
  mountPoint = "/data";
  device = "/data";
  fsType = "ecryptfs";
  options = [
    "ecryptfs_cipher=blowfish"
    "ecryptfs_key_bytes=56"
    "ecryptfs_sig=xxx"
    "ecryptfs_passthrough=no"
    "ecryptfs_enable_filename_crypto=no"
  ];
};

Logisch, war ja auch irgendwie noch nichts initialisiert. Selbst wenn, wäre keine Passphrase hinterlegt. Also Maschine kommt nicht mehr hoch, aber NixOS legt für jede angewandte Konfiguration einen eigenen Grub Boot Entry an. Das betrifft nicht nur den Kernel, sondern auch die Config des OS im Userspace. So konnte ich einfach die letzte funktionierende Config booten und meinen Kram fixen. Was übrigens nur ein noauto in den Optionen von fstab war.

Wenn meine VM nun bootet, mounte ich via

# mount /data
> Passphrase: xxx

die ecryptfs Partition und fertig.

Zum Abschluss muss ich noch sagen, dass es wahrscheinlich sinnvoll wäre das ecryptfs im /home zu haben und bei Session Login via pam Modul automatisch den ecryptfs-passphrase-unwrap zu triggern. Dazu war ich aber bisher zu faul und werde es wahrscheinlich auch immer sein.