В 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/* другой - возможности привилегированных системных вызовов.

Другие вопросы по тегам