为任何进程计算最小的 Linux 功能集的最佳方法是什么?
假设您正在强化操作系统,其中一些工具可能需要CAP_NET_ADMIN
相关的网络权限,而其他工具可能需要CAP_SYS_NICE
. 应该有一种方法可以告诉每个可执行文件真正需要哪些功能。
为任何进程计算最小的 Linux 功能集的最佳方法是什么?
假设您正在强化操作系统,其中一些工具可能需要CAP_NET_ADMIN
相关的网络权限,而其他工具可能需要CAP_SYS_NICE
. 应该有一种方法可以告诉每个可执行文件真正需要哪些功能。
在运行时确定所需功能的两种可能方法:
strace
没有 root 权限的情况下运行您的程序。确定哪些系统调用失败EPERM
并为您的程序添加相应的功能。重复此操作,直到收集到所有功能。SystemTap
,DTrace
或Kprobes
记录或拦截内核中为您的程序进行的能力检查。(例如,从此处capable
描述的 BCC 工具套件中使用)我猜,具有良好覆盖率的单元测试会有很大帮助。另请注意,capabilities(7)手册页列出了可能需要每个功能的系统调用(尽管它不是完整的列表)。
更新:
@RodrigoBelem 引用的文章capable_probe
提到了基于KProbes
.
该模块的原始文章是“POSIX 文件功能:Parceling the power of root”,现在不可用(它托管在这里)。但是您可以在 Internet上找到源代码和一些文档。