ip netns 執行權限被拒絕

ip netns 執行權限被拒絕

我有一個 php 腳本,例如 file.php,其中包含:

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

如果我透過命令列以 root 身分執行 file.php,它就可以工作。但是,當我透過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 將以非 root 使用者身分使用 netns 運行。如果您同時需要兩個命名空間,請啟動兩個實例,每個實例位於一個命名空間中。即時更改名稱空間似乎不起作用。

解釋:

目錄/var/run/netns存放了所有的網路命名空間,當我們新增一個新的「abc」時,會在這個目錄中建立一個空檔案「abc」。每次我們在命名空間“abc”中執行程式“xyz”時,ip(1)都會開啟並儲存 的檔案描述符/var/run/netns/abc,然後呼叫unshare(2)setns(2)

那麼這兩個障礙就來了。一是檔案系統權限/var/run/netns/*,二是特權系統呼叫的功能。

相關內容