On 2/4/14, 3:40 PM, Robert N. M. Watson wrote:
On 3 Feb 2014, at 23:53, Doug Ambrisko <ambri...@ambrisko.com> wrote:

It's unfortunate that vimage requires jail.  I want to use vimage but
not have the security restrictions of a jail.  To do this I patched
jail to basically let everything through.  It would be nice to be
able to run jail in an insecure mode which I understand is a contradition.
I do use the jail infrastructure to set the uname*/getosreldate so
that a specific jail thinks it is FreeBSD version blah.  Then I can ssh
into that jail and pkg_add things, make ports etc.  I use this on
my laptop running current on the base.  My other jails run various
versions of FreeBSD.  I don't care about security in this case.

vimage was not originally tied to jails. I can't remember why we decided to do that :-)
Something I've wanted to do for a while (>15 years)
{takes deep breath)
is move from a simple privilege model to a privilege-mask model in which masks 
of available system privileges can be delegated to jails rather than 
hard-coding the list of privileges in jails.
oh is that all... had been imagining "climb Mount Everest", "Photograph a giant Squid" or similar..
  I got about 1/3 of the way there with priv(9): enumerating system privileges, and 
shifting knowledge of "is it available in jail" out of calling subsystems into 
the privilege model itself.

The next phase is to introduce a structured notion of a privilege mask 
(efficiently), and expose masks in limited circumstances -- e.g., Jail 
configuration. This requires introducing an /etc/security/privileges, and a 
default /etc/security/jail.privileges (or similar) that provide a mapping from 
user-readable privilege names to numbers, and a reasonable default subset mask 
that jail(8) can use when creating a jail. This would allow configuration of 
arbitrary privileges for jails in a generalisable way, rather than lots of 
custom sysctls and extensions. We could even provide different 'profiles' such 
as 'jail.default' for the current model, and perhaps 'jail.allrights' to 
capture the idea of a child jail that retains all privileges the parent jail 
held. We might ask users to say --I-am-really-sure (or something less obnoxious 
but equally prominent) to create jails to which stronger rights than the 
default are granted.
The one thing that always worries me is with priv models is that I have a nagging suspicion that to do them right you end up having to enumerate 7,567,342 different separate privs.. "Is allowed to take puppies for a walk", etc.
(and "is allowed to take puppies for a walk in Scotland").


The final phase is to introduce a process-exposed privilege model allowing 
individual processes to manage privilege masks. In about 2000, Brian Feldman 
and I implemented POSIX.1e privileges [twice] for FreeBSD (not too different 
from what Linux implemented, and derived form the model in IRIX) but were 
deeply unimpressed. The current Solaris model is probably closest to what we 
want, but we'd have to think through it pretty carefully. One of the reasons we 
never merged our POSIX.1e implementation was that although the model itself 
worked OK, various compatibility modes (such as the one adopted in Linux) led 
to serious but quite subtle security vulnerabilities. This is not a phase to 
embark on without a *lot* of thought.

There's a moderate amount of work in doing this, which I've never quite found time to chase 
up. It would be worth doing as it would solve a number of other problems. The risks 
involved are significant -- it's very, very easy to get wrong (as we convinced ourselves on 
multiple occasions, and from having looked at problems in other UNIX systems that went this 
route) -- so it really does require time and a lot of review of both the model and 
implementation. The Jail portion of it is likely the easy bit, but does require us to come 
up with a sensible user<->kernel ABI for masks (an extensible one, ideally, since you 
always find you want more privileges), as well as a sensible kernel<->kernel ABI (one 
that's relatively stable but perhaps less extensible -- with performance benefits over the 
extensible interface).

Robert



_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to