루트가 아닌 사용자를 위한 Xen libvirt 액세스

루트가 아닌 사용자를 위한 Xen libvirt 액세스

CentOS 6.6 시스템에 Xen과 libvirt를 설치했습니다. 모든 도구(virt-manager, virsh 등)는 루트로 완벽하게 실행되지만(직접 또는 sudo를 통해) 다른 사용자가 연결하는 것을 허용할 수 없습니다(연결 실패/DBus 오류).

내 구성

저는 그룹을 만들고 polkit을 통해 사용자 액세스를 허용하는 과정을 따랐습니다.

groupadd virtadmin
usermod -a -G virtadmin davec

나는 또한 KVM 그룹에 나 자신을 추가했습니다(어딘가에 제안이 있음). 그룹이 생성되고 ID 출력으로 그룹에 참여합니다.

uid=500(davec) gid=500(davec) groups=500(davec),36(kvm),501(virtadmin)

polkit에서 이를 허용하기 위해 다음 내용과 함께 /etc/polkit-1/localauthority/50-local.d/50-libvert-remote-access.pkla 파일을 추가했습니다.

Remote libvirt SSH access]
Identity:unix-group:virtadmin
Action:org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

이것이 작동하지 않은 후 일부 인터넷 검색에서 최신 polkit 버전(yum은 0.96이 있다고 나에게 말함)이 규칙 기반 접근 방식을 사용한다고 말했기 때문에 /etc/polkit-1/rules.d 폴더도 만들고 80- 파일을 추가했습니다. 다음을 포함하는 libvirt-manage.rules:

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

이제 여기에 몇 가지 문제가 있을 수 있지만 로그나 이를 테스트/검증/관찰하는 것으로 보이는 어떤 방법도 찾을 수 없습니다.

따라서 제가 찾은 문서에 따르면 이 설정을 통해 사용자 davec은 libvirt에 액세스하고 virsh 또는 virt-manager를 실행할 수 있어야 합니다.

실수

[davec@polar rules.d]$ virsh -c xen:///
error: failed to connect to the hypervisor
error: internal error: DBus support not compiled into this binary

이것은 연결을 시도할 때 virt-manager가 제공하는 것과 똑같은 오류입니다.

DBus 오류에 대한 온라인 정보의 대부분은 실행 중인 하이퍼바이저/연결된 모든 사람의 문제와 관련되어 있지만 루트 연결은 완벽합니다.

[davec@polar rules.d]$ sudo virsh -c xen:///
Welcome to virsh, the virtualization interactive terminal.

SSH 연결에도 똑같은 내용이 적용됩니다(xen+ssh URI를 사용할 때 SSH는 터널링일 뿐이라고 믿기 때문에 놀라운 일은 아닙니다). 루트는 루트가 아닌 사용자가 작동하지만 그룹에 추가된 사용자는 그렇지 않습니다.

의심할 바 없이 이것은 간단하고 바보입니다. 하지만... 며칠이 지나면 Google은 더 이상 내 친구가 아닙니다.

답변

아래에서 c4f4t0r의 정답(그리고 승인된) 답변을 참조하세요. 이는 현상금을 받았지만 이 글을 읽는 모든 사람의 정보용일 뿐입니다.폴킷과는 아무 관련이 없습니다내 libvirtd를 구성/컴파일/작동하지 않는 것 같습니다.

기본 제공 권한(소켓 권한) 문제입니다.

답변1

나는 당신이 이것을 할 수 있다고 생각합니다 :

존재하다/etc/libvirt/libvirtd.conf

unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
auth_unix_rw = "none"

그런 다음 libvirtd 데몬을 다시 시작하십시오.

답변2

이것은 나에게 효과적입니다.

unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
unix_sock_dir = "/var/run/libvirt"
auth_unix_rw = "none"

관련 정보