Назад | Перейти на главную страницу

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.

Как мне: а) разрешить запуск 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/* , другой - возможности для привилегированных системных вызовов.