当前位置:嗨网首页>书籍在线阅读

09-进程和文件可继承集的目的

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

39.3.5 进程和文件可继承集的目的

乍一看,对于能力系统来讲,有了进程和文件的许可集和有效集看起来已经足够了,但还是存在一些这两个集合无法满足要求的情形。如当一个执行exec()的进程想要在exec()调用期间保存其当前能力时该如何做呢?看起来,能力实现可以通过简单地在exec()调用之间保存进程的许可能力来实现这个特性,但这种方式无法处理下列情形。

  • 执行exec()可能需要特定的权限(如CAP_DAC_OVERRIDE),但在exec()调用之间可能不想要保存这种权限。
  • 假设显式地删除了一些无需在exec()调用之间保存的许可能力,但exec()调用失败了。在这种情况下,程序可能需要知道这些已经被删除(不可逆的)的许可能力。

基于上述原因,在exec()之间是不会保持进程的许可能力的。相反,在这种情况下会适应另一种能力集:可继承集。可继承集为进程在exec()调用之间保持其部分能力提供了一种机制。

进程的可继承集指定了一组在exec()调用之间可被赋给进程的许可能力集的能力。相应文件的可继承集会根据进程的可继承集取掩码(AND)来确定在exec()之间被添加到进程的许可能力集中的能力。

在exec()之间不是简单保持进程的许可能力集还存在深层次的哲学原因。能力系统的主要思想是赋给进程的所有权限都是由进程所执行的文件来授予或控制的。虽然进程的可继承集指定了在exec()之间传入能力,但这些能力会根据文件的可继承集来取掩码。