Merge pull request #37281 from xeji/qemu-nonroot

nixos/libvirtd: add option to run qemu as non-root

xeji a102b900 20378cbf

Changed files
+26
nixos
modules
misc
virtualisation
+2
nixos/modules/misc/ids.nix
···
hydron = 298;
cfssl = 299;
cassandra = 300;
+
qemu-libvirtd = 301;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
···
hydron = 298;
cfssl = 299;
cassandra = 300;
+
qemu-libvirtd = 301;
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal
+24
nixos/modules/virtualisation/libvirtd.nix
···
${optionalString cfg.qemuOvmf ''
nvram = ["/run/libvirt/nix-ovmf/OVMF_CODE.fd:/run/libvirt/nix-ovmf/OVMF_VARS.fd"]
''}
+
${optionalString (!cfg.qemuRunAsRoot) ''
+
user = "qemu-libvirtd"
+
group = "qemu-libvirtd"
+
''}
${cfg.qemuVerbatimConfig}
'';
···
'';
};
+
virtualisation.libvirtd.qemuRunAsRoot = mkOption {
+
type = types.bool;
+
default = true;
+
description = ''
+
If true, libvirtd runs qemu as root.
+
If false, libvirtd runs qemu as unprivileged user qemu-libvirtd.
+
Changing this option to false may cause file permission issues
+
for existing guests. To fix these, manually change ownership
+
of affected files in /var/lib/libvirt/qemu to qemu-libvirtd.
+
'';
+
};
+
virtualisation.libvirtd.qemuVerbatimConfig = mkOption {
type = types.lines;
default = ''
···
boot.kernelModules = [ "tun" ];
users.groups.libvirtd.gid = config.ids.gids.libvirtd;
+
+
# libvirtd runs qemu as this user and group by default
+
users.extraGroups.qemu-libvirtd.gid = config.ids.gids.qemu-libvirtd;
+
users.extraUsers.qemu-libvirtd = {
+
uid = config.ids.uids.qemu-libvirtd;
+
isNormalUser = false;
+
group = "qemu-libvirtd";
+
};
systemd.packages = [ pkgs.libvirt ];