ip netns exec 権限が拒否されました

ip netns exec 権限が拒否されました

次の内容を含む、file.php という PHP スクリプトがあります。

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

コマンドラインから root として file.php を実行すると、動作します。ただし、Apache 経由で実行すると、www-data には ip netns exec を使用する権限がありませんが、www-data は ip netns list を使用できます。

どうすれば、a) ip netns exec を非ルート ユーザーが実行できるようになるか、www-data に ip net exec を実行する権限を与えることができますか?

答え1

次のようなことを試してみてください

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

root として。

この方法では、Apache は非ルート ユーザーとして netns で実行されます。 両方の名前空間を同時に必要とする場合は、それぞれ 1 つの名前空間で 2 つのインスタンスを起動します。 名前空間をオンザフライで変更することは機能しないようです。

説明:

ディレクトリには/var/run/netnsすべてのネットワーク名前空間が格納されており、新しい名前空間「abc」を追加すると、このディレクトリに空のファイル「abc」が作成されます。名前空間「abc」でプログラム「xyz」を実行するたびに、ip(1)は のファイル記述子を開いて保持し/var/run/netns/abc、 と を呼び出しunshare(2)ますsetns(2)

ここで 2 つの障壁が生まれます。1 つは のファイルシステム権限であり/var/run/netns/*、もう 1 つは特権システムコールの機能です。

関連情報