У меня есть скрипт php, скажем file.php, который содержит:
<?php
exec("ip netns exec vpn file2.php");
?>
Если я запускаю file.php через командную строку от имени пользователя root, он работает. Однако, когда я запускаю его через apache, www-data не имеет разрешений на использование ip netns exec, однако www-data может использовать список ip netns.
Как мне: а) разрешить запуск ip netns exec пользователям без полномочий root или дать www-data разрешения на запуск ip net exec?
Попробуйте что-нибудь вроде
# ip netns exec vpn sudo -u www-data apache
как корень.
Таким образом, apache будет работать с netns как пользователь без полномочий root. Если вам нужны оба пространства имен одновременно, запустите два экземпляра, каждый в одном пространстве имен. Изменение пространства имен на лету, похоже, не работает.
Объяснение:
Каталог /var/run/netns
сохраняет все сетевые пространства имён, когда мы добавляем новое «abc», в этом каталоге создается пустой файл «abc». Каждый раз, когда мы выполняем программу «xyz» в пространстве имен «abc», ip(1)
открывает и содержит дескриптор файла для /var/run/netns/abc
, затем звонит unshare(2)
и setns(2)
.
Итак, здесь возникают два препятствия. Один из них - разрешения файловой системы /var/run/netns/*
, другой - возможности для привилегированных системных вызовов.