UNIX在诞生之初就采用了一种相对简单的方式来管理操作许可,这种方式被Linux继承以文件为例:
(1)在每个文件的属性中存储文件所属的用户(属主)和所属的用户组(属组)。
(2)根据用户的属主和属组将所有用户分为三类:同主用户、同组用户、其他用户。
(3)在每个文件的属性中为三类用户分别存储访问许可。
下面举个例子:文件a的属主id为1000,属组id为10000,访问许可为:允许同主用户读写,允许同组用户读,不允许其他用户任何操作。进程A的fsuid为1000,那么进程A可以读写文件a。进程B的fsuid为1001,fsgid为10000,那么进程B可以读文件a。进程C的fsuid为1002,fsgid为10001,supplementary group id为10003、10004 [6] ,那么进程C不能对文件a执行任何操作。 (www.xing528.com)
内核代码采用一个bit来表示一个操作许可,对于文件就需要9个bit来表示文件的操作许可:同主读、同主写、同主执行、同组读、同组写、同组执行、其他读、其他写、其他执行。这些表示操作许可的比特位合在一起就成为permission bits,即允许位。
其他的客体也类似。IPC只有两个操作许可,所以只需要6个比特位。在语义上IPC做了一点扩展,IPC属性中有属主id和属组id,还有创建者id和创建组id。属主id相等和创建者id相等都被视为同主,属组id相等和创建组id相等都被视为同组。
举个例子,消息队列m,属主1000,属组10000,创建者2000,创建组20000,同主允许写,同组允许读,其他不许读也不许写。进程A的euid为1000,属于同主,允许写;进程B的euid为2000,也属于同主,允许写;进程C的euid为3000,egid为10000,属于同组,允许读;进程D的euid为3000,egid为20000,也属于同组,允许读;进程E的euid为3000,egid为30000,并且supplementary group id中没有10000和20000,属于其他,不可读也不可写
密钥的操作许可是6个,它的允许位需要18个比特位。密钥在操作许可的使用上有一点扩展。有一类进程被标记为拥有密钥的进程,这类进程会有额外的许可,作为正常获得的许可的补充。比如进程A是密钥a的同主进程,许可是可以读和写,同时进程A又是密钥a的拥有者额外获得了setattr许可,那么进程A就可以对密钥a进行读、写、setattr操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。