博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《UNIX网络编程 卷2:进程间通信(第2版)》——2.4 IPC权限
阅读量:7084 次
发布时间:2019-06-28

本文共 979 字,大约阅读时间需要 3 分钟。

本节书摘来自异步社区《UNIX网络编程 卷2:进程间通信(第2版)》一书中的第2章,第2.4节,作者:【美】W. Richard Stevens著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 IPC权限

新的消息队列、有名信号量或共享内存区对象是由其oflag参数中含有O_CREAT标志的mq_open、sem_open或shm_open函数创建的。如图2-4所注,权限位与这些IPC类型的每个对象相关联,就像它们与每个Unix文件相关联一样。

当同样由这三个函数打开一个已存在的消息队列、信号量或共享内存区对象时(或者未指定O_CREAT,或者指定了O_CREAT但没有指定O_EXCL,同时对象已经存在),将基于如下信息执行权限测试:

(1)创建时赋予该IPC对象的权限位;

(2)所请求的访问类型(O_RDONLY、O_WRONLY或O_RDWR);

(3)调用进程的有效用户ID、有效组ID以及各个辅助组ID(若支持的话)。

大多数Unix内核按如下步骤执行权限测试。

(1)如果当前进程的有效用户ID为0(超级用户),那就允许访问。

(2)在当前进程的有效用户ID等于该IPC对象的属主ID的前提下,如果相应的用户访问权限位已设置,那就允许访问,否则拒绝访问。

这里相应的访问权限位的意思是:如果当前进程为读访问而打开该IPC对象,那么用户读权限位必须设置;如果当前进程为写访问而打开该IPC对象,那么用户写权限位必须设置。

(3)在当前进程的有效组ID或它的某个辅助组ID等于该IPC对象的组ID的前提下,如果相应的组访问权限位已设置,那就允许访问,否则拒绝访问。

(4)如果相应的其他用户访问权限位已设置,那就允许访问,否则拒绝访问。

这4个步骤是按所列的顺序尝试的。因此,如果当前进程拥有该IPC对象(第2步),那么访问权的授予与拒绝只依赖于用户访问权限——组访问权限绝不会考虑。类似地,如果当前进程不拥有该IPC对象,但它属于某个合适的组,那么访问权的授予与拒绝只依赖于组访问权限——其他用户访问权限绝不会考虑。

我们从图2-3中指出,sem_open不使用O_RDONLY、O_WRONLY或O_RDWR标志。然而在10.2节我们将指出,某些Unix实现采用O_RDWR,因为只要使用一个信号量,都涉及读写该信号量的值。

转载地址:http://jkqml.baihongyu.com/

你可能感兴趣的文章
我和同伴写源代码遇到的问题
查看>>
1037A - Packets(二进制想法)
查看>>
hrbeu 错排问题
查看>>
oracle 根据一个时间段获取这个时间段内所有月份、天数、日期
查看>>
重构过程其实就是一个“让合适的东西干合适的事情
查看>>
自定义cell
查看>>
jsp页面执行原理及获取上下文根方式
查看>>
谨慎使用多线程中的fork
查看>>
MSSQL2005 修改数据库的排序规则
查看>>
洛谷 1344 [USACO4.4]追查坏牛奶Pollutant Control——最大流
查看>>
使用winavr的过程中,遇到的有关volatile的问题
查看>>
【iOS】Xcode中的-all_load与-ObjC
查看>>
论文中的数学符号使用
查看>>
WPF中UI及时更新,如何在处理长时间工作时,保持界面的持续更新
查看>>
CSS 样式表中padding 的用法
查看>>
Sql Server 主从数据库配置
查看>>
Event 对象
查看>>
经典冒泡排序,九九乘法表,三角形
查看>>
openstack之keystone
查看>>
我的IIS7.5竟然不支持ASP.NET路由
查看>>