Re: Pony talks about Deny Capabilities

Dan Connolly <[email protected]> Mon, 11 May 2015 23:54:47 -0500
Newsgroups gmane.comp.capabilities.general
Message-ID <CAD2Yivau_9Mo_gAOtS+NsfyBXJzDpy_hzFFA=e3Vzs-LRCdb-Q@mail.gmail.com>
On Mon, May 11, 2015 at 12:29 PM, Sylvan Clebsch <[email protected]> wrote:
>> From: Dan Connolly <[email protected]>
>> I'm looking over the standard library for ambient authority... the
>> main(env: Env) gave me hope, but now I see:
...
>> and @os_listen_tcp
...
> Obviously, access to C breaks the ocap model entirely. However, we're hoping
> the --safe mechanism gives a usable trust boundary. This is an area we are
> very keen to have feedback on.

One idea I had when I started looking at rust is: let main programs
link to whatever the developer likes, but don't let libraries
(including the standard library) link to ambient authority. Libraries
have to act like emakers:

  Emakers have an important security property: they come to life
contained in a world with no authority.
   -- http://wiki.erights.org/wiki/Emaker

while the main program linking to anything is like the privileged scope
  http://wiki.erights.org/wiki/Walnut/intro

So the constructor for actor TCPListener would need the @os_listen_tcp
capability passed in explicitly (perhaps using a vtable, i.e. struct
of function pointers... though I have already forgotten the details of
the pony type system relevant to whether this is feasible).

>> and File new create(path': String)
>
> Yeah. File systems. Ugh. This is a huge ambient authority problem, and we
> don't have a clear idea of how to handle it better.

As others have said, the Joe-E/elib/Emily API works reasonably well;
any such API (where all authority is explicit) lets you exploit
capability support at the O/S level using openat() and the like or use
message-passing to stuff such as capsicum, capnproto, etc. ... though
the message-passing stuff may necessitate using promises or the like.

-- 
Dan Connolly
http://www.madmode.com/