linux进程与文件的权限

来源:互联网 发布:全息生物学 知乎 编辑:程序博客网 时间:2024/05/22 01:50

  对于一个linux进程,它每次打开、创建或者删除一个文件时,内核就要对该进程进行文件访问权限测试,而在对具体某个文件进行测试时,还需要测试其对目录(也就是文件路径)进行权限测试。

    比如要修改/usr/include/stdio.h,需要对/、/usr和/usr/include这三个目录进行权限测试,保证有对这三个目录的执行权限(执行权限用于打开该目录,读权限用于显示目录内容,写权限用于创建新文件或者目录)。

    进程访问权限测试涉及文件的所有者(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步),则按用户访问权限批准或拒绝该进程对文件的访问--不查看组访问权限。类似的,若进程并不拥有该文件,但进程属于某个适当的组,则按组访问权限批准或拒绝该进程对文件的访问--不查看其他用户的访问权限。

原创粉丝点击