我在终端中运行以下命令。
sudo tcpdump -c 2 -w /tmp/z.pcap icmp
然后在终端中运行以下命令。
ping 8.8.8.8
生成的文件属于用户 tcpdump,而不是 root。
$ stat /tmp/z.pcap
File: /tmp/z.pcap
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4068722 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 115/ tcpdump) Gid: ( 120/ tcpdump)
Access: 2021-02-25 10:05:52.910772287 -0500
Modify: 2021-02-25 10:06:00.102859691 -0500
Change: 2021-02-25 10:06:00.102859691 -0500
Birth: 2021-02-25 10:05:52.910772287 -0500
命令 tcpdump 属于 root。为什么生成的文件不属于 root?
$ ls -l $(which tcpdump)
-rwxr-xr-x 1 root root 1261512 2021/01/15-17:41:47 /usr/bin/tcpdump
答案1
请参阅man tcpdump
。一般来说,如果没有必要,最好不要以 root 身份运行,因此开发人员补充道:
-Z user --relinquish-privileges=user If tcpdump is running as root, after opening the capture device or input savefile, change the user ID to user and the group ID to the primary group of user. This behavior is enabled by default (-Z tcpdump), and can be disabled by -Z root.
换句话说:tcpdump 一旦生成,就不需要保留 root 权限,因此它会放弃这些权限。
答案2
因为tcpdump
will 将产生一个由 拥有的子进程tcpdump
:
$ ps auf | grep [t]cpdump
root 47749 0.0 0.0 16432 7264 pts/1 S+ 16:16 0:00 \_ sudo tcpdump -c 2 -w /tmp/z.pcap icmp
tcpdump 47750 0.0 0.0 11084 6252 pts/1 S+ 16:16 0:00 \_ tcpdump -c 2 -w /tmp/z.pcap icmp
它会放弃权限,因为它不再需要它。使用-Z
选项来更改该行为。请参阅这个答案了解详情。