Хорошо, я разгадал тайну. Следуйте за мной, пока мы разгадываем TCPDump от Funtoo и файл Mystery of the Missing pcap .
Я использовал strace, чтобы увидеть, что происходит, и соответствующие строки:
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)
Так...
lance ~ # ls /var/lib/tcpdump/
blah blah.cap irc.cap pyhole
Эй смотри! Все файлы шапки, которые я пытался создать!
Посмотрев на флаги использования, с которыми по умолчанию собрана tcpdump, я вижу это:
lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges
Так почему же так? Моя теория выглядит примерно так:
- Многие приложения, которые взаимодействуют с необработанным сетевым трафиком, должны запускаться с правами root.
- Необработанный сетевой трафик имеет широкий спектр допустимых и недопустимых значений.
- Для этих приложений существует множество эксплойтов. (Wireshark, Ethereal, tcpdump и др.)
- Поэтому tcpdump получает доступ к сетевому интерфейсу, в то время как root, помещает себя в тюрьму
/var/lib/tcpdump
, затем отбрасывает привилегии root и начинает захват.
В результате когда я уточнил ./blah
или blah
все заработало нормально. Но /tmp/blah
не потому, /var/lib/tcpdump/tmp
что не существует.
Отличительной особенностью всего этого является то, что при использовании флага suid для установки tcpdump SetUID вы можете предоставить пользователям доступ с tcpdump
группой, не предоставляя им sudo или root-доступ. Возможное использование включает блок захвата для ваших сетевых инженеров или исследователей.
Я просто хотел бы, чтобы Gentoo / Funtoo получил сообщение об установке, в котором все это сказано.
tl; dr: Gentoo / Funtoo помещает ваши файлы pcap /var/lib/tcpdump
.