Qemu

Slackware 和 libvirt 與 qemu,為什麼 vm 以 root 身份執行?

  • August 19, 2018

我將 libvirt 配置為使用“使用者”組來執行 vm

grep -w users /etc/libvirt/qemu.conf
# unix socket. This prevents unprivileged access from users on the
# unix socket. This prevents unprivileged access from users on the
group = "users"
# deployments. It is strongly recommended that users update their

我可以毫無問題地從使用者啟動 vm,它們執行.. 但是 ps 說.. 以 root 身份執行,而不是以我的非特權使用者身份執行,為什麼?

ps -ef|grep qemu
root     15248     1 33 14:53 ?        00:01:05 /usr/bin/qemu-kvm -name guest=

可以以非特權使用者身份執行 vm 嗎?發行版是 slackware 14.2,當然我在使用者組

找到解決方案。

首先在 libvirt SlackBuild 上,添加或修改這些行

VIRTGROUP=${VIRTGROUP:-kvm}

./configure \
 --prefix=/usr \
 --libdir=/usr/lib${LIBDIRSUFFIX} \
 --bindir=/usr/sbin \
 --sbindir=/usr/sbin \
 --disable-static \
 --sysconfdir=/etc \
 --localstatedir=/var \
 --mandir=/usr/man \
 --docdir=/usr/doc/$PRGNAM-$VERSION \
 --enable-static=no \
 --enable-shared=yes \
 --with-qemu-group=$VIRTGROUP \
 --with-qemu-user=nobody \
 --without-hal \
 --with-interface \
 --with-lxc \
 --with-udev \
 --with-storage-disk \
 --with-storage-gluster \
 --with-storage-lvm \
 --with-init-script=none

# udev rules
mkdir -p $PKG/etc/udev/rules.d/65-kvm.rules
install -D -m 0644 $CWD/65-kvm.rules $PKG/etc/udev/rules.d/65-kvm.rules

udev規則必須是這樣的

cat /etc/udev/rules.d/65-kvm.rules 
KERNEL=="kvm", NAME="%k", GROUP="kvm", MODE="0660"

不要忘記 polkit 部分,否則 libvirt 只能以 root 身份執行

cat /usr/share/polkit-1/rules.d/50-libvirt.rules 
// Allow any user in the 'libvirt' group to connect to system libvirtd
// without entering a password.

polkit.addRule(function(action, subject) {
   if (action.id == "org.libvirt.unix.manage" &&
       subject.isInGroup("libvirt")) {
       return polkit.Result.YES;
   }
});

重新啟動 libivirt ps 後為 qemu 使用者返回 nobody

ps  -o user,group,cmd -p 14123
USER     GROUP    CMD
nobody   kvm      /usr/bin/qemu-kvm -name guest=..

引用自:https://unix.stackexchange.com/questions/460073