tcpdump: out.pcap: permissão negada

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

Por que eu recebo erro?

O que devo fazer?

chobo
fonte

Respostas:

21

Eu tentei no Centos 5, ainda o mesmo, mesmo na pasta tmp ou raiz. na página do manual tcpdump, os privilégios são eliminados quando usados ​​com a opção -Z (ativada por padrão) antes de abrir o primeiro arquivo de salvamento. porque você especificou "-C 1", a permissão negada ocorre devido ao tamanho do arquivo já atingido 1 e, ao criar um novo arquivo, gera um erro de permissão negada. então basta especificar o usuário -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)                           = ?

você pode ver o resultado do rastreio acima, tcpdump descartou os privilégios no pcap de usuário e grupo (77).

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

Na página do 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 ]

Especifique usuário específico com -Z user

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

Tente executar o comando a partir de /tmpou em qualquer outro diretório gravável do mundo. Lembro-me de ter problemas com o tcpdump em diretórios que não são graváveis ​​no mundo, não tenho idéia do porquê - :)

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

Seu tcpdump está removendo privilégios para o usuário 'tcpdump', verifique a página do manual ("-Z tcpdump" é o padrão e o usuário tcpdump não tem permissão para gravar no homedir do root). Como Daniel T. disse, execute sua captura em um diretório gravável em todo o mundo como / tmp, ou pelo menos em um diretório no qual você tenha dado permissões de gravação ao usuário ou grupo 'tcpdump'.

Mark R
fonte
5

Quando me deparei com esse Permission deniedproblema, era porque eu estava colocando uma .capextensão no arquivo em vez de .pcap. Como RichL apontou nos comentários, o perfil do AppArmor no Ubuntu /etc/apparmor.d/usr.sbin.tcpdumpcausa isso.

  # 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
pintinhos
fonte
5
Acontece que o perfil do AppArmor para Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) permite apenas que o binário do tcpdump grave em arquivos com extensão .pcap. O AppArmor está ativado por padrão no Ubuntu, o que me chamou a atenção.
Rich L
3

O SELinux está em execução? Verifique digitando o terminal:

/usr/sbin/getenforce

Se estiver escrito Enforcing, você pode tentar desativar o SELinux e tentar o tcpdump novamente, para ver se o SE estava parando.

mako_reactor
fonte
@Hauke ​​Laging A partir de sua saída do bash, parece que ele está executando o comando no diretório inicial do root.
Mako_reactor
1

A mensagem de erro não faz muito sentido para mim. O SELinux é uma explicação possível. Você pode dar uma olhada no que está acontecendo iniciando o tcpdump através do strace:

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

você deve alterar o modo de diretório no qual você está executando o tcpdump.

chmod 777

Agora execute o comando tcpdump -vv -i any -s0 -w file_name.pcap

Deveria funcionar ... !!

Michael Scofield
fonte
1
Para certos valores de 'trabalho'. Agora você tem um diretório que inclui a captura de pacotes que pode conter dados confidenciais expostos, legíveis por qualquer pessoa com acesso ao host. "Ei, doutor, eu tenho uma miniatura" não deve ser respondida com amputação, não importa o quão completamente isso resolva o problema da miniatura.
DopeGhoti 23/02