tcpdump: out.pcap: permiso denegado

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

¿Por qué me sale un error?

¿Qué tengo que hacer?

chobo
fuente

Respuestas:

21

Probé en Centos 5, que sigue siendo el mismo incluso en tmp o en la carpeta raíz. desde la página de manual de tcpdump, los privilegios se eliminan cuando se usan con la opción -Z (habilitada de manera predeterminada) antes de abrir el primer archivo guardado. debido a que especificó "-C 1", el permiso denegado se produce debido a que el tamaño del archivo ya alcanzó 1, y cuando crea un nuevo archivo, generará un error de permiso denegado. así que solo especifique el usuario -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)                           = ?

puede ver el resultado de strace arriba, tcpdump dejó caer los privilegios en el usuario y el grupo pcap (77).

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

Desde la página de manual de 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 ]

Especificar usuario específico con usuario -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
fuente
8

Intente ejecutar el comando desde /tmpo cualquier otro directorio de escritura mundial. Recuerdo haber tenido problemas con tcpdump en directorios que no se pueden escribir en todo el mundo, no tengo idea de por qué - :)

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

Su tcpdump está dejando caer privilegios para el usuario 'tcpdump', verifique la página de manual ("-Z tcpdump" es el valor predeterminado y el usuario tcpdump no tiene permisos para escribir en el directorio raíz de la raíz). Como le dijo Daniel T., ejecute su captura en un directorio de escritura mundial como / tmp, o al menos en un directorio donde haya otorgado permisos de escritura al usuario o al grupo 'tcpdump'.

Mark R
fuente
5

Cuando me encontré con este Permission deniedproblema, resultó que estaba poniendo una .capextensión en el archivo en lugar de .pcap. Como RichL señaló en los comentarios, el perfil de AppArmor en Ubuntu /etc/apparmor.d/usr.sbin.tcpdumpcausa esto.

  # 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
polluelos
fuente
55
Resulta que el perfil de AppArmor para Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) solo permite que el binario tcpdump escriba en archivos con una extensión .pcap. AppArmor está activado por defecto en Ubuntu, lo que me sorprendió.
Rich L
3

¿Se está ejecutando SELinux? Verifique escribiendo es terminal:

/usr/sbin/getenforce

Si dice Enforcing, puede intentar deshabilitar SELinux y probar tcpdump nuevamente, para ver si SE lo estaba deteniendo.

mako_reactor
fuente
@Hauke ​​Laging Desde su salida de bash, parece que está ejecutando el comando desde el directorio de inicio de root.
mako_reactor
1

El mensaje de error no tiene mucho sentido para mí. Sin embargo, SELinux es una posible explicación. Puede ver más de cerca lo que sucede al iniciar tcpdump a través de strace:

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

debe cambiar el modo de directorio en el que ejecuta tcpdump.

chmod 777

Ahora ejecute el comando tcpdump -vv -i any -s0 -w file_name.pcap

Deberia de funcionar ...!!

Michael Scofield
fuente
1
Para ciertos valores de 'trabajo'. Ahora tiene un directorio que incluye la captura de paquetes que puede contener datos confidenciales expuestos, legibles por cualquier persona con acceso al host. "Hola, doctor, tengo una uña" no debe responderse con amputación, sin importar cuán completamente resuelva el problema de la uña.
DopeGhoti