Como criar um ambiente onde cada usuário vm é isolado

4

Eu quero saber se é possível criar um ambiente multiusuário usando o KVM libvirt
ou seja, cada usuário pode criar seu próprio vm, mas isso não deve ser acessível por outros. vi este uso Multiuser do virt-manager
parece que não está funcionando
EDIT1 : Eu quero definir proprietários para cada vm

    
por dravigon 10.10.2016 / 17:55

4 respostas

0

Este arquivo como regra do polkit

function myFunction(username, virtualmachine) {
var arr = virtualmachine.split("*");
if(arr[0]==username){
    return true;
    }
else{
    return false;
   }
}
// Allow passwordless connection to qemu:///system
polkit.addRule(function(action, subject) {
  if (action.id == "org.libvirt.unix.manage")
   {
        return polkit.Result.YES;
        }
    });
// Give full access to 'vm'
polkit.addRule(function(action, subject) {
if (action.id.indexOf("org.libvirt.api.domain.") == 0 ) {
      if (action.lookup("connect_driver") == 'QEMU' &&  myFunction(subject.user, action.lookup("domain_name"))) {
            polkit.log("vm=" + action.lookup("domain_name") + "action =>"+myFunction(subject.user, action.lookup("domain_name")));
            polkit.log("subject=" + subject);
            polkit.log("ok");
        return polkit.Result.YES;
      } else {
        return polkit.Result.NO;
      }
      }
});

aqui a vm no formato

username*vmname

esta vm só é acessível para o usuário correspondente

PS this is only primitive rule that is you can't create a new pool or modify it ,etc., therefore furthure development of rule is required

    
por 23.11.2016 / 17:02
4

Graças ao suporte do PolicyKit da libvirt, acredito que isso pode ser feito, com base na quantidade de recursos que você precisa.

As regras podem ser criadas por você e acessadas por ACLs do PolicyKit como um banco de dados (arquivo, servidor, etc.) para obter as informações sobre os proprietários. Além disso, se a regra PolicyKit tiver acesso de gravação ao banco de dados, você poderá atribuir VMs a seus respectivos proprietários quando eles forem criados, criando assim esse banco de dados automaticamente. Pode não ser infalível (por exemplo, quando a definição da VM falha, o banco de dados já terá esse registro), portanto, alguns ganchos adicionais podem ser necessários, com base na funcionalidade que você está procurando. É por isso que há projetos construídos em cima do libvirt (ou apenas scripts implementados por administradores) que podem ter mais funcionalidade.

Se uma coisa mais simples for suficiente para você, você pode dizer que os usuários podem chamar APIs apenas em VMs que começam com o nome de usuário. Apenas certifique-se de que os casos de canto estão cobertos (por exemplo, o usuário "bla" não pode acessar as máquinas "blabla" do usuário).

Como foi dito, baseado em quanta funcionalidade você precisa, pode ser feito facilmente, ou com poucas linhas de um script, ou você pode precisar de um sistema de virtualização completo que fique no topo da libvirt.

Mais uma coisa que ninguém mencionou (e pode ser o que você quer / está procurando). Se você (como usuário não-root) se conectar ao qemu: /// session (em vez de system, veja Conexões ao driver do QEMU ) você se conectará à sua própria instância do daemon libvirt e verá apenas suas próprias máquinas (em outras palavras, ele será isolado dos daemons de sessão de outros usuários).

    
por 08.11.2016 / 14:09
2

Bem, assim como anunciado no artigo que você vincula, o libvirt suporta o PolicyKit por API (chamamos de ACL). Então, se você configurar algumas regras do polkit, você deve conseguir o que deseja. Por exemplo, o domínio X seria visível apenas para o usuário Y. Infelizmente, não acho que seja possível tornar essas regras dinâmicas (ou seja, se um usuário criar um domínio, ele ficará visível apenas para elas).

    
por 12.10.2016 / 11:47
0

A menos que você queira escrever seu próprio sistema de wrapper / gerenciamento, você simplesmente precisa de algo mais do que apenas libvirt, para gerenciar o acesso e a VM aos relacionamentos do usuário. oVirt / RHV tem isso pronto, mesmo com um portal de usuário especial, onde um usuário logado pode ver apenas as VMs que pertencem a ele. Tenho certeza de que outros sistemas de gerenciamento de virtualização também têm essa capacidade

    
por 11.10.2016 / 15:44