WEB开发网
开发学院操作系统Linux/Unix POSIX 文件能力:分配根用户的能力 阅读

POSIX 文件能力:分配根用户的能力

 2008-11-12 08:30:08 来源:WEB开发网   
核心提示: 为了演示这些集的相互作用,假设管理员用以下命令在 /bin/some_program 上设置了文件能力: setfcaps -c cap_sys_admin=i,cap_dac_read_search=p -e/bin/some_program如果一个非根用户在拥有所有能力的情况下运行这个

为了演示这些集的相互作用,假设管理员用以下命令在 /bin/some_program 上设置了文件能力:

  setfcaps -c cap_sys_admin=i,cap_dac_read_search=p -e
  /bin/some_program

如果一个非根用户在拥有所有能力的情况下运行这个程序,首先计算它的可继承集(pI)和 fI 的交集,所以缩减到只包含 cap_sys_admin。接下来,计算 fP 和这个集的并集,所以结果是 cap_sys_admin+cap_dac_read_search。这个集成为新的任务允许集。

最后,因为设置了有效位,新的任务有效集将包含新允许集中的两个能力。

另一方面,如果一个完全没有特权的用户运行同一个程序,他的可继承集是空的,这个集与 fI 求交集,会产生一个空集。这个空集与 fP 求并集,产生 cap_dac_read_search。这个集成为新的任务允许集。最后,因为设置了有效位,新的有效集复制新的允许集,同样只包含 cap_dac_read_search。

在这两种情况下,如果没有设置有效位,那么任务需要使用 cap_set_proc(3) 将它所需的位从允许集复制到有效集。

总结和练习

下面总结一下:

文件有效位表示程序在默认情况下是否能够使用它的允许能力。

文件允许集中的能力总会在产生的进程上启用。

文件可继承集中的能力可以从父进程的可继承集继承到新的允许集。

为了演示前面讨论的内容,我们编写了清单 5 和清单 6 中的程序。在清单 5 中,print_caps 仅仅输出当前的能力集。在清单 6 中,尝试作为根用户执行 exec_as_nonroot_priv。它请求在下一次调用 setuid(2) 时保留它的能力,变成第一个命令行参数指定的非根用户,将它的能力集设置为第二个命令行参数指定的集,然后执行第三个命令行参数指定的程序。

上一页  5 6 7 8 9 10 

Tags:POSIX 文件 能力

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接