[libvirt] [PATCH] Remove capng_lock() call when spawning LXC container init process

Ryota Ozaki ozaki.ryota at gmail.com
Thu Nov 12 22:09:05 UTC 2009


On Thu, Nov 12, 2009 at 8:05 PM, Daniel P. Berrange <berrange at redhat.com> wrote:
> The capng_lock() call sets the SECURE_NO_SETUID_FIXUP and SECURE_NOROOT
> bits on the process. This prevents the kernel granting capabilities to
> processes with an effective UID of 0, or with setuid programs. This is
> not actually what we want in the container init process. It should be
> allowed to run setuid processes & keep capabilities when root. All that
> is required is masking a handful of dangerous capabilities from the
> bounding set.

IIUC, that's correct. Completely dropped capabilities we expected
are never gained to ones in the container and securebits cannot
scare the enforcement.

ACK

  ozaki-r

>
> * src/lxc/lxc_container.c: Remove bogus capng_lock() call.
> ---
>  src/lxc/lxc_container.c |   11 +++++------
>  1 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
> index c77d099..023d553 100644
> --- a/src/lxc/lxc_container.c
> +++ b/src/lxc/lxc_container.c
> @@ -694,12 +694,11 @@ static int lxcContainerDropCapabilities(void)
>         return -1;
>     }
>
> -    /* Need to prevent them regaining any caps on exec */
> -    if ((ret = capng_lock()) < 0) {
> -        lxcError(NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> -                 _("Failed to lock capabilities: %d"), ret);
> -        return -1;
> -    }
> +    /* We do not need to call capng_lock() in this case. The bounding
> +     * set restriction will prevent them reacquiring sys_boot/module/time,
> +     * etc which is all that matters for the container. Once inside the
> +     * container it is fine for SECURE_NOROOT / SECURE_NO_SETUID_FIXUP to
> +     * be unmasked  - they can never escape the bounding set. */
>
>  #else
>     VIR_WARN0(_("libcap-ng support not compiled in, unable to clear capabilities"));
> --
> 1.6.2.5
>
> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>




More information about the libvir-list mailing list