Re: 3 Parts of Security Jonathan S. Shapiro (shap@eros-os.org)
Mon, 1 May 2000 01:21:42 -0400

We do this debate every year, and we get it wrong every year.

An ACL is a list of the form { (some-id, {permission...}) ... }

The weakness in classical ACL systems stems not from the ACL, but from the use of user identities as the ID. Bill and Mark are correct that the user identity is not aligned very well with the intentions of the program. It follows that **principal based ACLs** are a weak mechanism for certain purposes.

It does not follow that ACLs are a bad mechanism. There are other possible choices of identifiers, such as compartment identifiers, that the operating system is in a position to control and correctly maintain. Provided that the identifier is soundly chosen and properly maintained, there is nothing inherently wrong with ACLs.

I would not wish to give up capabilities. They provide a specificity of authorization that is very important. They provide fine-grain authorization, which is also very important. That said, I'm not convinced that even user-based ACLs are entirely bad as a hybrid mechanism.

The problem at the bottom is that building effective semi-permiable filters is very very very hard to get right, and is prone to creeping error as the underlying protocols change. Sometimes filters that are coarse but draconian are useful too.

Would I build them in to the operating system? Probably not at this point, though lately I've been pondering Plan-9 with some questions I'll pose in a later email.

Jonathan