GNU/Linux >> Linux の 問題 >  >> Linux

[解決済み]ストレージファイルにアクセスできません。KVMLibvirtでアクセスが拒否されましたエラー

今日、私はvirsh startを使用してArchLinux仮想マシンを起動しました コマンドを実行すると、このエラーが発生しました-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 。実際には、KVMLibvirtプロバイダーで作成されたVagrantマシンです。

次に、vagrant upを使用してVMを再起動しようとしました 指図。同じエラーが表示されました。

 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

念のため、もう一度Virt-managerGUIアプリケーションからVMを起動してみました。今回も同じエラーが返されました。

すべてのエラーメッセージは、qemuが明示的に示しています ユーザーには、Libvirtストレージディレクトリへの読み取り権限がありません。

この簡単なチュートリアルでは、KVM Libvirtで「エラー:ドメインの開始に失敗しました...エラー:ストレージファイルにアクセスできません....(uid:107、gid:107として):アクセスが拒否されました」を修正する方法を紹介します。 。

KVM Libvirtの「ストレージファイルにアクセスできません、アクセスが拒否されましたエラー」を修正しました

これは、一般的なKVMLibvirtエラーの1つです。このエラーは通常、Libvirtのデフォルトのストレージディレクトリのパスを変更した後に発生します

数日前、Libvirtの保存場所を$HOMEに移動しました ディレクトリ。そのため、このエラーが発生します。

2つの方法で修正できます。

方法1:

ステップ1: /etc/libvirt/qemu.confを編集します ファイル:

$ sudo nano /etc/libvirt/qemu.conf

ステップ2: userを見つけます およびgroup ディレクティブ。デフォルトでは、両方とも"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"
 [...]

両方の行のコメントを解除し、rootを置き換えます ユーザー名とlibvirtのグループ 以下に示すように:

 [...] 
 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"
 [...]

CTRL+Oを押します ENTERを押します 変更を保存してCTRL+Xを押します ファイルを終了します。

ステップ3: libvirtdを再起動します サービス:

$ sudo systemctl restart libvirtd

ステップ4: ユーザーがlibvirtのメンバーであることを確認してください グループ。そうでない場合は、ユーザーをlibvirtに追加します コマンドを使用してグループ化:

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

ステップ5: 最後にVMを起動します:

$ virsh start

vagrantを使用する場合は、代わりにこれを実行してください:

$ vagrant up

今回は仮想マシンが起動するはずです。

ステップ6: VMのステータスを確認します:

$ virsh list

または、

$ vagrant status

方法2:

KVM Libvirtパーミッションの問題を修正する別の方法は、Libvirtストレージプールディレクトリに適切なACLパーミッションを設定することです。私の場合、ストレージプールディレクトリは$HOMEにあります。 ディレクトリ。

ステップ1: $HOMEへの現在のACL権限を取得しましょう ディレクトリ。

$ sudo getfacl -e /home/sk/

出力例:

 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::---

上記の出力にあるように、qemu ユーザーは読み取りを持っていません ストレージプールの場所へのアクセス許可。一部のディストリビューションでは、ユーザー名はlibvirt-qemuの場合があります。 。

ステップ2: ユーザーqemuの読み取りおよび実行可能権限を設定します コマンドの使用:

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

qemuを置き換えます および/home/sk/ 自分で。

これで、qemuユーザーはストレージプールディレクトリに対する読み取りおよび実行可能権限を持ちます。コマンドを使用して確認できます:

$ sudo getfacl -e /home/sk/

出力例:

 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::---

ステップ3: libvirtdサービスを再起動します:

$ sudo systemctl restart libvirtd

これで、Libvirtゲストマシンが問題なく起動します。

結論

このガイドでは、KVM libvirtで「ストレージファイルのアクセス許可が拒否されました」というエラーが発生する理由と、Linuxで2つの異なる方法で修正する方法について説明しました。


Linux
  1. エラーを修正する方法– ModSecurity:コード44でアクセスが拒否されました[Apache]

  2. pipフリーズはエラーを返します:アクセスが拒否されました:hg

  3. エラーアクセス拒否にはPROCESS特権が必要です[MySQL]

  1. MySQL - エラー 1045 - アクセスが拒否されました

  2. docker.sock 許可が拒否されました

  3. mysql (mariadb) エラー 1698 (28000):ユーザー 'root'@'localhost' のアクセスが拒否されました

  1. (解決済み)メールボックス/ var / mail / userを開くことができません:Linuxでアクセスが拒否されましたエラー

  2. ユーザーが ftp 経由で vsftpd サーバーにログインすると、エラー「530:許可が拒否されました」

  3. ユーザーが crontab を編集できない、エラー:「/tmp/crontab.Lm34gsJV:権限が拒否されました」