tcpdump : out.pcap : 권한이 거부되었습니다


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

왜 오류가 발생합니까 ??

어떻게해야합니까?

답변:


21

Centos 5에서 시도했지만 여전히 tmp 또는 root 폴더에서도 동일합니다. tcpdump 매뉴얼 페이지에서 -Z 옵션 (기본적으로 사용 가능)과 함께 사용하면 첫 번째 저장 파일을 열기 전에 권한이 삭제됩니다. "-C 1"을 지정 했으므로 파일 크기가 이미 1에 도달하여 권한 거부가 발생하며 새 파일을 작성할 때 권한 거부 오류가 발생합니다. -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)                           = ?

위의 strace 결과를 볼 수 있습니다. tcpdump는 권한을 user 및 group pcap (77)에 삭제했습니다.

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

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 ]

-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     

8

/tmp다른 쓰기 가능한 디렉토리 에서 명령을 실행하십시오 . 세계 쓰기가 불가능한 디렉토리에서 tcpdump에 문제가 있음을 기억합니다. 이유는 없습니다. :)

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

5

tcpdump가 'tcpdump'사용자에게 권한을 삭제하고 매뉴얼 페이지를 확인하십시오 ( "-Z tcpdump"가 기본값이며 tcpdump 사용자에게는 root의 homedir에 쓸 수있는 권한이 없음). Daniel T.가 말했듯이 / tmp와 같은 쓰기 가능한 디렉토리 나 최소한 사용자 또는 그룹에 'tcpdump'쓰기 권한을 부여한 디렉토리에서 캡처를 실행하십시오.


5

Permission denied문제가 발생 했을 때 .cap파일 대신 확장자를 파일에 넣는 것으로 나타났습니다 .pcap. RichL이 의견에서 지적했듯이 Ubuntu의 AppArmor 프로파일 /etc/apparmor.d/usr.sbin.tcpdump이이를 유발합니다.

  # 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
우분투 (/etc/apparmor.d/usr.sbin.tcpdump)의 AppArmor 프로파일은 tcpdump 바이너리가 확장자가 .pcap 인 파일에만 쓸 수 있도록합니다. AppArmor는 우분투에서 기본적으로 켜져 있습니다.
Rich L

3

SELinux가 실행 중입니까? 터미널을 입력하여 확인하십시오.

/usr/sbin/getenforce

이 표시되면 EnforcingSELinux를 비활성화하고 tcpdump를 다시 시도하여 SE가 중지했는지 확인할 수 있습니다.


@Hauke ​​Laging 그의 bash 출력에서 ​​루트의 홈 디렉토리에서 명령을 실행하는 것 같습니다.
mako_reactor 2:14에

1

오류 메시지는 나에게 의미가 없습니다. SELinux가 가능한 설명입니다. strace를 통해 tcpdump를 시작하여 무슨 일이 일어나고 있는지 자세히 살펴볼 수 있습니다.

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

1

tcpdump를 실행중인 디렉토리 모드를 변경해야합니다.

chmod 777

이제 tcpdump -vv -i any -s0 -w file_name.pcap 명령을 실행하십시오.

작동해야합니다 ... !!


1
'일'의 특정 가치. 이제 호스트에 액세스 할 수있는 모든 사람이 읽을 수있는 노출 된 민감한 데이터를 포함 할 수있는 패킷 캡처가 포함 된 디렉토리가 있습니다. 교수님, 교수님, 교수님은 교수형 문제를 완전히 해결하더라도 절단으로 대답해서는 안됩니다.
DopeGhoti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.