Tim*_*Tim 2 linux capabilities
来自 Linux 编程接口:
\n\n\n\n\n允许集是可以添加到有效和可继承集的功能的限制超集。
\n
这是否意味着进程的允许集是进程的有效集和可继承集的超集?
\n\n\n\n\n内核使用以下规则计算进程的新能力:
\n\nP\'(允许) = (P(可继承) & F(可继承)) | (F(允许) &\n cap_bset)
\n\nP\'(有效)= F(有效)?P\'(允许):0
\n\nP\'(可继承) = P(可继承)
\n\n上述规则中,P表示 之前的能力集的值
\nexec()
,P\xe2\x80\x99\n 表示 之后的能力集的值exec()
,F表示文件能力集。标识符cap_bset表示能力边界集的值。
规则如何保证 P\'(允许)是 P\'(可继承)的超集?换句话说,P\'(允许)是否可以成为 P(可继承)的超集?
\n\n“F(有效)?P\'(允许):0”是什么意思?
\n\n是P(xxx)
andF(xxx)
集合还是位集合?如果是后者,对它们的操作是位操作吗?如果是前者,它们的运算是集合运算(并集和交集)吗?
\n\n\n“F(有效)?P\'(允许):0”是什么意思?
\n
这个表达方式predicate ? a : b
,来自C
相似的语言。这意味着\na if predicate else b
或者如果谓词为真,则计算结果为 ,a
否则计算结果为b
。
因此P\'(effective) = F(effective) ? P\'(permitted) : 0
,意味着如果设置了文件有效位,则将允许的集复制到进程有效集中,否则将有效集保留为空。
对于不了解功能(可能是目前大多数)的遗留应用程序来说,这是必需的。功能感知应用程序将从没有有效功能的情况下开始,并在需要时将功能复制到有效集,并在完成后清除有效集(减少错误可能造成的危害)。
\n\n\n\n\n允许集是可添加到有效且可继承集的功能的限制超集。
\n
您只能将功能添加到有效或继承集中(如果它们在允许范围内)。但是,要将功能添加到继承集中,它也必须位于边界集中。\xe2\x80\x94 这一段正在评论中讨论(可能会改变)。
\n\n\n\n\nP(xxx) 和 F(xxx) 是集合还是位集合?如果是后者,对它们的操作是位操作吗?如果是前者,它们的运算是集合运算(并集和交集)吗?
\n
大多数是位组,但是F(effective)
单个位。
您还问:
\n\n\n\n\n规则如何保证 P\'(允许)是 P\'(可继承)的超集?换句话说,P\'(允许)是否可以成为 P(可继承)的超集?
\n
事实并非如此,你的陈述是漏读。
\n\n\n\n\n[允许] 也是可添加到可继承集中的功能的限制超集。
\n
因此,进程可以继承其继承集的能力,但这些能力不在允许的集中。但可能不会向继承集中添加功能,除非该功能已位于允许的集中。
\n