在/usr/bin/python2.7上使用setcap不提供权限

时间:2017-09-21 12:38:23

标签: python linux linux-capabilities

我(我)正在使用python创建数据包并捕获回复来测试网络设备。 为了提供我使用过的python功能:

sudo setcap cap_net_admin,cap_net_raw+eip /usr/bin/python2.7

当我检查功能时,设置看起来不错:

getcap /usr/bin/python2.7
/usr/bin/python2.7 = cap_net_admin,cap_net_raw+eip

如果我运行我的脚本,我会收到以下错误:

dumpcap: The capture session could not be initiated on interface 'eth2' (You don't have permission to capture on that device).
Please check to make sure you have sufficient permissions, and that you have the proper interface or pipe specified.

如果我通过以下方式直接提供dumpcap功能:

sudo setcap cap_net_admin,cap_net_raw=eip /usr/bin/dumpcap

这使脚本运行,但它无法解决我的python无法使用cap_net_admin的问题。

有没有办法检查我的运行python进程是否能获得正确的功能?或者为什么python2.7似乎没有继承我系统上的功能?

为了确保调用正确的文件/进程,我使用/usr/bin/python2.7作为要调用的可执行文件。 相同的python代码可以与我公司的其他人一起使用。 我正在运行Ubuntu 16.04。 问候

1 个答案:

答案 0 :(得分:1)

正如@Petesh所指出的那样,您的脚本可能会调用子进程,涉及调用exec()并且子进程中不会引发这些功能。有效集。您可以通过利用环境功能来解决这个问题,这些功能是available for kernel 4.3+ - 即Ubuntu 16.04就足够了。简单来说,环境功能在exec()之间保留,因此传递给子进程。要启动具有环境功能的流程,您可以使用以下实用程序:https://gist.github.com/tomix86/32394a43be70c337cbf1e0c0a56cbd8d

要检查给定流程的功能集,您可以使用

grep Cap /proc/[pid]/status

其中CapEff是有效的功能集,要解码这些十六进制字符串,您可以使用capsh