在我的公司,允许一些命令与sudo一起运行,例如tcpdump。别人没有。
我希望运行tcpdump一段时间,然后停止它。 当我运行tcpdump时,我可以用Ctrl + C中止它
我写了一个像这样的shell脚本 -
#!/bin/sh
sudo tcpdump -ieth1 -w ~/dump.bin
sleep 5
kill -2 $!
它确实不起作用。 tcpdump的过程以root身份运行,当前用户是普通帐户。
我的问题是:有没有办法在bash脚本中执行ctrl c的等效操作?。
编辑:
ps:作为我公司的安全政策,我不能以root身份运行kill。
答案 0 :(得分:8)
尝试-Z
的{{1}}选项。它指示tcpdump删除root权限并以参数中指定的用户身份运行。
tcpdump
现在尝试杀死该过程。
答案 1 :(得分:5)
只需运行kill
到sudo
:
sudo kill -2 $!
这样kill
进程就有权将信号发送到以root身份运行的进程。
答案 2 :(得分:1)
timeout命令也会在很长时间后终止程序。 sudo timeout 5 tcpdump -ieth1 -w ~/dump.bin
应该完成与脚本相同的事情。
答案 3 :(得分:0)
sudo tcpdump -ieth1 -w ~/dump.bin
会阻止你的脚本,你需要把它放到后台:
sudo tcpdump -ieth1 -w ~/dump.bin &
这和answer from Blagovest应该这样做。
答案 4 :(得分:0)
sudo tcpdump -Z root -w ~/dump.bin -n -i eth0 -G 300 -W 1
G - 超时秒(超时后命令自动被杀) Z - 删除root并以用户权限运行 W - 要保存的数字文件(作为拆分文件)
答案 5 :(得分:0)
对于没有特殊开关(例如transferred size
)的程序,如果您可以更改sudoers文件,这是一种解决方案:
-Z
我要做的就是允许使用sudo myprogram &
sleep 5
sudo pkill myprogram
并添加以下行来无密码地运行pkill myprogram
:
visudo
让sudo杀死任何程序的危险性较小。