我在远程机器上运行 tcpdump,并通过 SSH 将输出传输到本地机器上的 Wireshark。为了做到这一点,我必须在 tcpdump 上设置 SUID 位。
背景是,远程计算机是运行“Amazon Linux AMI 2012.09”的 Amazon EC2。在此图像上,没有 root 密码,无法以 root 身份登录。如果没有 TTY,则无法使用 sudo,因此必须设置 SUID。
在 tcpdump 上设置此位有什么实际风险?有必要这么担心吗?我是否应该在不捕获时取消设置它?
答案1
这意味着任何有权访问此计算机 shell 的人都可以使用它tcpdump
来捕获流量。当我们谈论安全时,偏执并不是坏事。您可能最终会忘记您将其设置为 suid,并且有一天您会将 shell 访问权限授予您无法完全信任的人。我相信,您不希望这样。我认为您应该考虑使用从您的帐户sudo
运行tcpdump
。可以设置sudo
不提示特定用户和特定命令输入密码。
答案2
根据您的评论请求,下面是我如何通过 sudo 将远程 tcpdump 传输到 wireshark:
ssh user@host sudo tcpdump -s0 -w - | wireshark -k -i -
注意:我添加了 s0 来捕获整个数据包。
刚刚制作了一个包装器脚本,它完全可以运行,但你只需要提供 ssh 凭据和一个可选的 tcpdump 过滤器。你可以从这里下载它这里