tcpdump: out.pcap: Berechtigung verweigert

14
[root@localhost ~]# cat /etc/issue
Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.6.10-2.fc17.i686 #1 SMP Tue Dec 11 18:33:15 UTC 2012 i686 i686 i386 GNU/Linux
[root@localhost ~]# tcpdump -i p3p1 -n -w out.pcap -C 16
tcpdump: out.pcap: Permission denied

Warum bekomme ich eine Fehlermeldung?

Was soll ich machen?

Chobo
quelle

Antworten:

21

Ich habe Centos 5 ausprobiert, immer noch das Gleiche, sogar auf tmp oder im Root-Ordner. In 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, tritt die verweigerte Berechtigung auf, weil die Dateigröße bereits 1 erreicht hat. Wenn Sie eine neue Datei erstellen, wird der Fehler "Berechtigung verweigert" ausgegeben. Geben Sie einfach den Benutzer -Z 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)                           = ?

Wie Sie oben sehen können, hat tcpdump die Berechtigungen in Benutzer- und Gruppen-pcap (77) abgelegt.

# grep 77 /etc/group
pcap:x:77:
# grep 77 /etc/passwd
pcap:x:77:77::/var/arpwatch:/sbin/nologin

Aus der Manpage tcpdump, -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 ]

Spezifischen Benutzer mit -Z Benutzer angeben

# 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     
chocripple
quelle
8

Versuchen Sie, den Befehl aus einem /tmpoder einem anderen von der Welt beschreibbaren Verzeichnis auszuführen . Ich erinnere mich, dass ich Probleme mit tcpdump in Verzeichnissen hatte, die nicht von der Welt beschreibbar sind. Ich habe keine Ahnung, warum - :)

         cd /tmp
         tcpdump -i p3p1 -n -w out.pcap -C 16 
Daniel t.
quelle
5

Ihr tcpdump löscht Berechtigungen für den Benutzer 'tcpdump', überprüfen Sie die Manpage ("-Z tcpdump" ist die Standardeinstellung, und der Benutzer tcpdump hat keine Berechtigungen zum Schreiben in das Stammverzeichnis von root). Führen Sie, wie Ihnen Daniel T. sagte, Ihre Erfassung in einem Verzeichnis aus, das von der Welt aus beschreibbar ist, z. B. / tmp, oder zumindest in einem Verzeichnis, in dem Sie dem Benutzer oder der Gruppe die Schreibberechtigung 'tcpdump' erteilt haben.

Markiere R
quelle
5

Als ich auf dieses Permission deniedProblem stieß, stellte sich heraus, dass ich .capder Datei eine Erweiterung hinzufügte .pcap. Wie RichL in den Kommentaren hervorhob, /etc/apparmor.d/usr.sbin.tcpdumpverursacht dies das AppArmor-Profil auf Ubuntu .

  # 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
Küken
quelle
5
Es stellt sich heraus, dass das AppArmor-Profil für Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) nur das Schreiben der tcpdump-Binärdatei in Dateien mit der Erweiterung .pcap zulässt. AppArmor ist in Ubuntu standardmäßig aktiviert, was mich überrascht hat.
Rich L
3

Läuft SELinux? Überprüfen Sie, indem Sie Folgendes eingeben:

/usr/sbin/getenforce

In diesem Fall Enforcingkönnen Sie versuchen, SELinux zu deaktivieren und den tcpdump erneut auszuführen, um festzustellen, ob SE ihn gestoppt hat.

mako_reactor
quelle
@Hauke ​​Laging Aus seiner Bash-Ausgabe geht hervor, dass er den Befehl von Roots Home-Verzeichnis aus ausführt.
Mako_reactor
1

Die Fehlermeldung macht für mich wenig Sinn. SELinux ist jedoch eine mögliche Erklärung. Sie können einen genaueren Blick auf das Geschehen werfen, indem Sie tcpdump durch strace starten:

strace tcpdump -i p3p1 -n -w out.pcap -C 16
Hauke ​​Laging
quelle
1

Sie sollten den Modus des Verzeichnisses ändern, in dem Sie tcpdump ausführen.

chmod 777

Führen Sie nun den Befehl tcpdump -vv -i any -s0 -w file_name.pcap aus

Es sollte funktionieren ...!!

Michael Scofield
quelle
1
Für bestimmte Werte von 'Arbeit'. Sie haben jetzt ein Verzeichnis mit der Paketerfassung, das möglicherweise vertrauliche Daten enthält, die von jedem gelesen werden können, der Zugriff auf den Host hat. "Hey Doktor, ich habe ein Hangnagel" sollte nicht mit Amputation beantwortet werden, egal wie vollständig das Hangnagel-Problem gelöst ist.
DopeGhoti