st_mode值也包含了对文件的访问权限位。当提及文件时,指的是前面所提到的任何类型的文件。

所有文件类型(目录、字符特别文件等)都有访问权限。很多人认为只有普通文件有访问权限,这是一种误解。

每个文件有9个访问权限位,可将它们分成3类:

术语用户指的是文件所有者。

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,那么如果

results matching ""

    No results matching ""