如何找出一个进程需要工作的Linux功能?

问题描述 投票:7回答:2

我处在一个困难的境地,我不知道一个进程需要工作的Linux功能。什么是最好的方法,或任何方式找出所需的上限?

我现在唯一能想到的就是使用capsh并删除进程上的全部大写。然后该过程失败,我开始添加大写(通过删除--drop = CAP_XZY)直到它工作。

有更好的建议吗?

linux debugging linux-kernel linux-capabilities
2个回答
0
投票

我之前在这个blog post by 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允许列出所有正在运行的进程的有效功能,但它不提供检查进程实际需要哪些功能的可靠方法,因为:

  • 进程可以在其允许的集合中具有能力X,并且仅在短时间内将其提升到有效集合以执行特权操作。
  • 一个进程可以从更广泛的功能集开始,初始化需要提升的权限,并删除一些(或所有)功能(例如ping opening a raw socket)。
  • 它仅适用于已基于功能的方式运行的进程。如果您必须确定新开发的应用程序所需的最小功能集,该怎么办?
  • 它不允许将为应用程序进行的权限检查与它执行的操作相关联,并且能够为单次检查获取时间戳。

有能力的来源可在github上找到。有关BCC(包括有能力)的安装说明可用here。有关进一步说明,请参阅开头提到的博客文章,请注意,功能需要内核4.4+,博客文章中也提供了旧内核的替代方案。

注意:我不是作者,也不是以任何方式与工具开发人员建立联系。我只是想把它带给更广泛的受众,因为我亲自用它为复杂的监控应用程序开发一个功能配置文件,以前需要完全root权限才能运行,并且发现这个跟踪器有很大的帮助。


6
投票

事实证明它比预期更容易。安装libcap-ng(https://people.redhat.com/sgrubb/libcap-ng/)并使用pscap

在Ubuntu 16.04中,它可以安装:

sudo apt-get install libcap-ng-utils

示例输出摘录:

ppid  pid   name        command           capabilities
1     468   root        systemd-journal   chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read
1     480   root        lvmetad           full
1     492   root        systemd-udevd     full
1     1040  root        rpc.idmapd        full
1     1062  root        rpc.gssd          full
1     1184  messagebus  dbus-daemon       audit_write +
1     1209  root        NetworkManager    dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write
© www.soinside.com 2019 - 2024. All rights reserved.