ip netns exec разрешение отклонено

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 list.

Как мне а) разрешить запуск ip netns exec пользователям, не являющимся root, или предоставить www-data разрешения на запуск ip net exec?

решение1

Попробуйте что-нибудь вроде

# ip netns exec vpn sudo -u www-data apache

как root.

Таким образом, apache будет работать с netns как не-root пользователь. Если вам нужны оба пространства имен одновременно, запустите два экземпляра, каждый в одном пространстве имен. Изменение пространства имен на лету, похоже, не работает.

Объяснение:

Каталог /var/run/netnsхранит все сетевые пространства имен, когда мы добавляем новое "abc", в этом каталоге создается пустой файл "abc". Каждый раз, когда мы выполняем программу "xyz" в пространстве имен "abc", ip(1)открывается и хранится дескриптор файла для /var/run/netns/abc, затем вызывается unshare(2)и setns(2).

Итак, вот два барьера. Один из них — это разрешения файловой системы /var/run/netns/*, другой — возможности привилегированных системных вызовов.

Связанный контент