[cap-talk] More Heresey: ACLs not inherently bad
Kevin Reid
kpreid at mac.com
Sat Sep 20 05:37:37 CDT 2008
On Sep 19, 2008, at 12:55, Jonathan S. Shapiro wrote:
> On Fri, 2008-09-19 at 15:54 +0000, Karp, Alan H wrote:
>> Shap wrote:
>>> However, I think your proposal extends to this fine, with only one
>>> challenge: how to ensure in a non-persistent cap system that only
>>> the
>>> SCM program has write access to the tree? I don't think this
>>> bootstraps
>>> without something ACL-like.
>>>
>> Sorry to be dense, but I don't see why the persistence of the
>> permission state of the SCM is special?
>
> System restarts. Bob goes to check something in to the SCM tree. Bob
> kicks off a copy of the SCM agent. SCM agent needs access to the tree
> that Bob does not have. This access must be granted by some
> capability.
>
> On what basis does SCM gain access to that capability which Bob does
> not
> have?
>
> Offhand, I cannot think of a scheme that is not identity based.
I agree with those who have said that this seems to be entirely
orthogonal to the rest of your problem. That said, here's my solution:
I assume that while the system under consideration is not orthogonally
persistent, it has a file system. That file system is itself
persistent, and the SCM tree is a thing in the file system; therefore,
store the authorization in the file system, as so:
Bob's access to the SCM tree consists of an item (cap) in his
directory. That item is basically a *closure*; it contains references
to the raw SCM tree and to the SCM agent program. Bob has an "execute
only" cap[1]; the only important thing Bob can do with it is invoke
it, which "kicks off a copy of the SCM agent", granting it access to
the closed-over raw SCM tree.
Note that we're not letting orthogonal persistence creep in: there is
no *process* stuffed into the filesystem, just a trivial instruction
to invoke one, which in a non-capability system could just be a shell
script or some such.
(In particular, the closest Unix analogue to this is a setuid program;
the setuid bit and file owner together constitute the closed-over
authority.)
The key idea here is: Even if the system is not fully persistent, the
file system is. Therefore, make the file system capable of storing
nontrivial authorities.
I believe this is generally applicable to the problem of recording
installation endowments for applications, as well: in this particular
case we can say we're doing a micro-installation of the SCM agent for
one particular SCM tree.
[1] Rather than presenting the SCM as a sort of 'executable', another
reasonable possibility is to present it as a subdirectory; in which
case this closure-in-the-filesystem is like a Unix mount point plus
userspace filesystem (but persistent).
--
Kevin Reid <http://homepage.mac.com/kpreid/>
More information about the cap-talk
mailing list