tcpdump: out.pcap: İzin reddedildi


15
[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

Neden hata alıyorum ??

Ne yapmalıyım?

Yanıtlar:


21

Centos 5 üzerinde denedim, hala aynı bile tmp veya kök klasörde. tcpdump man sayfasından, ilk savefile açılmadan önce -Z seçeneğiyle (varsayılan olarak etkindir) kullanıldığında ayrıcalıklar atılır. "-C 1" belirttiğiniz için izin reddedildi, dosya boyutu zaten 1'e ulaştığı için gerçekleşti ve yeni dosya oluşturulduğunda izin reddedildi hatası oluştu. bu yüzden -Z kullanıcısını belirtin

# 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)                           = ?

yukarıdaki strace sonucunu görebilirsiniz, tcpdump ayrıcalıkları kullanıcı ve grup pcap'a düşürdü (77).

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

Tcpdump man sayfasından -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 ]

-Z kullanıcısı ile belirli bir kullanıcıyı belirtin

# 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     

8

Komutu /tmpveya başka bir dünya yazılabilir dizininden çalıştırmayı deneyin . Dünya yazılabilir olmayan dizinlerde tcpdump ile ilgili sorunlar yaşadığımı hatırlıyorum, neden hiçbir fikrim yok - :)

         cd /tmp
         tcpdump -i p3p1 -n -w out.pcap -C 16 

5

Tcpdump'ınız 'tcpdump' kullanıcısına ayrıcalıklar atıyor, man sayfasını kontrol edin ("-Z tcpdump" varsayılan değerdir ve tcpdump kullanıcısının root'un ana bilgisayarına yazma izni yoktur). Daniel T.'nin size söylediği gibi, yakalamanızı / tmp gibi dünya çapında yazılabilir bir dizinde veya en azından kullanıcı veya gruba 'tcpdump' yazma izinleri verdiğiniz bir dizinde çalıştırın.


5

Bu Permission deniedsorunla karşılaştığımda bunun .capyerine dosyaya bir uzantı koyduğum ortaya çıktı .pcap. RichL'nin yorumlarda belirttiği gibi, Ubuntu'daki AppArmor profili buna /etc/apparmor.d/usr.sbin.tcpdumpneden oluyor.

  # 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

5
Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) için AppArmor profilinin yalnızca tcpdump ikili dosyasının .pcap uzantılı dosyalara yazmasına izin verir. AppArmor, beni yakalayan Ubuntu'da varsayılan olarak açık.
Zengin L

3

SELinux çalışıyor mu? Yazarak kontrol terminal:

/usr/sbin/getenforce

O derse Enforcing, sen SELinux'u devre dışı bırakarak ve SE onu durduran olduğunu görmek için, tekrar tcpdump çalışıyor deneyebilirsiniz.


@Hauke ​​Laging Bash çıkışından, komutu root'un evinden yönettiği görülüyor.
mako_reactor

1

Hata mesajı bana pek mantıklı gelmiyor. Ancak SELinux olası bir açıklamadır. Tcpdump'ı strace ile başlatarak neler olduğuna daha yakından bakabilirsiniz:

strace tcpdump -i p3p1 -n -w out.pcap -C 16

1

tcpdump altında çalıştığınız dizin modunu değiştirmelisiniz.

chmod 777

Şimdi tcpdump -vv -i any -s0 -w dosya_adı.pcap komutunu çalıştırın

İşe yaramalı ...!!


1
Belirli 'iş' değerleri için. Artık, ana bilgisayara erişimi olan herkes tarafından okunabilen hassas verileri içerebilecek iyi bir paket yakalama içeren bir dizine sahipsiniz. "Hey doktor, ben bir şeytan tırnağı var" asıl sorununu ne kadar çözerse çözsün ampütasyon ile cevaplanmamalıdır.
DopeGhoti
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.