Ok, ho risolto il mistero. Seguitemi mentre sveliamo il TCPDump di Funtoo e il File pcap Mystery of the Missing .
Ho usato strace per vedere cosa sta succedendo e le linee rilevanti sono:
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)
Così...
lance ~ # ls /var/lib/tcpdump/
blah blah.cap irc.cap pyhole
Ehi guarda! Tutti i file cap che ho provato a creare!
Dopo aver dato un'occhiata ai flag di utilizzo con cui tcpdump è costruito di default, vedo questo:
lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges
Quindi perché farlo in questo modo? La mia teoria va in questo modo:
- Molte applicazioni che interagiscono con il traffico di rete non elaborato devono essere eseguite come root.
- Il traffico di rete non elaborato presenta un'ampia varietà di valori validi e non validi in circolazione.
- Esistono molti exploit per quelle applicazioni. (Wireshark, Ethereal, tcpdump, et al)
- Pertanto, tcpdump ottiene l'accesso all'interfaccia di rete mentre si esegue il root, esegue il jailing in se stesso
/var/lib/tcpdump
, quindi rilascia i privilegi di root e inizia l'acquisizione.
Di conseguenza, quando ho specificato ./blah
o blah
ha funzionato bene. Ma /tmp/blah
non perché /var/lib/tcpdump/tmp
non esiste.
Una caratteristica laterale di tutto ciò è: quando si utilizza il flag suid per installare SetUID di tcpdump, è possibile concedere agli utenti l'accesso con il tcpdump
gruppo senza fornire loro l'accesso sudo o root. I possibili usi includono una scatola di acquisizione per i tuoi ingegneri di rete o ricercatori.
Vorrei solo che Gentoo / Funtoo avesse avuto un messaggio sull'installazione che dicesse tutto questo.
tl; dr: Gentoo / Funtoo inserisce i tuoi file pcap /var/lib/tcpdump
.