Problem mit den tcpdump-Berechtigungen

13

Ich habe Probleme beim Ausführen von tcpdump. Ich muss tcpdump mit Nicht-Root-Benutzer ausführen. Durchsuchte das Web nach meinem Problem und fand heraus, ob ich:

sudo setcap cap_net_admin=eip /usr/sbin/tcpdump

Das ermöglichte es mir, tcpdump mit meinem Benutzer auszuführen, aber dann bekam ich:

you don't have permission to capture on that device

auf jedem Gerät habe ich versucht, zu erfassen.

Ging auch ein wenig Brute-Force und tat:

sudo chmod +s /usr/sbin/tcpdump

Das hat es auch nicht getan.

Sivan Sigal
quelle
Für Tcpdump sind Root-Rechte erforderlich. Sie müssen bestimmte Linux-Funktionen für die Binärdatei festlegen: $ sudo setcap cap_net_raw, cap_net_admin = eip / usr / sbin / tcpdump
DreamCoder
Das habe ich auch getan, aber ich bekomme immer wieder:tcpdump: eth0: You don't have permission to capture on that device (socket: Operation not permitted
Sivan Sigal
Dies ist auch problematisch, da ich den Quellcode, den ich gerade ausführe , nicht ändern möchte. Hat jemand ein anderes Angebot?
Sivan Sigal

Antworten:

27

Es ist ein bisschen spät, aber ich hatte das gleiche Problem. Sie müssen tcpdumpdie Berechtigung und die Fähigkeit erteilen, die Erfassung von Rohpaketen und die Manipulation von Netzwerkschnittstellen zuzulassen .

Fügen Sie eine Erfassungsgruppe hinzu und fügen Sie sich selbst hinzu:

sudo groupadd pcap
sudo usermod -a -G pcap $USER

Ändern Sie als Nächstes die Gruppe von tcpdumpund legen Sie die Berechtigungen fest:

sudo chgrp pcap /usr/sbin/tcpdump
sudo chmod 750 /usr/sbin/tcpdump

Verwenden Sie schließlich, setcapum tcpdumpdie erforderlichen Berechtigungen zu erteilen :

sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

Seien Sie vorsichtig, damit jeder aus der Gruppe die Netzwerkschnittstellen manipulieren und Rohpakete lesen kann!

Hier gefunden: Konfigurieren Sie tcpdump so, dass es als nicht als Root fungiert

Horst
quelle
Ich konnte dies ein wenig einschränken und nur nutzen cap_net_raw,cap_setpcap=ep. Das Entfernen des iwar, weil mein Programm nicht gabeln musste. Dies ist für eine benutzerdefinierte Binärdatei, also ymmv.
Dan
Dies funktionierte auch für iftopein Programm, das die Netzwerkauslastung nach IP-Adresse / DNS-Name
anzeigt
0

Vielleicht könnte dies funktionieren. Ähnlich wie das, was bereits gepostet wurde. Es wurde nicht auf Ubuntu getestet.

(Verwenden Sie eine Gruppe, zu der Ihr Benutzer gehört.) chgrp wireshark / usr / sbin / tcpdump

setcap 'CAP_NET_RAW + eip CAP_NET_ADMIN + eip' / usr / sbin / tcpdump

Mit getcap / usr / sbin / tcpdump sollte / usr / sbin / tcpdump = cap_net_admin, cap_net_raw + eip angezeigt werden

Serjan
quelle