Não foi possível abrir '/root/CentOS-7-x86_64-Minimal-1611.iso': Permissão negada

1

Uma tentativa de usar o virt-install para criar uma máquina virtual convidada do CentOS 7 em um host do CentOS 7 está gerando o seguinte erro:

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

Quais etapas específicas precisam ser tomadas para resolver esse erro, para que a máquina virtual convidada do CentOS 7 possa ser instalada com sucesso?

Os detalhes são os seguintes:

Passos para reproduzir o erro:

Primeiro, baixei o arquivo iso de um espelho centos:

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

Em seguida, executei o seguinte comando de instalação, que resultou no erro:

[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 ~]#

Para avaliar o problema de permissão, revi o conteúdo do diretório da seguinte forma:

[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

Embora eu saiba que root consiga acessar os arquivos de qualquer outro usuário, tentei alterar o usuário para root e executar novamente o comando da seguinte forma:

[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 ~]#

Como você pode ver, recebi o mesmo erro. O que mais precisa ser feito para resolver esse erro, para que a máquina virtual convidada possa ser instalada com êxito?

    
por CodeMed 13.03.2017 / 21:25

3 respostas

1

Você também tem o SELinux habilitado (o que é bom), mas o contexto do ISO pode estar impedindo o qemu de lê-lo também.

Tente mover o ISO para /tmp . O qemu deve ter acesso para ler arquivos em / tmp se o contexto do arquivo individual for apropriado.

Se o qemu ainda não conseguir acessar o ISO depois de movê-lo para /tmp , verifique o conteúdo de /var/log/audit/audit.log para ver se alguma violação de acesso foi registrada lá.

Para visualizar os contextos do SELinux, por exemplo, depois de mover o ISO para /tmp , use ls -lZ /tmp/ .

Isto não lhe dirá quais devem ser os contextos para o programa acessar o arquivo, mas mostrará o contexto atual. Comparar o contexto de outros arquivos (que o programa já pode acessar) para este arquivo deve ajudá-lo a restringir o que você poderia definir o contexto deste arquivo.

Neste cenário, desde que o ISO esteja localizado em um diretório ao qual o qemu tenha acesso, você pode definir o contexto do ISO para que o qemu possa lê-lo com chcon -t virt_content_t <filename>.iso

    
por 14.03.2017 / 14:50
1

O diretório, /root , tem permissões, 0550 , com proprietário e proprietário do grupo, root . Ele também possui um contexto SELinux, conforme indicado pelo . in dr-xr-x---. . Somente usuários no grupo root podem ler e executar arquivos no diretório /root . Além disso, desde que o SELinux esteja aplicando, o contexto errado do SELinux pode impedir o acesso ao arquivo. Em outras palavras, mesmo se as permissões do diretório forem 0777 (permitindo acesso a todos os usuários), o usuário do qemu não poderá ler o arquivo, a menos que o contexto do SELinux tenha sido configurado corretamente. Use ls -lZ para mostrar um contexto do SELinux. O seguinte é o resultado padrão para o diretório /root .

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

Como podemos ver, admin_home_t não é virt_image_t ou algum outro contexto permitido do SELinux.

Existem mais maneiras de fazer isso, como usar um servidor FTP ou da Web, como segue.

Usando um servidor da 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

Com isso, use -l http://x.x.x.x/pub/centos em vez de --cdrom .

Usando um servidor 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

Com isso, use -l ftp://x.x.x.x/pub/centos em vez de --cdrom .

Em suma, apenas obtenha as permissões e o contexto do SELinux corrigidos, ou use um método alternativo, dois dos quais foram descritos acima.

    
por 14.03.2017 / 14:18
1

Eu tive um erro ao tentar criar uma VM no meu servidor Cents 6.9 (permissão negada no arquivo OS (windows 10)), eu copiei o arquivo do dvd para um diretório no nó (/ virt), eu Verificou o Contexto do /etc/libvirt/qemu e alterou o contexto do /virt dir para o que era esperado:

$ 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

Eu fiz isso adicionando o tipo de contexto:

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

Então,

$ 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

e depois consegui usar o arquivo ISO sem problemas.

    
por 07.04.2017 / 08:22