首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在/usr/bin/python2.7上使用setcap不会为subtask提供权限

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

Stack Overflow用户
提问于 2017-09-21 20:38:23
回答 1查看 1.4K关注 0票数 1

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

代码语言:javascript
复制
sudo setcap cap_net_admin,cap_net_raw+eip /usr/bin/python2.7

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

代码语言:javascript
复制
getcap /usr/bin/python2.7
/usr/bin/python2.7 = cap_net_admin,cap_net_raw+eip

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

代码语言:javascript
复制
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提供功能:

代码语言:javascript
复制
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。问候

EN

回答 1

Stack Overflow用户

发布于 2017-12-16 16:38:39

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

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

代码语言:javascript
复制
grep Cap /proc/[pid]/status

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46344157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档