和每个进程相关联的用户id和组id:
实际用户id
实际组id 我们实际上是谁
有效用户id
有效组id
添加组id 用于文件存取许可权检查
保存的set-user-id
保存的set-group-id 由exec函数保存
实际用户id和实际组id标识我们究竟是谁。这两个字段取自登录操作系统的用户。
有效用户id和有效组id通常等于实际用户id和实际组id,决定了我们的文件访问权限。在文件方式字st_mode(可以由stat函数得到)设一个特殊标志,其定义为“当执行此文件时,进程的有效用户id和有效组id设置为执行文件的所有者用户id和所有组id。在文件方式字中,这两个特殊标志位,分别是set-user-ID和set-group-ID.举一个例子是passwd执行文件,需要修改paasswd文件,这个文件只有root用户可以修改。那么普通用户修改自己密码的时候,为什么会有权限修改这个文件的内容呢。原因就是passwd进程执行的时候,有效用户id和有效组id设置为passwd执行文件的所属用户id和所属组id。
保存的set-user-id和set-group-id保存了有效用户id和有效组id的副本。
一个进程在试图open一个文件的时候,是根据进程的有效用户id和有效组id进行权限的检查。
1)若进程的有效用户id是0(root),则允许存取
2)若进程的有效用户id等于文件的所有者id,检查相应的权限位
3)若进程的有效用户组id等于文件的所有组id,检查相应的权限位
4)检查其他权限位