4.2.2 实例分析:Windows NT和UNIX访问控制列表
1.Windows NT访问控制列表
Windows NT系统中共享对象的访问权限是由对象所有者决定的。如果用户想共享某个对象,他首先要为对象选择唯一的名字,然后为其他的用户和组分配访问权限。Windows NT允许用户或组对文件或目录进行以下6种操作:读、写、执行、删除、改变许可和获取拥有权限,这些权限被称为普通权限。文件的普通权限分为以下几类。
(1)no access,主体不能访问该文件。
(2)read,主体能读或执行该文件。
(3)change,主体能读、执行、写或删除该文件。
(4)full control,主体拥有该文件的所有权限。
(5)special access,允许分配任意权限。
Windows NT目录的普通权限分为以下几类。
(1)no access,主体不能访问该目录。
(2)read,主体能读或执行该目录中的文件。
(3)list,主体能列出该目录中的内容,并且也可转入该目录下的子目录。
(4)add,主体能在该目录下创建文件或子目录。
(5)add and read,是普通权限add和read的结合。
(6)change,主体能创建、读、执行或写该目录下的文件,也能删除子目录。
(7)full control,主体拥有该目录下的文件及子目录的所有权限。
(8)special access,允许分配任意权限的组合。
当用户访问文件时,Windows NT首先检查文件的ACL。如果该用户没有出现在ACL中,并且不是ACL中所列出组中的任一成员,则访问被拒绝。如果任一ACL条目拒绝用户的访问,系统就拒绝访问。如果访问不被显式拒绝,而用户又在ACL中出现,则该用户的权限集就是所有指定此用户的ACL条目中权限集的并集。
例4-4 Bob、Alice、John和Peter是Windows NT系统的用户,组students={Bob,Alice},组staff={Alice,John,Peter},目录c:\staff的访问控制列表为:acl(c:\staff)={(staff,add),(Peter,change),(students,no access)}。
第一个条目允许组staff中的成员(Alice,John,Peter)在目录c:\staff下创建子目录和文件。第二个条目允许Peter创建、读、执行或写该目录下的文件,也可以删除子目录。第三个条目不允许组students的成员(Bob,Alice)访问该目录。
因此访问控制的结果为:Bob和Alice不能访问目录c:\staff;John可以在目录c:\staff下创建子目录或文件;Peter可以创建、读、执行或写目录c:\staff下的文件,也可以删除其子目录。
2.UNIX访问控制列表
大多数UNIX操作系统都支持访问控制列表。UNIX访问控制列表中包括三类主体:文件的所有者、组和其他用户;有三种访问权限:读(r,read),写(w,write)和执行(x,execute)。访问控制列表用9位许可字段表示:rwxrwxrwx。其中,前3位字段表示所有者的访问权限,中间3位字段表示组的访问权限,后3位字段表示其他用户的访问权限。
例如,rw-r-----表示所有者有读、写的权限,组成员有读的权限,其他用户没有访问权限。
可见,任何用户和组都可以通过3个保护位(读、写、执行)与文件相关联,这提供了一种分配访问权限的灵活机制。