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

13-能力边界集

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

39.5.1 能力边界集

能力边界集是一种用于限制进程在exec()调用中能够获取的能力的安全机制,其用法如下。

  • 在exec()调用中,能力边界集会与文件许可能力取AND来确定将被授予新程序的许可能力。换句话说,当一个可执行文件的某个许可能力不在边界能力集中时就无法向进程授予该项能力。
  • 能力边界集是一个可以被添加到进程的可继承集中的能力的受限超集。这表示除非能力位于边界集中,否则进程就无法将其许可能力集中的某个能力添加到其可继承集中并——通过上面介绍的第一条能力转换规则——在进程执行一个可继承集中包含该项能力的文件时将该项能力保留在进程的许可集中。

能力边界集是一个进程级特性,通过fork()创建的子进程会继承这个特性,并且在exec()调用中会保持这个特性。在支持文件能力的内核中,init(所有进程的祖先)在启动时会使用一个包含了所有能力的能力边界集。

如果一个进程具备了CAP_SETPCAP能力,那么它就可以使用prctl() PR_CAPBSET _DROP操作从其边界集中删除能力(不可逆的)。(从边界集中删除一个能力不会对进程的许可、有效和可继承能力集产生影响。)一个进程使用prctl() PR_CAPBSET_READ操作能够确定一个能力是否位于其边界集中。

更准确地讲,能力边界集是一个线程级的特性。从Linux 2.6.26开始,这个特性在Linux特有的/proc/PID/task/TID/status文件中的CapBnd字段予以显示。/proc/PID/status文件显示了进程主线程的边界集。