akr*_*aut 8 networking filesystems tcpdump
在调试一个似乎无法连接的python irc bot的过程中,我想“我知道,我只是tcpdump它,看看它在做什么。” 所以我像往常一样运行 tcpdump ,它说它捕获了数据包,但实际上并没有写入 cap 文件。
akraut@lance ~/pcaps $ sudo tcpdump -w pyhole -s 0 "port 6667"
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C17 packets captured
17 packets received by filter
0 packets dropped by kernel
4294966881 packets dropped by interface
akraut@lance ~/pcaps $ ls -la
total 8
drwxr-xr-x 2 akraut akraut 4096 Feb 6 11:50 .
drwxr-xr-x 8 akraut akraut 4096 Feb 6 11:50 ..
akraut@lance ~/pcaps $
Run Code Online (Sandbox Code Playgroud)
akr*_*aut 10
好的,我已经解开了这个谜团。跟随我一起解开Funtoo 的 TCPDump 和丢失 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)
Run Code Online (Sandbox Code Playgroud)
所以...
lance ~ # ls /var/lib/tcpdump/
blah blah.cap irc.cap pyhole
Run Code Online (Sandbox Code Playgroud)
你看!我试图创建的所有上限文件!
在查看了默认情况下使用 tcpdump 构建的使用标志后,我看到了:
lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges
Run Code Online (Sandbox Code Playgroud)
那么为什么要这样做呢?我的理论是这样的:
/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
.
归档时间: |
|
查看次数: |
10081 次 |
最近记录: |