ip netns exec 权限被拒绝

ip netns exec 权限被拒绝

我有一个 php 脚本,比如 file.php,其中包含:

<?php
exec("ip netns exec vpn file2.php");
?>

如果我以 root 身份通过命令行运行 file.php,它可以正常工作。但是,当我通过 apache 运行它时,www-data 没有使用 ip netns exec 的权限,但是 www-data 可以使用 ip netns list。

我该如何 a) 让非 root 用户运行 ip netns exec,或者授予 www-data 运行 ip net exec 的权限?

答案1

尝试类似

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

以 root 身份运行。

这样,apache 将以非 root 用户身份使用 netns 运行。如果您同时需要两个命名空间,请启动两个实例,每个实例位于一个命名空间中。动态更改命名空间似乎不起作用。

解释:

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

所以这里就出现了两个障碍。一个是文件系统权限/var/run/netns/*,另一个是特权系统调用的能力。

相关内容