11-现代能力实现
39.4 现代能力实现
能力的完整实现要求如下。
- 对于每个特权操作,内核应该检查进程是否拥有相应的能力,而不是检查有效(或文件系统)用户ID是否为0。
- 内核必须要提供允许获取和修改进程能力的系统调用。
- 内核必须要支持将能力附加给可执行文件的概念,这样当文件被执行时进程会获取相应的能力。这与set-user-ID位是类似的,但允许单独地设置可执行文件上的各个能力。此外,系统必须要提供一组编程接口和命令来设置和查看附加给可执行完文件的能力。
在2.6.23以及之前的内核中,Linux只满足了前两条要求。自2.6.24内核开始就可以将能力附加到文件上了。在2.6.25和2.6.26内核中新增了很多其他特性以完善能力的实现。
这里针对有关能力的大多数讨论关注的都是现代实现。在39.10节中将介绍在引入文件能力之前实现之间存在的不一致性。此外,文件能力是现代内核的一个可选内核组件,但本次讨论的主要部分假设在内核中启用了这个组件。接着将会介绍文件能力被启用与被禁用之间存在的差别。(从几个方面来看,其行为与还未实现文件能力的2.6.24之前的Linux内核中行为类似。)
在下面几个小节中将深入介绍Linux能力实现的细节。