GNU/Linux >> Tutoriels Linux >  >> Linux

[Résolu] Impossible d'accéder au fichier de stockage, autorisation refusée Erreur dans KVM Libvirt

Aujourd'hui, j'ai démarré ma machine virtuelle Arch Linux en utilisant virsh start commande et s'est retrouvé avec cette erreur - Failed to start domain 'Archlinux_default' error: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied . Il s'agit en fait d'une machine Vagrant créée avec le fournisseur KVM Libvirt.

Ensuite, j'ai réessayé de démarrer la VM en utilisant vagrant up commande. Il a également affiché la même erreur.

 Bringing machine 'default' up with 'libvirt' provider…
 ==> default: Checking if box 'archlinux/archlinux' version '20210601.24453' is up to date…
 ==> default: Starting domain.
 There was an error talking to Libvirt. The error message is shown
 below:
 Call to virDomainCreateWithFlags failed: Cannot access storage file '/home/sk/.local/share/libvirt/images/Archlinux_default.img' (as uid:107, gid:107): Permission denied

Juste pour être sûr, j'ai essayé une fois de plus de démarrer la machine virtuelle à partir de l'application graphique Virt-manager. Cette fois aussi, la même erreur a été renvoyée.

Tous les messages d'erreur indiquent explicitement que le qemu l'utilisateur n'a pas l'autorisation de lecture sur le répertoire de stockage Libvirt.

Dans ce bref didacticiel, permettez-moi de vous montrer comment corriger "erreur :échec du démarrage du domaine ... erreur :impossible d'accéder au fichier de stockage .... (comme uid:107, gid:107):autorisation refusée" dans KVM Libvirt .

Correction "Impossible d'accéder au fichier de stockage, erreur d'autorisation refusée" dans KVM Libvirt

C'est l'une des erreurs courantes de KVM Libvirt. Cette erreur se produit généralement après la modification du chemin du répertoire de stockage par défaut de Libvirt .

Il y a quelques jours, j'ai déplacé l'emplacement de stockage Libvirt vers mon $HOME annuaire. C'est pourquoi j'obtiens cette erreur.

Nous pouvons y remédier de deux manières.

Méthode 1 :

Étape 1 : Modifier /etc/libvirt/qemu.conf fichier :

$ sudo nano /etc/libvirt/qemu.conf

Étape 2 : Trouver l'user et group directives. Par défaut, les deux sont définis sur "root" .

 [...] 
 Some examples of valid values are:
 #
 user = "qemu"   # A user named "qemu"
 user = "+0"     # Super user (uid=0)
 user = "100"    # A user named "100" or a user with uid=100
 #
 #user = "root"
 The group for QEMU processes run by the system instance. It can be
 specified in a similar way to user.
 #group = "root"
 [...]

Décommentez les deux lignes et remplacez root avec votre nom d'utilisateur et groupez avec libvirt comme indiqué ci-dessous :

 [...] 
 Some examples of valid values are:
 #
 user = "qemu"   # A user named "qemu"
 user = "+0"     # Super user (uid=0)
 user = "100"    # A user named "100" or a user with uid=100
 #
 user = "sk"
 The group for QEMU processes run by the system instance. It can be
 specified in a similar way to user.
 group = "libvirt"
 [...]

Appuyez sur CTRL+O et appuyez sur ENTER pour enregistrer les modifications et appuyez sur CTRL+X pour quitter le fichier.

Étape 3 : Redémarrez libvirtd service :

$ sudo systemctl restart libvirtd

Étape 4 : Veuillez vous assurer que l'utilisateur est membre de libvirt grouper. Sinon, ajoutez l'utilisateur à libvirt groupe à l'aide de la commande :

$ sudo usermod -a -G libvirt $(whoami)

Étape 5 : Démarrez enfin la VM :

$ virsh start

Si vous préférez utiliser vagrant, lancez ceci à la place :

$ vagrant up

Cette fois, la machine virtuelle devrait démarrer.

Étape 6 : Vérifiez l'état de la machine virtuelle :

$ virsh list

Ou,

$ vagrant status

Méthode 2 :

L'autre moyen de résoudre le problème d'autorisation KVM Libvirt consiste à définir l'autorisation ACL appropriée sur le répertoire du pool de stockage Libvirt. Dans mon cas, mon répertoire de pool de stockage se trouve dans $HOME répertoire.

Étape 1 : Obtenons les autorisations ACL actuelles sur $HOME répertoire.

$ sudo getfacl -e /home/sk/

Exemple de résultat :

 getfacl: Removing leading '/' from absolute path names
 file: home/sk/
 owner: sk
 group: sk
 user::rwx
 user:qemu:--x            #effective:--x
 group::---            #effective:---
 mask::--x
 other::---

Comme vous le voyez dans la sortie ci-dessus, le qemu l'utilisateur n'a pas lu l'autorisation d'accès à l'emplacement du pool de stockage. Dans certaines distributions, le nom d'utilisateur peut être libvirt-qemu .

Étape 2 : Définissez les autorisations de lecture et d'exécution pour l'utilisateur qemu en utilisant la commande :

$ sudo setfacl -m u:qemu:rx /home/sk/

Remplacer qemu et /home/sk/ avec le vôtre.

Désormais, l'utilisateur qemu dispose d'une autorisation de lecture et d'exécution sur le répertoire du pool de stockage. Vous pouvez le vérifier en utilisant la commande :

$ sudo getfacl -e /home/sk/

Exemple de résultat :

 getfacl: Removing leading '/' from absolute path names
 file: home/sk/
 owner: sk
 group: sk
 user::rwx
 user:qemu:r-x            #effective:--x
 group::---            #effective:---
 mask::--x
 other::---

Étape 3 : Redémarrez le service libvirtd :

$ sudo systemctl restart libvirtd

Maintenant, les machines invitées Libvirt démarreront sans aucun problème.

Conclusion

Dans ce guide, nous avons expliqué pourquoi nous obtenons l'erreur "Impossible d'accéder au fichier de stockage, autorisation refusée" dans KVM libvirt et comment y remédier de deux manières différentes sous Linux.


Linux
  1. Erreur "530 :autorisation refusée" lorsque l'utilisateur se connecte au serveur vsftpd via ftp

  2. L'utilisateur ne peut pas modifier crontab, erreur :"/tmp/crontab.Lm34gsJV :autorisation refusée"

  3. Git incapable de créer l'autorisation de fichier refusée

  4. ERREUR 1045 (28000) :Accès refusé pour l'utilisateur 'root'@'localhost' (en utilisant le mot de passe :OUI)

  5. autorisation docker.sock refusée

Comment résoudre l'erreur MySQL :Accès refusé pour l'utilisateur [protégé par e-mail]

Comment réparer l'erreur – ModSecurity :Accès refusé avec le code 44 [Apache]

(Résolu) Impossible d'ouvrir la boîte aux lettres /var/mail/user :erreur d'autorisation refusée sous Linux

Dépannage :Erreur MySQL/MariaDB #1044 Е Accès refusé pour l'utilisateur

Apache ne peut pas accéder au fichier alors qu'il a l'autorisation ?

Autorisation de montage CIFS refusée sous Linux - Corrigé !