On Tue, Jul 09, 2019 at 02:03:15PM +0200, Stephan von Krawczynski wrote:
On Tue, 9 Jul 2019 09:40:23 +0100
Daniel P. Berrangé <berrange(a)redhat.com> wrote:
> On Mon, Jul 08, 2019 at 09:47:24PM +0200, Stephan von Krawczynski wrote:
> > Hello list,
> >
> > I came across a fundamental flaw in the libvirt user configuration lately
> > and try to find a solution now. Here is the problem:
> > I run several qemu instances on arch linux all configured via libvirt. The
> > default config as user nobody:kvm was fine up to the day I tried to use a
> > host filesystem via 9p. If you want to gain all user rights on the guest
> > inside that fs you have to run qemu as root. So far so good. But if you
> > have several qemus running and only one needs to be root, what to do? You
> > can try to give a -runas by using <qemu:args>. But that does not work,
> > qemu instantly crashes. I think this is because to have _one_ root qemu,
> > you have to configure libvirt to use root user. This means all rights to
> > fs and so on are set to root and this is what lets qemu probably go crazy
> > if dropping root by -runas. The whole thing would be a lot easier and more
> > transparent if the user in libvirt wouldn't be a global config, but
> > instead be part of the domain xml. This way every qemu started could use a
> > different user and have different rights.
> > In my case all but one could be nobody:kvm, and one root:root.
> > This should not be to complicated based on whats already there, is it?
>
> Libvirt needs to know about the user/group QEMU is running at in order to
> ensure it gets given access to the various files it needs to use. If you
> look at the XML of the running guest you should see a <seclabel> describing
> the user/group it is running as currently.
>
> If no <seclabel> is in the offline config, libvirt adds the default
> seclabel, but if you want a different user/group, you can add the
> <seclabel> yourself.
>
> Regards,
> Daniel
Hello Daniel,
well, tried that (as good as the docs are) by adding:
<seclabel type='dynamic' model='dac'>
<label>nobody:kvm</label>
</seclabel>
This edit worked in virsh without giving errors.
Starting the domain and then looking into the xml showed:
<seclabel type='dynamic' model='dac' relabel='yes'/>
Consequently qemu runs still as root. My user:group setting simply vanished.
I think at least some better docs are needed with a striking example of how to
change user and group ...
I may be biased, but how to set user and group is probably the most basic
example of how to use seclabel - and I cannot find one.
I agree that the documentation is not the best one.
You need to use type='static' relabel='yes':
<seclabel type='static' model='dac' relabel='yes'>
<label>nobody:kvm</label>
</seclabel>
To achieve that.
In addition if you would like to have only one VM as root:root you
should keep the default config as nobody:kvm and use the root:root for
that specific VM.
Pavel