CentOS7: KVM: erro: Não é possível criar o diretório de tempo de execução do usuário '/ run / user / 0 / libvirt': Permissão negada

2

Estou tentando resolver um problema que encontrei ao fazer com que a instalação do Nagios usasse um plug-in para o KVM, check_kvm, que encontrei. Eu acho que o meu problema se resume a um problema de permissões com o usuário nagios / nrpe. Depois de instalar o nrpe e plugins, eu não tenho problemas com outros plugins padrão como check_disk ou check_load, etc. Basicamente, o plugin kvm está usando virsh para verificar o status, então eu habilitei login para nrpe (também tentei o usuário nagios, mas aparece o serviço está sendo executado sob o usuário nrpe) e tentou o seguinte:

[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

Mas não há problema com este comando como root, claro, e o plugin é bem executado quando se tenta localmente:

[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

Eu tentei adicionar o usuário nrpe e o nagios, para os grupos kvm e qemu, não encontro um grupo libvirtd. Uma coisa estranha é que eu recebo um erro diferente em outra máquina, talvez eu tenha feito algo diferente nesse servidor, mas eu entendo isso:

[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

Outra coisa estranha sobre o erro acima, o diretório / run / user / 0 / libvirt não existe. Neste host CentOS7, o diretório correto é / var / run / libvirt onde a libvirt-sock existe. Alguém pode sugerir qual é o meu problema?

    
por rwfitzy 29.11.2015 / 19:03

1 resposta

2

Por padrão, usuários não-root não podem acessar o libvirtd diretamente, a menos que seja concedida autorização explicitamente.

Eu fiz isso usando o 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);
        }
});

Isso permitirá que o usuário nrpe faça o que quiser com o libvirtd sem precisar de senha.

Segundo, os usuários não-root precisam especificar a URL de conexão explicitamente para acessar o sistema libvirtd.

virsh --connect qemu:///system list --all
    
por 29.11.2015 / 19:20