Subject: Using overlay+chroot for emul (Was Re: printing with acroread7 and cups)
To: Steven M. Bellovin <smb@cs.columbia.edu>
From: Eric Haszlakiewicz <erh@nimenees.com>
List: tech-kern
Date: 09/02/2005 08:53:21
On Thu, Sep 01, 2005 at 11:24:37PM -0400, Steven M. Bellovin wrote:
> In message <20050902031915.GA15795@jodi.nimenees.com>, Eric Haszlakiewicz write
> s:
> >On Thu, Sep 01, 2005 at 05:18:20PM -0700, Bill Studenmund wrote:
> >> On Thu, Sep 01, 2005 at 05:52:13PM -0500, Eric Haszlakiewicz wrote:
> >> > On Thu, Sep 01, 2005 at 02:49:32PM -0700, Bill Studenmund wrote:
> >> > >
> >> > > I'm not sure what I think of this. But I'll defer that for other message
> >s.
> >> > > I am concerned that we may introduce more problems than we solve.
> >> >
> >> > I think it makes the emul path stuff act more like a chroot
> >> > environment. The time when it might cause a problem is when that
> >> > path gets fed to something outside the "chroot", i.e. a non-emul
> >> > process. It seems easier to think about solving issues wrt information
> >> > moving across that pseudo-root boundary, than wrt inconsistent views
> >> > of the filesystem within a single process depending on the syscall.
> >> > However, I haven't actually come up with any concrete examples
> >> > of problems/benefits; I was kind of hoping someone here would notice
> >> > something obvious one way or the other. :)
> >>
> >> Why is this a good thing? My gut instinct is that if we want a chroot, we
> >> should chroot.
> >
> > The more I think about it, the more I like that idea, but getting the
> >overlay fs working right will probably be difficult. Then there's various
> >other details to worry about, like: does a non-emul process get to escape
> >the chroot? how about a different-emul one? etc... This quickly becomes a
> >much more significant task.
>
> It's not a chroot, it's an overlay. In fact, the particular case that
> raised this issue -- printing from acroread -- demonstrates this; a
> Linux progam is invoking a NetBSD native program.
_currently_ it's not a chroot, but it sure acts an awful lot like one.
If the /emul path stuff was implemented w/o all the wrapper syscalls that
just have CHECK_ALT_*, the easiest way to do it would be with a chroot.
If you just mount an overlay on / it's going to affect _all_ processes,
not just emul'd ones, so you need to mount it elsewhere and make that
be the root for emul'd processes.
> We also have to deal with the implicit nature of the overlay (or
> chroot, if you prefer); we're not saying 'linux acroread', where linux
> is a setuid program that's doing the mount, invoking something, then
> cleaning up afterwards. Both chroot and overlay pose security issues
> unless properly controlled -- which I think they are here, but we need
> to keep that in mind.
My thought was the the overlay would be pre-mounted, just another
entry in fstab that caused something like
mount_union -b -o 'special-emul-flag=linux' / /emul/linux
and only the chroot would occur automatically. Of course the security
implications would need to be thought through, but "auto-chroot into /foo"
seems easier for an admin to think about than the rather vaguely defined
CHECK_ALT_* behaviour.
eric