'/root/CentOS-7-x86_64-Minimal-1611.iso' を開けません: 権限が拒否されました。

'/root/CentOS-7-x86_64-Minimal-1611.iso' を開けません: 権限が拒否されました。

CentOS 7ホストでCentOS 7ゲスト仮想マシンを作成するためにvirt-installを使用しようとすると、次のエラーが発生します。

Could not open '/root/CentOS-7-x86_64-Minimal-1611.iso': Permission denied

CentOS 7ゲスト仮想マシンを正常にインストールするには、このエラーを解決するためにどのような具体的な手順を実行する必要がありますか?

詳細は次のとおりです。


エラーを再現する手順:

まずisocentosミラーからファイルをダウンロードしました。

[root@remote-host ~]# wget http://centos.mbni.med.umich.edu/mirror/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
--2017-03-13 12:52:53--  http://centos.mbni.med.umich.edu/mirror/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso
Resolving centos.mbni.med.umich.edu (centos.mbni.med.umich.edu)... 141.214.186.162
Connecting to centos.mbni.med.umich.edu (centos.mbni.med.umich.edu)|141.214.186.162|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 713031680 (680M) [application/octet-stream]
Saving to: ‘CentOS-7-x86_64-Minimal-1611.iso’

100%[============================================================================================================================>] 713,031,680 14.2MB/s   in 50s

2017-03-13 12:53:43 (13.5 MB/s) - ‘CentOS-7-x86_64-Minimal-1611.iso’ saved [713031680/713031680]

次に、次のインストールコマンドを実行しましたが、エラーが発生しました。

[root@remote-host ~]# virt-install \
> --name centos7 \
> --ram 2048 \
> --disk path=/dev/mapper/centos-third,size=242 \
> --vcpus 1 \
> --os-type generic \
> --os-variant generic \
> --network bridge=virbr0 \
> --graphics none \
> --console pty,target_type=serial \
> --cdrom ./CentOS-7-x86_64-Minimal-1611.iso
WARNING  CDROM media does not print to the text console by default, so you likely will not see text install output. You might want to use --location. See the man page for examples of using --location with CDROM media

Starting install...
ERROR    internal error: qemu unexpectedly closed the monitor: 2017-03-13T19:58:02.701397Z qemu-kvm: -drive file=/root/CentOS-7-x86_64-Minimal-1611.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=on: could not open disk image /root/CentOS-7-x86_64-Minimal-1611.iso: Could not open '/root/CentOS-7-x86_64-Minimal-1611.iso': Permission denied
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  virsh --connect qemu:///system start centos7
otherwise, please restart your installation.
[root@remote-host ~]#

権限の問題を評価するために、次のようにディレクトリの内容を確認しました。

[root@remote-host ~]# ls -al
total 696356
dr-xr-x---.  4 root root      4096 Mar 13 12:52 .
dr-xr-xr-x. 24 root root      4096 Mar 13 12:00 ..
-rw-------.  1 root root      2365 Mar 12 11:14 anaconda-ks.cfg
-rw-------.  1 root root      1091 Mar 13 12:13 .bash_history
-rw-r--r--.  1 root root        18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root       176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root       176 Dec 28  2013 .bashrc
drwxr-xr-x.  4 root root        36 Mar 13 12:42 .cache
-rw-r--r--.  1 qemu qemu 713031680 Dec  5 15:44 CentOS-7-x86_64-Minimal-1611.iso
drwxr-xr-x.  3 root root        17 Mar 13 10:52 .config
-rw-r--r--.  1 root root       100 Dec 28  2013 .cshrc
-rw-r--r--.  1 root root       129 Dec 28  2013 .tcshrc

root他のユーザーのファイルにアクセスできる必要があることを知っていますが、ユーザーを次のようrootに変更してコマンドを再実行してみました。

[root@remote-host ~]# chown root:root CentOS-7-x86_64-Minimal-1611.iso                                                                                       [root@remote-host ~]# ls -al
total 696356
dr-xr-x---.  4 root root      4096 Mar 13 12:52 .
dr-xr-xr-x. 24 root root      4096 Mar 13 12:00 ..
-rw-------.  1 root root      2365 Mar 12 11:14 anaconda-ks.cfg
-rw-------.  1 root root      1091 Mar 13 12:13 .bash_history
-rw-r--r--.  1 root root        18 Dec 28  2013 .bash_logout
-rw-r--r--.  1 root root       176 Dec 28  2013 .bash_profile
-rw-r--r--.  1 root root       176 Dec 28  2013 .bashrc
drwxr-xr-x.  4 root root        36 Mar 13 12:42 .cache
-rw-r--r--.  1 root root 713031680 Dec  5 15:44 CentOS-7-x86_64-Minimal-1611.iso
drwxr-xr-x.  3 root root        17 Mar 13 10:52 .config
-rw-r--r--.  1 root root       100 Dec 28  2013 .cshrc
-rw-r--r--.  1 root root       129 Dec 28  2013 .tcshrc
[root@remote-host ~]# virt-install --name centos7 --ram 2048 --disk path=/dev/mapper/centos-third,size=242 --vcpus 1 --os-type generic --os-variant generic --network bridge=virbr0 --graphics none --console pty,target_type=serial --cdrom ./CentOS-7-x86_64-Minimal-1611.iso
WARNING  CDROM media does not print to the text console by default, so you likely will not see text install output. You might want to use --location. See the man page for examples of using --location with CDROM media

