Lösung 1:
Ich habe es mit Centos 5 versucht, immer noch dasselbe, sogar im tmp- oder Root-Ordner. Von der tcpdump-Manpage werden Berechtigungen gelöscht, wenn sie mit der Option -Z (standardmäßig aktiviert) verwendet werden, bevor die erste Sicherungsdatei geöffnet wird. Da Sie "-C 1" angegeben haben, wird die Berechtigung verweigert, da die Dateigröße bereits 1 erreicht hat, und beim Erstellen einer neuen Datei wird ein Fehler "Berechtigung verweigert" ausgelöst. Geben Sie also einfach den -Z-Benutzer
an# strace tcpdump -i eth0 -n -w out.pcap -C 1
fstat(4, {st_mode=S_IFREG|0644, st_size=903, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aea31934000
lseek(4, 0, SEEK_CUR) = 0
read(4, "root:x:0:root\nbin:x:1:root,bin,d"..., 4096) = 903
read(4, "", 4096) = 0
close(4) = 0
munmap(0x2aea31934000, 4096) = 0
setgroups(1, [77]) = 0
setgid(77) = 0
setuid(77) = 0
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, "\1\0\0\0\0\0\0\0\310\357k\0\0\0\0\0", 16) = 0
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
recvfrom(3, 0x7fff9563d35f, 1, 32, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
fcntl(3, F_SETFL, O_RDWR) = 0
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, "\1\0\17\0\0\0\0\0P\327\233\7\0\0\0\0", 16) = 0
open("out.pcap", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied)
write(2, "tcpdump: ", 9tcpdump: ) = 9
write(2, "out.pcap: Permission denied", 27out.pcap: Permission denied) = 27
write(2, "\n", 1
) = 1
exit_group(1) = ?
Sie können das Strace-Ergebnis oben sehen, tcpdump hat die Privilegien in Benutzer und Gruppe pcap (77) abgelegt.
# grep 77 /etc/group
pcap:x:77:
# grep 77 /etc/passwd
pcap:x:77:77::/var/arpwatch:/sbin/nologin
Von der tcpdump-Manpage, -C
# man tcpdump
-C Before writing a raw packet to a savefile, check whether the file is currently larger than file_size and, if so,
close the current savefile and open a new one. Savefiles after the first savefile will have the name specified
with the -w flag, with a number after it, starting at 1 and continuing upward. The units of file_size are mil-
lions of bytes (1,000,000 bytes, not 1,048,576 bytes).
**Note that when used with -Z option (enabled by default), privileges are dropped before opening first savefile.**
# tcpdump --help
tcpdump version 3.9.4
libpcap version 0.9.4
Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]
[ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -Z user ]
[ expression ]
Spezifizieren Sie einen bestimmten Benutzer mit -Z Benutzer
# tcpdump -i eth0 -n -w out.pcap -C 1 -Z root
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
35 packets captured
35 packets received by filter
0 packets dropped by kernel
Lösung 2:
Versuchen Sie, den Befehl von /tmp
aus auszuführen oder jedes andere weltweit beschreibbare Verzeichnis. Ich erinnere mich an Probleme mit tcpdump in Verzeichnissen, die nicht weltweit beschreibbar sind, ich habe keine Ahnung warum -:)
cd /tmp
tcpdump -i p3p1 -n -w out.pcap -C 16
Lösung 3:
Ihr tcpdump gibt Rechte an den Benutzer ‚tcpdump‘ ab, überprüfen Sie die Manpage („-Z tcpdump“ ist die Standardeinstellung, und der Benutzer tcpdump hat keine Berechtigungen zum Schreiben in das Homedir von root). Wie Daniel T. Ihnen gesagt hat, führen Sie Ihr Capture in einem Verzeichnis aus, in dem alle schreiben können, wie /tmp, oder zumindest in einem Verzeichnis, in dem Sie entweder dem Benutzer oder der Gruppe 'tcpdump' Schreibrechte gegeben haben.
Lösung 4:
Als ich auf diese Permission denied
stieß Problem stellte sich heraus, dass ich einen .cap
gesetzt hatte Erweiterung der Datei anstelle von .pcap
. Wie RichL in den Kommentaren betonte, AppArmor-Profil auf Ubuntu /etc/apparmor.d/usr.sbin.tcpdump
verursacht dies.
# uname -a ; lsb_release -a
Linux bidder-lb4 3.2.0-76-virtual #111-Ubuntu SMP Tue Jan 13 22:33:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.5 LTS
Release: 12.04
Codename: precise
Lösung 5:
Läuft SELinux? Überprüfen Sie, indem Sie Folgendes eingeben:terminal:
/usr/sbin/getenforce
Wenn dort Enforcing
steht , können Sie versuchen, SELinux zu deaktivieren und tcpdump erneut zu versuchen, um zu sehen, ob SE es gestoppt hat.