我之前在Brendan Gregg的这篇博客文章中遇到的另一种方法是使用功能跟踪器 功能 。
以下是示例输出:
$ sudo /usr/share/bcc/tools/capableTIME UID PID COMM CAP NAME AUDIT11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 111:31:54 0 2467 capable 21 CAP_SYS_ADMIN 111:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 111:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 111:32:02 0 1421 timesync 25 CAP_SYS_TIME 111:32:05 1000 2469 sudo 7 CAP_SETUID111:32:05 0 2469 sudo 6 CAP_SETGID1
它具有记录内核针对给定进程进行的功能检查的显着优势。这样就可以根据应用程序实际需要的功能来分析应用程序,例如,缩小特权范围并以非特权用户身份执行它。
尽管 pscap 允许列出所有正在运行的进程的 有效 功能,但它不能提供一种可靠的方法来检查该进程实际上需要哪些功能,因为:
- 进程可能在其允许的集合中具有能力X,并且仅在短时间内将其提升到有效的集合中才能执行特权操作。
- 一个进程本可以从更广泛的功能集开始,进行需要提升特权的初始化,然后放弃某些(或全部)功能(例如ping打开原始套接字)。
- 它仅适用于已经以基于功能的方式运行的进程。如果必须确定新开发的应用程序所需的最小功能集怎么办?
- 它不允许将对应用程序进行的特权检查与它执行的操作相关联,并且 无法 获得每次检查的时间戳。
对于源 能
可在github上。对于BCC(包括安装说明
能力
)都可以在这里。有关进一步的描述,请参阅开头提到的博客文章,也请注意,该功能需要内核4.4+,博客文章中也提供了较旧内核的替代方法。
注意:我不是作者,也不以任何方式隶属于工具开发人员。我只是想将它带给更广泛的受众,因为我亲自使用它来为复杂的监视应用程序开发功能配置文件,该应用程序以前需要运行完整的root特权才能运行,并且发现此跟踪器有很大帮助。



