Ok, he resuelto el misterio. Síganme mientras desentrañamos TCPDump de Funtoo y el archivo pcap Mystery of the Missing .
Solía strace para ver qué está pasando y las líneas relevantes son:
chroot("/var/lib/tcpdump") = 0
chdir("/") = 0
--- SNIP ---
open("/tmp/lol.wat", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)
Entonces...
lance ~ # ls /var/lib/tcpdump/
blah blah.cap irc.cap pyhole
¡Hey Mira! ¡Todos los archivos cap que intenté crear!
Después de echar un vistazo a las banderas de uso con las que se crea tcpdump de forma predeterminada, veo esto:
lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges
Entonces, ¿por qué hacerlo de esta manera? Mi teoría es algo como esto:
- Muchas aplicaciones que interactúan con el tráfico de red sin procesar deben ejecutarse como root.
- El tráfico de red sin procesar tiene una gran variedad de valores válidos e inválidos en estado salvaje.
- Existen muchos exploits para esas aplicaciones. (Wireshark, Ethereal, tcpdump, y otros)
- Por lo tanto, tcpdump toma acceso a la interfaz de red mientras es root, se encerra en sí mismo
/var/lib/tcpdump
, luego suelta los privilegios de root y comienza la captura.
Como resultado, cuando especifiqué ./blah
o blah
funcionó bien. Pero /tmp/blah
no lo hizo porque /var/lib/tcpdump/tmp
no existe.
Una característica clara de todo esto es: cuando se usa el indicador suid para instalar tcpdump SetUID, puede otorgar a los usuarios acceso con el tcpdump
grupo sin darles acceso a sudo o root. Los posibles usos incluyen un cuadro de captura para los ingenieros o investigadores de su red.
Solo desearía que Gentoo / Funtoo hubiera tenido un mensaje en la instalación que dijera todo esto.
tl; dr: Gentoo / Funtoo puso sus archivos pcap /var/lib/tcpdump
.