Подпроцесс наследует возможности Python для Linux? - PullRequest
3 голосов
/ 27 марта 2019

Я использую программу для выдачи команды 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, указывает, что подпроцессы должны наследовать возможности, предоставленные исполняемому файлу, почему я все еще получаю ошибку «Операция не разрешена». Я ожидаю получить сообщение об ошибке «Файл существует», как я делал выше при запуске python через sudo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...