如何使用 libvirt 的 polkit?

如何使用 libvirt 的 polkit?

我刚刚看到了 libvirt 的 polkit 参考页面,并创建了以下规则

//content of /etc/polkit-1/rules.d/50-libvirt.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.libvirt.api.domain.getattr" &&
    subject.user == "dravigon") {
      if (action.lookup("connect_driver") == 'QEMU' &&
          action.lookup("domain_name") == 'debian8') {
        return polkit.Result.YES;
      } else {
        return polkit.Result.NO;
      }
}

});

希望限制用户 dravigon 只能从 qemu/kvm 驱动程序访问域 debian8,
但它根本不起作用,有人能告诉我哪里出了问题吗

答案1

只需按照 fedora polkit 页面中的说明操作,即可找到答案,
我必须添加另一个块,似乎没有第一个块,第二个块就没用

// Allow passwordless connection to qemu:///system
polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage" &&
      subject.user == "MY-USER") {
      return polkit.Result.YES;
  }
});
// Give full access to 'test-day-vm'
polkit.addRule(function(action, subject) {
    if (action.id.indexOf("org.libvirt.api.domain.") == 0 &&
        subject.user == "MY_USER") {
          if (action.lookup("connect_driver") == 'QEMU' &&
              action.lookup("domain_name") == 'test-day-vm') {
            return polkit.Result.YES;
          } else {
            return polkit.Result.NO;
          }
    }
});

参考:https://fedoraproject.org/wiki/QA:Testcase_Virt_ACLs

相关内容