Capabilities change things in a profound way. They make it trivial to run any old code, yet not have to ever trust it.
Capabilities change things in a profound way. They make it trivial to run any old code, yet not have to ever trust it.
On Plan 9, I took a lot of glee in rfork()ing my way into a tightly curated namespace that disallowed subsequent use of mount and bind, but that was a deliberate decision under the philosophy of the principle of least privilege. Is that the other half of what you're after?
Take the system administrator's access to everything, but put it through a read-only filter, and pass that to the backup program.
Instead of using the "File Open" dialog in the Win32 gui api... and then a "file open" which could go anywhere, replace it with a call to the file-open "powerbox", which hands a file back to the application. The user could even make it read only, append only, etc.
As far as users are concerned, it doesn't have to be hard. We just have to learn some new command line tricks.
What isn't clear are the logistics: what, concretely, do we need to undertake in order to avoid a security posture lateral step from ambient authority to object-capabilities? Importantly, how do we make this ergonomic?
As far as the command line goes... that's the problem. We don't have any standardization for command line syntax. My first instinct is to try to impose it, but that seems like a "boil the ocean" approach.
Next up, something like pipes? Maybe a new set of delimiters to pipe capabilities, and allow testing of them in some fairly transparent way?
Let's say that ||| pipes a capability
$ select / ||| showcaps
showcaps:
/ - FULL ACCESS
$ select / ||| readonly ||| showcaps
showcaps:
/ - READ ONLY
I'm sure they had something figured out for KeyKOS etc, I don't know what that was.My only concern is that, without well-thought-out access controls, the only people who will care will be nerds or folks with a high frustration tolerance for poorly-considered human-computer interaction.