如何计算流程的最小能力集?

How to compute the minimal capabilities' set for a process?

计算任何进程的 最小集 Linux 能力的最佳方法是什么?

假设您正在加固操作系统,其中一些工具可能需要 CAP_NET_ADMIN 和相关网络权限,而其他工具可能需要 CAP_SYS_NICE。应该有一种方法可以告诉每个可执行文件哪些功能是真正需要的。

确定所需功能的两种可能方法在运行时间

  • 随后 运行 您的程序在 strace 下没有 root 权限。确定哪些系统调用失败 EPERM 并为您的程序添加相应的功能。重复此操作,直到收集到所有功能。
  • 使用SystemTapDTraceKprobes登录或 拦截内核中为您的程序进行的功能检查。 (例如,按照 所述使用 BCC 工具套件中的 capable

我想,具有良好覆盖率的单元测试会有很大帮助。另请注意,capabilities(7) 手册页列出了可能需要每种功能的系统调用(尽管它不是完整列表)。

更新:

@RodrigoBelem 引用的 article 提到 capable_probe 模块,它基于 KProbes.

此模块的原始文章是 "POSIX file capabilities: Parceling the power of root",现在不可用(它托管在 here). But you can find the source code and some docs 互联网上。