Назад | Перейти на главную страницу

CentOS7: KVM: ошибка: не удается создать каталог времени выполнения пользователя '/ run / user / 0 / libvirt': отказано в разрешении

Пытался решить проблему, обнаруженную мной, когда в нашей установке Nagios использовался плагин для KVM, check_kvm, как я обнаружил. Я думаю, что моя проблема сводится к проблеме с разрешениями пользователя nagios / nrpe. После установки nrpe и плагинов у меня нет проблем с другими стандартными плагинами, такими как check_disk или check_load и т. Д. В основном, плагин kvm использует virsh для проверки статуса, поэтому я включил вход для nrpe (также попробовал пользователя nagios, но он кажется, что служба работает под пользователем nrpe) и попробовал следующее:

[root@vhost3 ~]# su nrpe
sh-4.2$ virsh list --all
error: failed to connect to the hypervisor
error: no valid connection
error: Cannot create user runtime directory '/run/user/0/libvirt': Permission denied

Но, конечно, нет проблем с этой командой как root, и плагин хорошо работает при локальных попытках:

[root@vhost3 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 2     www                            running
[root@vhost3 ~]# /usr/lib64/nagios/plugins/check_kvm
hosts:1 OK:1 WARN:0 CRIT:0 - www:running

Я пробовал добавить пользователя nrpe и nagios, если на то пошло, в группы kvm и qemu, я не нашел группу libvirtd. Одна странность заключается в том, что у меня другая ошибка на другом компьютере, возможно, я сделал что-то другое на этом сервере, но вместо этого получаю следующее:

[root@vhost1 ~]# su nrpe
sh-4.2$ virsh list --all
error: failed to connect to the hypervisor
error: no valid connection
error: Failed to connect socket to '/run/user/0/libvirt/libvirt-sock': Permission denied

Другая странность вышеупомянутой ошибки заключается в том, что каталог / run / user / 0 / libvirt не существует. На этом хосте CentOS7 правильный каталог - / var / run / libvirt, где существует libvirt-sock. Может кто-нибудь подсказать, в чем моя проблема?

По умолчанию пользователи без полномочий root не могут получить доступ к libvirtd напрямую, если явно не предоставили авторизацию.

Я сделал это используя PolicyKit:

# cat /etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules
polkit.addRule(function(action, subject) {
        if (action.id == "org.libvirt.unix.manage" &&
            subject.user == "nrpe") {
                return polkit.Result.YES;
                polkit.log("action=" + action);
                polkit.log("subject=" + subject);
        }
});

Это позволит пользователю nrpe делать с libvirtd все, что они хотят, не требуя пароля.

Во-вторых, пользователям без полномочий root необходимо явно указать URL-адрес подключения, чтобы получить доступ к системной libvirtd.

virsh --connect qemu:///system list --all