Re: unprivileged mounts git tree

Miklos Szeredi
2008-09-04T18:04:23Z

On Thu, 4 Sep 2008, Serge E. Hallyn wrote:
> Quoting Miklos Szeredi (miklos@szeredi.hu):
> > On Thu, 4 Sep 2008, Serge E. Hallyn wrote:
> > > but you're still doing
> > >
> > > if (IS_MNT_SHARED(old_nd.path.mnt) && !capable(CAP_SYS_ADMIN))
> > > goto out;
> > >
> > > shouldn't it be something like
> > >
> > > if (IS_MNT_SHARED(old_nd.path.mnt) && (old_nd.path.mnt & MNT_USER))
> > > goto out;
> > >
> > > ?
> >
> > Why would that be an error? There's no real security gain to be had
> > from restricting a privileged user, but could cause a lot of
> > annoyance. If we think this is dangerous, then protection should be
> > built into mount(8) with an option to override. But not into the
> > kernel, IMO.
>
> We disagree on that. But can we agree that the check you added is wrong?

No :)

> There is no reason why a user mount should not be able to do shared
> mounts, is there?

I don't know. It's something to think about in the future, but not
essential. We know that without the above check the user can do bad
things: propagate mounts back into the source, and we don't want that.

We could allow binding a shared mount if

a) the owners of the source and destination match
b) the destination is made a slave of the source

But the current patchset doesn't allow _any_ changes to propagation
without CAP_SYS_ADMIN, so why should bind be an exception?

And yes, this is something to think about, but I think it's a rather
uncommon corner case, and so the patchset very much makes sense
without having to deal with unprivileged mount propagation changes.

> So should the check above just go away then?

No, we'd be back with the original problem.

Thanks,
Miklos