IP NetNS Exec-Berechtigung verweigert

IP NetNS Exec-Berechtigung verweigert

Ich habe ein PHP-Skript, beispielsweise file.php, das Folgendes enthält:

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

Wenn ich file.php über die Befehlszeile als Root ausführe, funktioniert es. Wenn ich es jedoch über Apache ausführe, hat www-data nicht die Berechtigung, ip netns exec zu verwenden. www-data kann jedoch ip netns list verwenden.

Wie kann ich entweder a) die Ausführung von „ip netns exec“ durch Nicht-Root-Benutzer zulassen oder www-data die Berechtigung erteilen, „ip net exec“-Sachen auszuführen?

Antwort1

Versuchen Sie etwas wie

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

als root .

Auf diese Weise wird Apache mit netns als Nicht-Root-Benutzer ausgeführt. Wenn Sie beide Namespaces gleichzeitig benötigen, starten Sie zwei Instanzen, jede in einem Namespace. Das Ändern des Namespaces im laufenden Betrieb scheint nicht zu funktionieren.

Erläuterung:

Das Verzeichnis /var/run/netnsspeichert alle Netzwerk-Namespaces. Wenn wir einen neuen „abc“ hinzufügen, wird in diesem Verzeichnis eine leere Datei „abc“ erstellt. Jedes Mal, wenn wir das Programm „xyz“ im Namespace „abc“ ausführen, wird ip(1)ein Dateideskriptor für geöffnet und gespeichert /var/run/netns/abc, dann werden unshare(2)und aufgerufen setns(2).

Hier gibt es also zwei Hindernisse. Das eine sind die Dateisystemberechtigungen /var/run/netns/*, das andere sind die Möglichkeiten für privilegierte Systemaufrufe.

verwandte Informationen