我处在一个困难的情况下,我不知道一个进程需要什么Linux功能才能工作。最好的方法是什么,或者找出所需的上限的任何方法?
我现在唯一能想到的就是使用capsh并降低进程中的所有上限。然后,该过程失败,我开始添加上限(通过删除–drop = CAP_XZY),直到它起作用为止。
还有更好的建议吗?
我之前在Brendan Gregg的这篇博客文章中遇到的另一种方法是使用功能跟踪器 功能 。
以下是示例输出:
$ sudo /usr/share/bcc/tools/capable TIME UID PID COMM CAP NAME AUDIT 11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1 11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1 11:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 1 11:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 1 11:32:02 0 1421 timesync 25 CAP_SYS_TIME 1 11:32:05 1000 2469 sudo 7 CAP_SETUID 1 11:32:05 0 2469 sudo 6 CAP_SETGID 1
它具有记录内核针对给定进程进行的功能检查的显着优势。这样就可以根据应用程序实际需要的功能来分析应用程序,例如,缩小特权范围并以非特权用户身份执行它。
尽管 pscap 允许列出所有正在运行的进程的 有效 功能,但它不能提供一种可靠的方法来检查该进程实际上需要哪些功能,因为:
对于源 能 可在github上。对于BCC(包括安装说明 能力 )都可以在这里。有关进一步的描述,请参阅开头提到的博客文章,也请注意,该功能需要内核4.4+,博客文章中也提供了较旧内核的替代方法。
注意:我不是作者,也不以任何方式隶属于工具开发人员。我只是想将它带给更广泛的受众,因为我亲自使用它来为复杂的监视应用程序开发功能配置文件,该应用程序以前需要运行完整的root特权才能运行,并且发现此跟踪器有很大帮助。