如何在没有sudo的情况下执行'iftop'

时间:2016-03-17 00:17:37

标签: linux unix sudoers

我有一个在文本模式下运行iftop的脚本,将输出减少到我关注的范围,并将其与date命令的输出一起保存到文本文件中(我随着时间的推移监视各种接口上的网络使用情况。我遇到的唯一问题是我试图通过crontab每15分钟运行一次脚本,为了运行iftop命令,我需要sudo权限。有没有人知道某些方法来更改iftop的权限以使其成为所以我不需要sudo权限?

或者,如果我可以让脚本能够使用sudo运行命令,我也可以。我尝试通过sudo visudo将脚本添加到sudoers文件并添加以下行:

user ALL=(ALL) NOPASSWD: /home/user/network_usage.sh

但是这不起作用......也许是从crontab执行的结果?

谢谢,

-Eric

3 个答案:

答案 0 :(得分:2)

如果您在计算机上拥有root访问权限,则可以快速而肮脏:

chmod +s $(which iftop)

无论是谁调用它,都会使它以root权限运行。 但我仍然认为你的sudo喜欢应该工作。

答案 1 :(得分:1)

您可以使用root的crontab来运行脚​​本。 如果您使用crontab -e代替sudo crontab -e,则会编辑root的crontab。该文件中指定的任务将在root帐户和权限下运行。

或者,您可以为脚本文件设置setuid访问标志。为此,首先将文件的所有者更改为root,然后启用setuid,如下所示:

sudo chown root /home/user/network_usage.sh
sudo chmod +s-w /home/user/network_usage.sh

setuid位使用其所有者的有效UID运行可执行文件。

无论采取何种方法,都要非常小心

  • 让您的脚本由root拥有,不要让任何其他用户写入,否则可以减轻权限提升。
  • 请注意setuid程序的副作用。如果脚本具有setuid并且可能创建或修改文件,则其他人可能会使用它来修改或创建他们不应该使用的文件。在将setuid提供给您尚未编写的任何程序之前,请务必查看手册。

答案 2 :(得分:0)

更精细的方法是使用:

# setcap cap_net_raw=eip $(which iftop)

这允许iftop捕获数据包,但不赋予进程完整的root特权。如果出现安全问题或带有“ iftop”错误,则其副作用将受到更大的限制。

相关:https://unix.stackexchange.com/questions/189750/how-can-i-run-script-without-root-to-sniff-network-libpcap