В ip netns exec разрешение запрещено
У меня есть скрипт php, скажем file.php, который содержит:
<?php
exec("ip netns exec vpn file2.php");
?>
Если я запускаю file.php через командную строку от имени root, он работает. Однако, когда я запускаю его через apache, www-data не имеет разрешения на использование ip netns exec, однако www-data может использовать список ip netns.
Как мне: a) разрешить ip netns exec запускаться пользователями без полномочий root или предоставить www-data разрешения на запуск ip net exec?
1 ответ
Попробуйте что-то вроде
# 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/*
другой - возможности привилегированных системных вызовов.