tcpdump: out.pcap: Izin ditolak

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

Kenapa saya mendapat error ??

Apa yang harus saya lakukan?

chobo
sumber

Jawaban:

21

saya mencoba pada Centos 5, masih sama bahkan pada folder tmp atau root. dari halaman manual tcpdump, privilege dihapus ketika digunakan dengan opsi -Z (diaktifkan secara default) sebelum membuka savefile pertama. karena Anda menentukan "-C 1", izin ditolak terjadi karena ukuran file sudah mencapai 1, dan ketika membuat file baru itu akan menimbulkan kesalahan izin ditolak. jadi tentukan saja pengguna -Z

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

Anda dapat melihat hasil strace di atas, tcpdump menjatuhkan hak akses ke pcap pengguna dan grup (77).

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

Dari halaman manual 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 ]

Tentukan pengguna spesifik dengan -Z pengguna

# 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
sumber
8

Cobalah untuk menjalankan perintah dari /tmpatau direktori dunia yang dapat ditulis lainnya. Saya ingat memiliki masalah dengan tcpdump di direktori yang tidak dapat ditulis oleh dunia, saya tidak tahu mengapa - :)

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

Tcpdump Anda menjatuhkan hak istimewa kepada pengguna 'tcpdump', periksa halaman manual ("-Z tcpdump" adalah default, dan pengguna tcpdump tidak memiliki izin untuk menulis di homedir root). Seperti yang dikatakan Daniel T. kepada Anda, jalankan tangkapan Anda di direktori yang dapat ditulis oleh dunia seperti / tmp, atau setidaknya direktori tempat Anda memberikan izin menulis kepada pengguna atau grup 'tcpdump'.

Markus R
sumber
5

Ketika saya mengalami Permission deniedmasalah ini ternyata saya meletakkan .capekstensi pada file bukan .pcap. Seperti yang ditunjukkan RichL dalam komentar, profil AppArmor di Ubuntu /etc/apparmor.d/usr.sbin.tcpdumpmenyebabkan hal ini.

  # 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
anak ayam
sumber
5
Ternyata profil AppArmor untuk Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) hanya memungkinkan biner tcpdump untuk menulis ke file dengan ekstensi .pcap. AppArmor aktif secara default di Ubuntu, yang membuat saya ketahuan.
Rich L
3

Apakah SELinux berjalan? Periksa dengan mengetikkan terminal:

/usr/sbin/getenforce

Jika dikatakan Enforcing, Anda dapat mencoba menonaktifkan SELinux dan mencoba tcpdump lagi, untuk melihat apakah SE menghentikannya.

mako_reactor
sumber
@ Hauke ​​Laging Dari hasil bash-nya, sepertinya dia menjalankan perintah dari dir home root.
mako_reactor
1

Pesan kesalahan itu tidak masuk akal bagi saya. SELinux adalah penjelasan yang mungkin. Anda mungkin melihat lebih dekat apa yang terjadi dengan memulai tcpdump melalui strace:

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

Anda harus mengubah mode direktori di mana Anda menjalankan tcpdump.

chmod 777

Sekarang jalankan perintah tcpdump -vv -i -s0 -w file_name.pcap

Ini seharusnya bekerja ... !!

Michael Scofield
sumber
1
Untuk nilai-nilai 'kerja' tertentu. Anda sekarang memiliki direktori yang mencakup penangkapan paket yang mungkin berisi data sensitif terbuka di dalamnya, dapat dibaca oleh siapa saja yang memiliki akses ke host. "Hai, dokter, saya punya hangnail" tidak boleh dijawab dengan amputasi, betapapun itu menyelesaikan masalah hangnail.
DopeGhoti