tcpdump: out.pcap: Odmowa uprawnień

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

Dlaczego dostaję błąd?

Co powinienem zrobić?

chobo
źródło

Odpowiedzi:

21

próbowałem na Centos 5, nadal tak samo, nawet na tmp lub folderze głównym. ze strony podręcznika tcpdump uprawnienia są usuwane, gdy są używane z opcją -Z (domyślnie włączone) przed otwarciem pierwszego pliku zapisu. ponieważ określono „-C 1”, odmowa dostępu występuje z powodu rozmiaru pliku osiągniętego już 1, a podczas tworzenia nowego pliku pojawi się błąd odmowy uprawnień. więc po prostu określ użytkownika -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)                           = ?

widać wynik strace powyżej, tcpdump upuścił uprawnienia na użytkownika i grupę pcap (77).

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

Ze strony man 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 ]

Określ konkretnego użytkownika za pomocą opcji -Z

# 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
źródło
8

Spróbuj uruchomić polecenie z /tmpdowolnego katalogu z możliwością zapisu na świecie. Pamiętam, że miałem problemy z tcpdump w katalogach, które nie są zapisywane na całym świecie, nie mam pojęcia, dlaczego - :)

         cd /tmp
         tcpdump -i p3p1 -n -w out.pcap -C 16 
Daniel t.
źródło
5

Twój tcpdump upuszcza uprawnienia dla użytkownika 'tcpdump', sprawdź stronę podręcznika (domyślnym jest „-Z tcpdump”, a użytkownik tcpdump nie ma uprawnień do zapisu w katalogu głównym root). Jak powiedział ci Daniel T., uruchom przechwytywanie w katalogu do zapisu na świecie, takim jak / tmp, lub przynajmniej w katalogu, w którym masz uprawnienia do zapisu użytkownika lub grupy „tcpdump”.

Mark R.
źródło
5

Kiedy natknąłem się na ten Permission deniedproblem, okazało się, że .capzamiast tego dodałem rozszerzenie pliku .pcap. Jak zauważył RichL w komentarzach, /etc/apparmor.d/usr.sbin.tcpdumppowoduje to profil AppArmor na 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
pisklęta
źródło
5
Okazuje się, że profil AppArmor dla Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) pozwala tylko plikom binarnym tcpdump zapisywać do plików z rozszerzeniem .pcap. AppArmor jest domyślnie włączony w Ubuntu, co mnie złapało.
Bogaty L
3

Czy SELinux działa? Sprawdź wpisując terminal:

/usr/sbin/getenforce

Jeśli to mówi Enforcing, możesz spróbować wyłączyć SELinux i spróbować ponownie tcpdump, aby sprawdzić, czy SE go zatrzymał.

mako_reactor
źródło
@Hauke ​​Laging Z jego wyjściowej wersji bash wydaje się, że uruchamia polecenie z katalogu głównego root'a.
mako_reactor
1

Komunikat o błędzie nie ma dla mnie większego sensu. SELinux jest jednak możliwym wyjaśnieniem. Możesz przyjrzeć się temu, co się dzieje, uruchamiając tcpdump przez strace:

strace tcpdump -i p3p1 -n -w out.pcap -C 16
Hauke ​​Laging
źródło
1

powinieneś zmienić tryb katalogu, w którym działasz tcpdump.

chmod 777

Teraz uruchom polecenie tcpdump -vv -i any -s0 -w nazwa_pliku.pcap

Powinno działać ... !!

Michael Scofield
źródło
1
Dla niektórych wartości „pracy”. Masz teraz katalog, który zawiera przechwytywanie pakietów, które może również zawierać ujawnione wrażliwe dane, które mogą odczytać każdy, kto ma dostęp do hosta. „Hej, doktorze, mam haczyk” nie należy na nie amputować, niezależnie od tego, jak całkowicie to rozwiązuje problem haczyka.
DopeGhoti