我处于一个困难的境地,我不知道一个进程需要哪些 linux 功能才能工作。最好的方法是什么,或者找出需要什么上限的任何方法?
我现在唯一能想到的就是使用 capsh 并将所有大写都放在一个进程上。然后该过程失败,我开始添加大写字母(通过删除--drop = CAP_XZY)直到它起作用。
有更好的建议吗?
我处于一个困难的境地,我不知道一个进程需要哪些 linux 功能才能工作。最好的方法是什么,或者找出需要什么上限的任何方法?
我现在唯一能想到的就是使用 capsh 并将所有大写都放在一个进程上。然后该过程失败,我开始添加大写字母(通过删除--drop = CAP_XZY)直到它起作用。
有更好的建议吗?
描述:
从这里:
getpcaps 显示由命令行中给出的 pid 值指示的进程的功能。
例子:
$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i
描述:
proc是一个进程信息伪文件系统,或者换句话说 - 一个可以查看所有进程信息的目录。
关于capsh:
可以使用此工具探索和限制 Linux 功能的支持和使用。该工具为某些类型的能力测试和环境创建提供了一个方便的包装器。
它还提供了一些有助于总结能力状态的调试功能。
例子:
$ cat /proc/<PID>/status | grep Cap
你会得到(在大多数系统上):
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
使用该capsh
实用程序将十六进制数字解码为功能名称:
capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
(*) 您可以通过以下方式下载capsh
:sudo apt-get install git libpcap-dev
.
事实证明这比预期的要容易。安装 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
另一种方法,我不久前在Brendan Gregg 的这篇博客文章中遇到过,是使用功能跟踪器-capabilities。
下面是一个示例输出:
$ 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(包括有能力)的安装说明可在此处获得。更多描述请参考开头提到的博文,另请注意,capable 需要内核 4.4+,博文中也提供了旧内核的替代方案。
注意:我不是作者,也不以任何方式隶属于工具开发人员。我只是想把它带给更广泛的受众,因为我个人使用它来为以前需要完全 root 权限才能运行的复杂监控应用程序开发功能配置文件,并且发现这个跟踪器有很大的帮助。