[libvirt] PATCH 3/4: AppArmor updates
Jamie Strandboge
jamie at canonical.com
Thu Sep 23 20:02:27 UTC 2010
On Thu, 2010-09-23 at 18:03 +0100, Daniel P. Berrange wrote:
> On Thu, Sep 23, 2010 at 11:49:21AM -0500, Jamie Strandboge wrote:
> > On Thu, 2010-09-23 at 16:10 +0100, Daniel P. Berrange wrote:
> > > On Mon, Aug 16, 2010 at 02:45:02PM -0500, Jamie Strandboge wrote:
> > > > Author: Jamie Strandboge <jamie at canonical.com>
> > > > Description: AppArmor example profile adjustments:
> > > > - libvirt-qemu: allow guests setgid and setuid so qemu can drop privileges
> > > > - virt-aa-helper:
> > > > + allow access to @{PROC}/[0-9]*/net/psched
> > > > + allow searching /sys/bus/usb/devices/
> > > > + deny access to /dev to suppress confusing, non-fatal profile denials
> > > > + allow access to user-tmp abstraction
> > > > Bug-Ubuntu: LP: #579584, LP: #565691
> > > >
> > > > diff -Naurp libvirt.orig/examples/apparmor/libvirt-qemu libvirt/examples/apparmor/libvirt-qemu
> > > > --- libvirt.orig/examples/apparmor/libvirt-qemu 2010-04-06 16:14:52.000000000 -0500
> > > > +++ libvirt/examples/apparmor/libvirt-qemu 2010-08-13 16:46:34.000000000 -0500
> > > > @@ -1,4 +1,4 @@
> > > > -# Last Modified: Mon Apr 5 15:11:27 2010
> > > > +# Last Modified: Fri Aug 13 16:38:32 2010
> > > >
> > > > #include <abstractions/base>
> > > > #include <abstractions/consoles>
> > > > @@ -9,6 +9,10 @@
> > > > capability dac_read_search,
> > > > capability chown,
> > > >
> > > > + # needed to drop privileges
> > > > + capability setgid,
> > > > + capability setuid,
> > > > +
> > > > network inet stream,
> > > > network inet6 stream,
> > >
> > > Does QEMU really need this ? The libvirt QEMU driver will drop
> > > privileges from root:root to qemu:qemu after forking, but before
> > > the /usr/bin/qemu binary is actually exec'd.
> >
> > Yes. Users were seeing errors like:
> > libvir: QEMU error : cannot change to '109' group: Operation not
> > permitted
> > libvir: QEMU error : cannot change to '104' user: Operation not
> > permitted
>
> Hmm, that's a libvirt error rather than a QEMU error. Is the restricted
> AppArmour policy taking effect *before* the actual QEMU binary is exec()d ?
This is related to the stacked security driver implementation.
Specifically, if I strace libvirtd, I see in one of its threads:
gettid() = 20306
open("/proc/20306/attr/current", O_WRONLY) = 3
write(3, "changeprofile libvirt-7d781722-6"..., 58) = 58
close(3) = 0
chown("/tmp/qrt-test-libvirt/libvirt/qatest/qatest.img", 116, 123) = 0
setregid(123, 123) = -1 EPERM (Operation not
permitted)
This chown appears to come from qemuSecurityDACSetProcessLabel(). What
seems to be happening is that in __virExec() we call the security hook
and the apparmor hook is being called before the DAC one, so we
aa_change_profile() to the more restricted libvirt-<uuid> profile. It
seems that it would be preferable to reverse the calling order of the
hooks, but I am not sure how to do that.
--
Jamie Strandboge | http://www.canonical.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20100923/89eb93a2/attachment-0001.sig>
More information about the libvir-list
mailing list