ip netns执行权限被拒绝

我有一个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执行由非root用户运行,或给www-data运行ip net执行的东西的权限?

尝试类似

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

作为根。

这样apache将以非root用户身份运行netns。 如果同时需要两个名称空间,则启动两个实例,每个实例都在一个名称空间中。 更改命名空间的dynamic似乎并没有工作。

解释:

目录/var/run/netns存储所有networking命名空间,当我们添加一个新的“abc”时,在这个目录中创build空文件“abc”。 每次我们在命名空间“abc”中执行程序“xyz”时, ip(1)打开并保存/var/run/netns/abc ,然后调用unshare(2)setns(2)

所以这里有两个障碍。 一个是/var/run/netns/*的文件系统权限,另一个是特权系统调用的function。