子进程是否继承python的linux功能?

时间:2019-03-26 23:51:38

标签: python linux subprocess linux-capabilities

我正在使用一个程序通过子进程模块发出tc命令,但是tc正在输出RTNETLINK answers: Operation not permitted

为解决此问题,我为Python提供了CAP_NET_ADMIN标志,具有epi功能,但是我仍然无法发出tc命令。

$ getcap /usr/bin/python3.5
$ /usr/bin/python3.5 test-capabilities.py 
CompletedProcess(args=['tc', 'qdisc', 'add', 'dev', 'eth0', 'root', 'pfifo'], returncode=2, stdout=b'', stderr=b'RTNETLINK answers: Operation not permitted\n')
$ sudo setcap cap_net_admin+eip /usr/bin/python3.5 
$ /usr/bin/python3.5 test-capabilities.py 
CompletedProcess(args=['tc', 'qdisc', 'add', 'dev', 'eth0', 'root', 'pfifo'], returncode=2, stdout=b'', stderr=b'RTNETLINK answers: Operation not permitted\n')
$ sudo /usr/bin/python3.5 test-capabilities.py 
CompletedProcess(args=['tc', 'qdisc', 'add', 'dev', 'eth0', 'root', 'pfifo'], returncode=2, stdout=b'', stderr=b'RTNETLINK answers: File exists\n')

如果CAP_NET_ADMIN允许进程修改网络接口,并且+i中的setcap标志指示子进程应继承赋予可执行文件的功能,为什么我仍然得到不允许操作错误。我希望得到文件存在错误,就像我通过sudo运行python时所做的那样。

0 个答案:

没有答案