POSIX 文件能力:分配根用户的能力
2008-11-12 08:30:08 来源:WEB开发网 capability_list=capability_set(s)
capability_set 可以包含 i 和 p,capability_list 可以包含任何有效能力。能力类型分别代表可继承集和允许集,可以为每个集指定单独的能力列表。-e 或 -d 标志分别表示允许集中的能力在启动时是否在程序的有效集中。如果能力不在程序的有效集中,那么程序必须能够感知能力,必须自己启用有效集中的位,才能使用能力。
到目前为止,我们已经在允许集中设置了所需的能力,但是还没有在可继承集中设置。实际上,我们可以用能力实现更精细更强大的效果。下面回忆一下清单 1:
重复清单 1. 在执行 exec() 之后计算新能力集的公式
pI' = pI
pP' = fP | (fI & pI)
pE' = pP' & fE
文件可继承集决定进程的哪些可继承能力可以放在新的进程允许集中。如果文件可继承集中只有 cap_dac_override,那么只能将这个能力继承到新的进程允许集中。
文件允许集也称为 “强迫(forced)” 集,其中的能力总是出现在新的进程允许集中,无论这些能力是否在任务的可继承集中。
最后,文件有效位表示任务的新允许集中的位是否应该在新的有效集中设置;也就是说,程序是否能够马上使用这些能力,而不需要用 cap_set_proc(3) 显式地请求它们。
如果没有设置 SECURE_NOROOT,系统会对根用户做一些修改。就是说,系统假设在执行文件时,可继承集(fI)、允许集(fP)和有效集(fE)包含所有能力。所以二进制文件上的 fI 集只对具有非空能力集的非根进程有作用。对于在变成非根用户时保留能力的程序,将应用上面的公式,而不会使用上面的假设。SECURE_NOROOT 以后可能会成为每个进程的设置,让进程树可以选择是使用本身的能力,还是使用 root-user-is-privileged 模型。但是到编写本文时,在任何实际系统上,这还是一个系统范围的设置,它的默认设置让根用户总是拥有所有能力。
更多精彩
赞助商链接