文件访问权限

2014-07-17 19:20:37   最后更新: 2014-07-18 13:40:40   访问数量:661




与一个进程相关联的ID有6个或更多,他们是:

实际用户ID、实际组ID、有效用户ID、有效组ID、附加组ID、保存的设置用户ID、保存的设置组ID

其中,实际用户ID和实际组ID标识登录用户究竟是谁,一般在一个登录会话间这些值并不改变,但超级用户可以改变他们

有效用户ID、有效组ID以及附加组ID决定了我们的访问权限

保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本

通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID

每一个文件都有一个所有者和组所有者,所有者由stat结构中的st_uid成员表示,组所有者则用st_gid表示

可以在文件模式字st_mode中设置一个特殊标志,其含义是“当执行此文件时,将进程有效用户ID设置为文件所有者的用户ID(st_uid)”,与此类似 ,在文件模式字中可以设置另一位,它使将执行此文件的进程的有效组ID设置为文件的组所有者ID(st_gid),这两位分别是设置用户ID位和设置组ID位

例如,若文件所有者是超级用户,这样设置后,当文件执行时,无论执行此文件的实际用户ID是什么都可以获取到超级用户权限,如UNIX中的passwd(1)允许任意用户改变其口令,该程序是一个设置用户ID程序

这两位可以通过常量S_ISUID和S_ISGID测试

 

定义于 sys/stat.h 头文件中

st_mode值也包含了文件访问权限位

每个文件都有9个访问权限位,可以分为三类:

S_IRUSR      用户-读

S_IWUSR      用户-写

S_IXUSR      用户-执行

 

S_IRGRP      组-读

S_IWGRP      组-写

S_IXGRP      组-执行

 

S_IROTH      其他-读

S_IWOTH      其他-写

S_IXOTH      其他-执行

 

用户指的是文件所有者,chmod命令用于修改这9个权限位。这个命令中,我们用u表示用户,用g表示组,用o表示其他

 

为了打开文件,我们必须对该文件(包括目录文件)中包含的每一个目录,隐含的当前工作目录都应具有执行权限,因此我们一本把目录的执行权限位称为搜索位

需要注意的是,对于目录的执行权限是通过他的权限而不是指读权限

所有者ID是文件的性质,有效ID和附加组ID是进程的性质

 

当用户访问文件时,若进程拥有此文件,则按照用户访问权限批准或拒绝该进程访问该文件

若进程不拥有该文件,但进程属于某个适当的组,则按照组访问权限批准或拒绝该进程访问该文件

 

每一个用户具有的实际用户ID和实际组ID在一个登陆会话间是不会改变的(除非超级用户去改变他们)

当该用户要访问某个文件时,UNIX 允许用户通过改变进程的有效用户ID和有效组ID临时改变自己的访问权限,改变前的有效用户ID和有效组ID被保存在进程的保存的设置用户ID与保存的设置组ID中

被访问的文件只校验附加组ID、有效用户ID和有效组ID,通过三个ID来确定访问者的用户、组是否是文件所有者,从而决定对应的权限位

附加组ID又是什么呢?每个用户是必须属于一个组的,但是他们并不是仅仅只能属于一个组,所以他们可以拥有多个附加组,从而使他们同样具备附加组所具有的权限

 






读书笔记      技术帖      linux      unix      c语言      龙潭书斋      apue      unix环境高级编程      uid      gid     


京ICP备15018585号