3 votes

CentOS7 : KVM : erreur : Cannot create user runtime directory '/run/user/0/libvirt' : Permission refusée

J'ai essayé de résoudre un problème que j'ai trouvé en faisant utiliser à notre installation Nagios un plugin pour KVM, check_kvm, que j'ai trouvé. Je pense que mon problème se résume à un problème de permissions avec l'utilisateur nagios/nrpe. Après avoir installé nrpe et les plugins, je n'ai aucun problème avec les autres plugins standards comme check_disk ou check_load, etc. En gros, le plugin kvm utilise virsh pour vérifier l'état, j'ai donc activé le login pour nrpe (j'ai aussi essayé l'utilisateur nagios, mais il semble que le service tourne sous l'utilisateur nrpe) et j'ai essayé ce qui suit :

[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

Mais aucun problème avec cette commande en tant que root bien sûr et le plugin s'exécute bien en local :

[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

J'ai essayé d'ajouter l'utilisateur nrpe, ainsi que nagios, aux groupes kvm et qemu, mais je ne trouve pas de groupe libvirtd. Une chose étrange est que j'obtiens une erreur différente sur une autre machine, peut-être ai-je fait quelque chose de différent sur ce serveur, mais j'obtiens ceci à la place :

[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

Autre chose étrange dans l'erreur ci-dessus, le répertoire /run/user/0/libvirt n'existe pas. Sur cet hôte CentOS7, le répertoire correct est /var/run/libvirt où se trouve libvirt-sock. Quelqu'un peut-il me dire quel est mon problème ?

3voto

Michael Hampton Points 232226

Par défaut, les utilisateurs non root ne peuvent pas accéder directement à libvirtd, sauf autorisation explicite.

Je l'ai fait en utilisant 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);
        }
});

Cela permettra à l'utilisateur nrpe faire ce qu'ils veulent avec libvirtd sans avoir besoin d'un mot de passe.

Deuxièmement, les utilisateurs non root doivent spécifier explicitement l'URL de connexion afin d'accéder au système libvirtd.

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

1voto

Kevin Points 113

Vieux sujet, mais j'ai eu le même problème aujourd'hui et je pense que la réponse ci-dessus n'est pas la solution la plus simple :

ssh root@node
[root@node ~]# su kevin
[kevin@node root]$ echo $XDG_RUNTIME_DIR
/run/user/0
[kevin@node root]$ virsh capabilities
error: failed to connect to the hypervisor
error: Cannot create user runtime directory '/run/user/0/libvirt': Permission denied

--> ne fonctionne pas

ssh kevin@node
[kevin@perf28 ~]$ echo $XDG_RUNTIME_DIR
/run/user/1001
[kevin@perf28 ~]$ virsh capabilities
<capabilities>
...
</capabilities>

--> fonctionne !

Le problème est donc que su (extrait de l'article root ) ne met pas en place XDG_RUNTIME_DIR Il faut donc soit se reconnecter avec l'utilisateur, soit définir manuellement l'option XDG_RUNTIME_DIR .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X