
On Thu, 11 Jul 2019 08:06:35 +0200 Stephan von Krawczynski <skraw.ml@ithnet.com> wrote:
On Wed, 10 Jul 2019 15:55:04 +0200 Martin Kletzander <mkletzan@redhat.com> wrote:
On Wed, Jul 10, 2019 at 03:44:54PM +0200, Stephan von Krawczynski wrote:
On Wed, 10 Jul 2019 14:48:14 +0200 Martin Kletzander <mkletzan@redhat.com> wrote:
On Tue, Jul 09, 2019 at 02:45:18PM +0200, Stephan von Krawczynski wrote:
On Tue, 9 Jul 2019 14:26:08 +0200 Pavel Hrdina <phrdina@redhat.com> wrote:
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@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
Hello Pavel,
thank you for taking up the thread, but unfortunately your suggestion does not work:
virsh # start collabora Fehler: Domain collabora konnte nicht gestartet werden Fehler: Interner Fehler: process exited while connecting to monitor: 2019-07-09T12:34:00.735392Z qemu-system-x86_64: -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-17-collabora/master-key.aes: Unable to read /var/lib/libvirt/qemu/domain-17-collabora/master-key.aes: Failed to open file “/var/lib/libvirt/qemu/domain-17-collabora/master-key.aes”: Permission denied
Obviously this is because "type='static'" means that libvirt does not care about setting the user rights for qemu, which then leads to this.
No, 'static' means you tell libvirt what the label should be, 'dynamic' means libvirt will generate it automatically.
I did think "relabel='yes'" should do that, but does not - or I have a deep misunderstanding concerning the seclabel parameters ... Thanks for any help to solve this, if there is no bug involved.
Relabel definitely does that and unless there is a bug it uses the seclabel for the domain. What could be happening is that one of the parent directories is missing a browse permission for others (the last 'x' in rwxrwxrwx). Could you run the following commands and reply with the output?
ls -ld /var/lib/ ls -ld /var/lib/libvirt/ ls -ld /var/lib/libvirt/qemu/
Also what distribution are you using? I remember there were some differences in packaging related to the directory permissions.
Martin
Dumpxml shows this btw:
<seclabel type='static' model='dac' relabel='yes'> <label>nobody:kvm</label> </seclabel>
which at least is what was configured. -- Regards, Stephan
Hello Martin,
thanks for picking up. Here is the output you requested:
[root@vserver-a01 /]# ls -ld /var/lib/ drwxr-xr-x 21 root root 4096 10. Jul 00:00 /var/lib/ [root@vserver-a01 /]# ls -ld /var/lib/libvirt/ drwxr-xr-x 11 root root 4096 4. Jul 10:08 /var/lib/libvirt/ [root@vserver-a01 /]# ls -ld /var/lib/libvirt/qemu/ drwxrwx--- 11 root root 4096 10. Jul 15:36 /var/lib/libvirt/qemu/
It seems your guess is right. After
[root@vserver-a01 /]# chmod a+x /var/lib/libvirt/qemu/ [root@vserver-a01 /]# ls -ld /var/lib/libvirt/qemu/ drwxrwx--x 11 root root 4096 10. Jul 15:41 /var/lib/libvirt/qemu/
it started:
virsh # start collabora Domain collabora gestartet
So that's a bug in the Arch Linux packaging? Who to tell?
Our Makefile specifies what to do on installation:
$(MKDIR_P) -m 0751 "$(DESTDIR)$(localstatedir)/lib/libvirt/qemu"
so I guess this is a packaging issue. No idea where/how the arch packaging works, sorry.
Thank you Martin, Pavel and Daniel for tracking that down.
-- Regards, Stephan
Hello Martin,
I will take care of that for arch. Topic closed.
-- Regards, Stephan
Ok, there is a problem (in libvirt), please take a look at the answer to the bugreport in arch: --- Erm, patch is definitely wrong. Look a few lines above in the PKGBUILD and note: rm -rf \ .. "${pkgdir}"/var/lib/libvirt/qemu Arch is deleting that dir and letting libvirt create it on first run of daemon which appears to work fine. On my system the perms are correct: drwxr-xr-x 8 zzz kvm 4096 Jul 11 12:43 /var/lib/libvirt/qemu (Sidenote: I'm not sure what libvirt does when /etc/libvirt/qemu.conf is subsequently edited with different user/group.) In summary, it looks like upstream bug reporter has somehow acquired wrong perms on /var/lib/libvirt/qemu On the question of whether Arch should be touching that dir or not? Dunno. --- I can assure you I never touched the permissions. So it may well be that some time ago something changed in libvirts handling of these permissions and my installation is older. I would suggest to let libvirt on startup check not just the existence but also the permissions and set them correctly. -- MfG, Stephan von Krawczynski ------------------------------------------------------ ith Kommunikationstechnik GmbH Lieferanschrift : Reiterstrasse 24, D-94447 Plattling Telefon : +49 9931 9188 0 Fax : +49 9931 9188 44 Geschaeftsfuehrer: Stephan von Krawczynski Registergericht : Deggendorf HRB 1625 ------------------------------------------------------