Senden von Daten an eine Linux-Tap-Schnittstelle ohne Verwendung von sudo

361
user1738833

Ich versuche, Unit-Tests für meine Netzwerkskripte einzurichten. Da die Komponententests von einem Nicht-Root-Benutzer (normalerweise "jenkins") ausgeführt werden, möchte ich eine Netzwerkschnittstelle einrichten können, die von jenkins verwendet werden kann, um nur die Pakete zu testen, die von meinem Netzwerk gesendet werden Skripte. Das Programm, das ich gerade teste, verwendet die Netzwerkschnittstelle im Promiscuous-Modus und wird unter dem Root-Benutzer als Linux-Dienst ausgeführt. Ich möchte jedoch, dass die Funktionseinheit getestet wird, ohne dass ein Root-Login oder eine interaktive Eingabe erforderlich ist. Der "Benutzer" von jenkins ist kein interaktiver Benutzer auf dem System.

Ich kann eine Tap-Schnittstelle (CentOS 7.x) auf folgende Weise einrichten:

sudo ip tuntap add tap0 mode tap user jenkins sudo ifconfig tap0 promisc up 

Dadurch wird eine Schnittstelle angezeigt, die ich sehen kann ifconfig, aber es ist nicht "RUNNING".

Ich kann Daten an ihn senden, indem ich mein Programm mit laufe sudo XXXX, so dass mein Programm wie erwartet funktioniert. Wenn ich jedoch das Programm über das Jenkins-Konto ausführen, werden die Pakete nicht durchlaufen. Ich kann das Jenkins-Benutzerkonto vorübergehend auf "interaktiv" umstellen, um dies zu versuchen. Ich verwende Wireshark, um den Durchsatz dieser Schnittstelle anzuzeigen.

Ich habe dies mit meinem eigenen Benutzerkonto und anderen Konten versucht, aber nur das Root-Konto funktioniert.

Ich glaube, es gibt einige Befehlszeilenaufrufe, die ich verwenden kann, um einem Benutzer ohne Rootberechtigung die Verwendung einer (privaten, vom Benutzer eigenen) Netzwerkschnittstelle zu erlauben, aber ich kann nichts finden.

Ich könnte möglicherweise ein System mit sudound / oder suid ( chmod 4755 XXX) -Berechtigungen ausarbeiten, mit dem die Komponententests mit Root-Berechtigungen ausgeführt werden könnten, aber es scheint, dass ich in der Lage sein sollte, automatisierte Tests auszuführen, ohne diesen etwas gewundenen Prozess durchlaufen zu müssen.

Weiß jemand, wie ich ein Tap-Interface von einem Benutzerkonto aus nutzen kann?

Hinweis: Letztendlich verwendet mein Programm libpcap's' pcap_inject, um ein Paket in die Schnittstelle einzufügen.

Ich kann auch Pakete als Benutzer ohne Rootberechtigung in meine reale Netzwerkschnittstelle einspritzen, und das funktioniert, aber es ist etwas gefährlich, meine (möglicherweise fehlerhaften) Pakete in das reale Netzwerk zu lassen. Es scheint unvereinbar, dass ein Benutzer eine echte Schnittstelle verwenden kann, aber keine "Tap" -Schnittstelle zum Testen.

Wenn dies grundsätzlich nicht möglich ist, hat jemand einen Vorschlag, wie man (auf einem Rechner) meine Netzwerkpaketeinspritzung auf andere Weise testen kann?

0
Ich verstehe nicht ganz genau, was Sie testen möchten, aber ich empfehle Netzwerk-Namespaces anstelle einer Tap-Schnittstelle (die eigentlich eine Seite eines Anwendungsprogramms ist, das die Pakete verarbeitet - das Erstellen mit "ip" macht nur Sinn, um die Name). Für die Erstellung von Netzwerk-Namespaces sind Root-Berechtigungen erforderlich. Sie werden nicht verwendet. dirkt vor 6 Jahren 0

0 Antworten auf die Frage