Como posso conceder acesso de leitura ao KVM para / dev / sg0?

0

Estou tentando passar uma unidade ótica física para um convidado KVM.

Aqui está como eu tenho o dispositivo definido em XML:

<controller type='scsi' index='0' model='virtio-scsi'/>
    <hostdev mode='subsystem' type='scsi'>
      <source>
        <adapter name='scsi_host4'/>
        <address type='scsi' bus='0' target='0' unit='0'/>
      </source>
  <readonly/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</hostdev>

Infelizmente, quando tento inicializar a VM, recebo este erro:

drive file=/dev/sg0,if=none,id=drive-hostdev0,readonly=on: Could not open '/dev/sg0': Permission denied

Como posso corrigir isso?

    
por Sean W. 09.05.2018 / 20:45

1 resposta

2

Primeiro, você deve verificar se é o AppArmor que está bloqueando seu dispositivo:

dmesg | grep /dev/sg0

Se você vir uma mensagem semelhante a:

[159883.682167] audit: type=1400 audit(1534114680.047:392): apparmor="DENIED" operation="file_lock" profile="libvirt-40d3ad0d-0574-4823-ae7d-eaf38afa7fb6" name="/dev/sg0"

Em seguida, ele está sendo bloqueado pelo AppArmor. Se o campo de perfil se parecer com o identificador do domínio localizado após profile= porção, ele será um perfil criado dinamicamente criado pelo KVM após o início do domínio como parte da integração do KVM com o AppArmor.

Você pode permitir o acesso a alguns ou todos os seus dispositivos SCSI para seus hosts KVM editando o arquivo de gabarito normalmente localizado em /etc/apparmor.d/libvirt . Você deve ver um arquivo TEMPLATE.qemu que é usado como base para os perfis AppArmor criados dinamicamente. Você pode colocar na lista de permissões o (s) dispositivo (s) neste arquivo ou editar o arquivo apontado pela inclusão listada no arquivo de modelo, que geralmente é /etc/apparmor.d/abstractions/libvirt-qemu . Para whitelist, basta adicionar suas entradas em suas próprias linhas para o arquivo da seguinte forma:

Para ler:

/dev/sg* rk,

Para leitura / gravação:

/dev/sg* rwk,

Se você estiver usando a GUI para editar os dispositivos SCSI no domínio, talvez perceba que os dispositivos não são exibidos corretamente na GUI. Por exemplo, se você estiver tentando passar por uma unidade ótica, pode não mostrar que a mídia está na unidade, mesmo que haja alguma. Você também desejará colocar esses dispositivos whilellist no serviço KVM adicionando entradas semelhantes ao arquivo /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper e, em seguida, informar ao AppArmor para recarregar as configurações:

service apparmor reload

Se os dispositivos SCSI forem ligados por links simbólicos, talvez seja necessário adicionar esses dispositivos com links simbólicos à sua lista de permissões também. Os erros do AppArmor permitirão que você saiba se esse é o caso, pois você verá erros atualizados à medida que você coloca na lista de permissões os dispositivos para leitura ou gravação, se você não tiver todos eles cobertos.

    
por Jose R. 13.08.2018 / 01:11