[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1323280461.10724.13.camel@lenny>
Date: Wed, 07 Dec 2011 12:54:21 -0500
From: Colin Walters <walters@...bum.org>
To: LKML <linux-kernel@...r.kernel.org>
Cc: morgan@...nel.org, serue@...ibm.com, dhowells@...hat.com,
kzak@...hat.com
Subject: chroot(2) and bind mounts as non-root
Hi,
(TL;DR version: Please audit the attached setuid program)
I've recently been doing some work in software compilation, and it'd be
really handy if I could call chroot(2) as a non-root user. The reason
to chroot is to help avoid "host contamination" - I can set up a build
root and then chroot in. The reason to do it as non-root is, well,
requiring root to build software sucks for multiple obvious reasons.
(Now you can do LD_PRELOAD hacks to talk to a daemon like
https://github.com/wrpseudo/pseudo does, but really - too gross and too
slow).
The historical reason one can't call chroot(2) as non-root is because of
setuid binaries (hard link a setuid binary into chroot of your choice
with trojaned libc.so). But it turns out a while back this commit:
commit 3898b1b4ebff8dcfbcf1807e0661585e06c9a91c
Author: Andrew G. Morgan <morgan@...nel.org>
Date: Mon Apr 28 02:13:40 2008 -0700
capabilities: implement per-process securebits
Added *exactly* what we need. We just call:
prctl (PR_SET_SECUREBITS, SECBIT_NOROOT | SECBIT_NOROOT_LOCKED);
A setuid program to call both this and chroot(2) is *almost* good enough
for my use case - but it's a little hard to run most build software
without say /dev/null, /dev/urandom and /proc.
The other key thing Linux recently gained is CLONE_NEWNS - with this
(and also SECBIT_NOROOT), we can allow users to make bind mounts to
their heart's content, which frankly is just cool. Bind mounts are a
really neat VFS feature.
While I was making a setuid program, I also exposed the other useful
clone flags like CLONE_NEWNET and CLONE_NEWIPC.
So...I'd like to eventually get something like this into
util-linux...possibly as a hardlink to mount (which is already setuid).
Auditing appreciated! Am I missing anything? Has anyone else noticed
the nice pairing of SECBIT_NOROOT and chroot(2) and used it for a tool?
View attachment "ostbuild-user-chroot.c" of type "text/x-csrc" (10062 bytes)
Powered by blists - more mailing lists