简体   繁体   English

为什么在sudo下运行tcpdump超时不能生效?

[英]Why can't timeout take effect for tcpdump run under sudo?

I want to run the tcpdump command with a time limit of 10 seconds.我想以 10 秒的时间限制运行tcpdump命令。

timeout 10 sudo tcpdump -i eth0 -nn 'host 192.168.1.176'

It doesn't stop.它不会停止。 Why does the timeout command not take effect for tcpdump here?为什么这里的tcpdump timeout命令没有生效?

The problem is that timeout runs with your users privileges.问题是timeout以您的用户权限运行。 The sudo process escalates privileges to root (or another user), so timeout is not allowed to send SIGTERM to the child process. sudo进程将权限提升到 root(或其他用户),因此不允许timeout向子进程发送 SIGTERM。 This can be shown with strace (comments starting with # by me, as well as blank lines for readability):这可以用strace (我的注释以#开头,以及为了可读性而使用空行):

user$ strace timeout 1 sudo sleep 5
# lots of irrelevant stuff
# here, timeout sets up the timer to get a signal when the child should be terminated
rt_sigprocmask(SIG_UNBLOCK, [ALRM], NULL, 8) = 0
timer_create(CLOCK_REALTIME, {sigev_value={sival_int=1889673072, sival_ptr=0x560c70a21f70}, sigev_signo=SIGALRM, sigev_notify=SIGEV_SIGNAL}, [0]) = 0
timer_settime(0, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1, tv_nsec=0}}, NULL) = 0
wait4(12320, 0x7ffdfeb0ef0c, 0, NULL)   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)

# the signal arrives
--- SIGALRM {si_signo=SIGALRM, si_code=SI_TIMER, si_timerid=0, si_overrun=0, si_value={int=1889673072, ptr=0x560c70a21f70}} ---

# timeout tries to kill the child
kill(12320, SIGTERM)                    = -1 EPERM (Operation not permitted)
# and gets EPERM!

The fix is to run timeout with root privileges also.修复方法是也使用 root 权限运行超时。 The following will work as intended:以下将按预期工作:

user$ sudo timeout 1 sleep 5

Of course, if you already are root, it doesn't matter whether you put timeout 1 before or after the sudo in the command line.当然,如果你已经root,那么在命令行中将timeout 1放在sudo之前还是之后都没有关系。

root$ sudo timeout 1 sleep 5
root$ timeout 1 sudo sleep 5

试试这个:

sudo timeout 10 tcpdump -i eth0 -nn 'host 192.168.1.176'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM