一、文件访问权限规则:
说明:下面所提及的文件,指的是任何类型的文件:普通文件、目录文件、字符特别文件等。
1. 我们用名字打开任一类型的文件时(普通文件、目录文件、字符特别文件等),对该名字中包含的每一个目录,包括它可能隐含的当前工作目录都应具有执行权限。这就是为什么对于目录其执行权限位常被称为搜索位的原因。(如果用户对该目录没有执行权限,则不能进入该目录)
例如,为了打开文件 /usr/include/stdio.h, 需要对目录 /、 /usr和/usr/include都具有执行权限。然后,需要具有对该文件本身的适当权限,这取决于以何种模式打开它(只读、读-写等)。
注意,对于目录的读权限和执行权限的意义是不相同的。读权限允许我们读目录,获得在该目录中所有文件名的列表。当一个目录是我们要访问文件的路径名的一个组成部分时,对该目录的执行权限使我们可以通过该目录(也就是搜索该目录,寻找一个特定的文件名)。
例如,如果PATH环境变量指定了一个我们不具有执行权限的目录,那么shell就不会在该目录下找到可执行文件。
2.为了在一个目录中创建一个新文件,必须对该目录同时具有写权限和执行权限。
为了删除一个现有的文件,必须对包含该文件的目录具有写权限和执行权限。对该文件本身则不需要有读、写权限。
3. 进程每次打开、创建或删除一个文件时,内核就进行文件访问权限测试,而这种测试可能涉及文件的所有者(st_uid和st_gid)、进程的有效ID(有效用户ID和有效组ID)以及进程的附加组ID(若支持的话)。两个所有者ID是文件的性质,而两个有效ID和附加组ID则是进程的性质。内核进行的测试是:
(1)若进程的有效用户ID是0(超级用户),则允许访问。这给予了超级用户对整个文件系统进行处理的最充分的自由。
(2)若进程的有效用户ID等于文件的所有者ID(也就是该进程拥有此文件),那么:若所有者适当的访问权限位被设置,则允许访问,否则拒绝访问。适当的访问权限位值的是,若进程为读而打开该文件,则用户读位应为1;若进程为写而打开该文件,则用户写位应为1;若进程将执行该文件,则用户执行位应为1.
(3)若进程的有效组ID或进程的附加组ID之一等于文件的组ID,那么:若适当的访问权限位被设置,则允许访问,否则拒绝访问。
(4)若其他用户适当的访问权限位被设置,则允许访问,否则拒绝访问。
按顺序执行这四步。注意,如若进程拥有此文件(第2步), 则按用户访问权限批准或拒绝该进程对文件的访问---不查看组访问权限。类似地,如果进程并不拥有此文件,但进程属于某个适当的组,则按组访问权限批准或拒绝该进程对文件的访问---不查看其他用户的访问权限。
二、新文件和目录的所有权
1.新文件的用户ID设置为进程的有效用户ID。
2.关于组ID,POSIX.1允许实现选择下列之一作为新文件的组ID:
1>新文件的组ID可以是进程的有效组ID。
2>新文件的组ID可以是它所在的目录的组ID。(Linux的 /var/spool/mail 目录中就使用这种方法)
阅读(1576) | 评论(0) | 转发(0) |