Idea: take every user (or principle in general), object, then write down which users use which object.
Pseudocode:
Remark: Not practical if using this pricipal-object-access (POA) model
Workaround in Unix model: given objects are files, principals are Unix users, and accesses are rwx
* This model is great in small enviroment with 1 or 2 sysadmins, but this does not work so well in large enviroment.
ACLs of Windows NT, Solaris, Samba: solution to Unix model in large enviroment. Associated with every object is a list of access types. The access types can be used for any type of principals (user, owner, group, other). This model present a more flexible POA, but also much more complicated.
Used in Oracle, Solaris, and Windows (known as Active Directory)
Roles: can be assumed by user
The access rights are tied to the roles of each principal, not to the principal. A principal can lose or gain rights by assuming different roles, as each of your sessions can have its own role.
This technique, besides being used for objects, is also commonly used for operation (e.g: unlink a directory)
Idea: for each process, record which objects it can process, and what accesses are allowed. The capability is recorded in the process descriptor.
Like traditional ACLs: must be unforgeable, must be examined in every access, must have OS support and/or hardware support
How do we implement capabilities?
A real problem is that progX cannot be completely trusted.
Some programs do need special rights (e.g. su, sudo, sendmail)
setuid bits on executables are used when you want the user to have the permissions of the file owner within that process.
su, if bad, can screw up everyone in the system.
- Expensive to develop trusted software
- Suppose you acquire the file from the internet
A is not a good solution. For a more detailed explanation, see the article "Reflections on Trusting Trust".
For example:
login.c
Another example: if compiling login.c, a line can be added to gcc.c that will generate malicious code.
At some point, the user must trust some part of the software. Thus, the user must consider what is part of his or her "Trusted Computing Base".