Starting install...
ERROR    internal error: qemu unexpectedly closed the monitor: 2017-03-13T20:06:07.525792Z qemu-kvm: -drive file=/root/CentOS-7-x86_64-Minimal-1611.iso,format=raw,if=none,id=drive-ide0-0-1,readonly=on: could not open disk image /root/CentOS-7-x86_64-Minimal-1611.iso: Could not open '/root/CentOS-7-x86_64-Minimal-1611.iso': Permission denied
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
  virsh --connect qemu:///system start centos7
otherwise, please restart your installation.
[root@remote-host ~]#

[root@remote-host ~]# virsh --connect qemu:///system start centos7
error: failed to get domain 'centos7'
error: Domain not found: no domain with matching name 'centos7'

[root@remote-host ~]#

ご覧のとおり、同じエラーが発生します。 ゲスト仮想マシンが正常にインストールされるように、このエラーを解決するにはどうすればよいですか?

答え1

また、SELinuxを有効にしましたが(うまくいきます)、ISOのコンテキストによってqemuがそれを読み取ることができない可能性があります。

ISOを/tmp

ISOを移動してもqemuがまだISOにアクセスできない場合は、/tmp内容を確認して/var/log/audit/audit.logアクセス違反が記録されていることを確認してください。

/tmpたとえば、ISOを移動した後にSELinuxコンテキストを表示するにはls -lZ /tmp/

これは、ファイルにアクセスするプログラムのコンテキストが何であるかを知らせませんが、現在のコンテキストを表示します。このファイルの他のファイル(プログラムがすでにアクセス可能なファイル)のコンテキストを比較すると、このファイルを設定できるコンテキストを絞り込むのに役立ちます。

この場合、ISOがqemuがアクセスできるディレクトリにある限り、qemuが読み取れるようにISOのコンテキストを設定できます。chcon -t virt_content_t <filename>.iso

答え2

ディレクトリには/root権限0550、所有者、およびグループ所有者がありますroot。また.、に示すようにSELinuxコンテキストもありますdr-xr-x---.。グループ内のユーザーだけがディレクトリ内のファイルをroot読み取って実行できます。/rootさらに、誤ったSELinuxコンテキストによってSELinuxが実行されるたびにファイルアクセスがブロックされる可能性があります。つまり、ディレクトリ権限が0777(すべてのユーザーにすべてのアクセスを許可)してもSELinuxコンテキストが正しく設定されていないと、qemuユーザーはファイルを読み取ることができません。 SELinuxコンテキストを表示するために使用されますls -lZ。以下は/rootディレクトリの基本的な結果です。

dr-xr-x---. root root system_u:object_r:admin_home_t:s0 root

ご覧のとおり、admin_home_tこれは本当ではないvirt_image_tか、他の許可されたSELinuxコンテキストではありません。

以下のように、FTPやWebサーバーを使用するなど、これを行うためのより多くの方法があります。

Webサーバーの使用

yum install -y httpd
systemctl enable httpd
mkdir /var/www/html/centos
mount -o loop centos.iso /mnt
cp -a /mnt/. /var/www/html/centos
chcon -R --reference=/var/www/html /var/www/html/centos
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
systemctl restart httpd
umount /mnt

この-l http://x.x.x.x/pub/centosように--cdrom

FTPサーバーの使用

yum install -y vsftpd
systemctl enable vsftpd
mkdir /var/ftp/pub/centos
mount -o loop centos.iso /mnt
cp -a /mnt/. /var/ftp/pub/centos
chcon -R -t public_content_t /var/ftp/
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
systemctl restart vsftpd
umount /mnt

この-l ftp://x.x.x.x/pub/centosように--cdrom

つまり、権限とSELinuxコンテキストを変更するか、上記の代替方法を使用してください。

答え3

Centos 6.9サーバーで仮想マシンを作成しようとしたときにエラー(オペレーティングシステムファイル(Windows 10)に対する権限が拒否されました)が発生しました。 DVDのファイルをノード(/virt)のディレクトリにコピーし、コンテキストを確認しました。/etc/libvirt/qemudir のコンテキストが/virt期待されるコンテンツに変更されます。

$ ls -lZ
-rw-r--r--. root root system_u:object_r:virt_etc_t:s0  qemu.conf

$ls -lz 
drwxr-xr-x. root root system_u:object_r:virt_etc_rw_t:s0 virt

コンテキストタイプを追加してこれを行います。

semanage -a -t virt_etc_rw_t '/virt(/.*)?'

次に、

$ restorecon -RFvv /virt
127  semanage fcontext -l qemu
145  semanage fcontext -a -t virt_etc_rw_t '/virt(/.*)?'
210  history | grep semanage

[root@centos libvirt]# history | grep restore
146  restorecon -RFvv /virt

これにより、問題なくISOファイルを使用できます。

関連情報