在/usr/bin/python2.7上使用setcap不会为子任务提供权限

2024-05-15 09:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我(我们)正在使用python来创建包并捕获应答来测试网络设备。 要提供我使用的python功能:

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

当我检查功能时,设置看起来正常:

^{pr2}$

如果我运行脚本,会出现以下错误:

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。 你好


Tags: 功能脚本rawnetbinadminonusr
1条回答
网友
1楼 · 发布于 2024-05-15 09:21:23

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

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

grep Cap /proc/[pid]/status

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

相关问题 更多 >