Наследует ли подпроцесс возможности python для Linux?

#python #linux #subprocess #linux-capabilities

#python #linux #подпроцесс #linux-возможности

Вопрос:

Я использую программу для выдачи команды 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 permittedn')
$ 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 permittedn')
$ 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 existsn')
  

если CAP_NET_ADMIN процессу разрешено изменять сетевые интерфейсы, а i флаг, указанный в setcap , указывает, что подпроцессы должны наследовать возможности, предоставленные исполняемому файлу, почему я все еще получаю ошибку «операция не разрешена». Я ожидал бы получить ошибку File exists, как я делаю выше при запуске python через sudo.

Комментарии:

1. Судя по этой статье , по крайней мере, совсем недавно, в 2015 году, возможности не наследовались через execve() вызов.