At home, my family share a Mac and a PC, but they do tend to be very trusting people, my family. Even then, even on a system where one trusts the motives of the other people using it, it can be foolish to trust the technical competance of the other people using it. We need protection. And security.
Protection is also important when we have any large, complex system (as operating systems are), in which many pieces are interacting. Protection between subsystems stops a small glitch in one part bringing down the whole edifice.
Big table (conceptually) linking domains to objects and rights:
domain | file1 | file2 | file3 | file4 | printer1 | printer2 | screen | mouse | ... |
---|---|---|---|---|---|---|---|---|---|
1 | read/ write | read | read | ||||||
2 | read | read/ execute | write | read | |||||
3 | read | write | write | write | read |
Usually not stored this way (as a large array), since it tends to be very sparse. In systems which make use of the concept, however, table is usually sorted by row, or by column. Storing by column, it is an access control list; storing by row, it is a capability list.
Access Control Lists: each object has a list of domains (or people) who have access to it, and exactly what form that access may take.
UNIX protection bits: each domain is formed from the pair (user-id, group-id). (In general a single user may belong to many groups.) Associated with every object (inode) is a set of 9 protection bits which specify whether that object is RWX for each of