Senden von Daten an eine Linux-Tap-Schnittstelle ohne Verwendung von sudo
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 sudo
und / 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 Antworten auf die Frage
Verwandte Probleme
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
2
Erinnert sich Windows 7 Home Premium an Netzwerkfreigaben-Passwörter?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
5
XP-Netzwerkverbindung ohne Neustart freigeben?
-
5
Wie richte ich Windows ein, 802.11 gegenüber 3G zu bevorzugen?