如何执行“iftop”没有sudo

我有一个脚本,在文本模式下运行iftop ,减less输出到我所关心的,并将其与date命令的输出保存到一个文本文件(我正在监视不同接口上的networking使用率随着时间的推移) 。 唯一的问题是我试图通过crontab每15分钟运行我的脚本,并且为了运行iftop命令我需要sudo权限。 有没有人知道一些方法来改变iftop的权限,所以我不需要sudo权限?

另外,如果我能赋予脚本以sudo运行这个命令的能力,我也可以。 我尝试通过sudo visudo将脚本添加到sudoers文件中,然后添加以下行:

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

但没有工作…也许是从crontab执行的结果?

谢谢,

-Eric

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

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

 sudo chown root /home/user/network_usage.sh sudo chmod +sw /home/user/network_usage.sh 

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

不管你采取什么方法,要非常小心

  • 让您的脚本拥有root权限,不要让任何其他用户写入,否则可以缓解权限升级。
  • 注意你的setuid程序的副作用。 如果脚本具有setuid并且可能创建或修改文件,则其他人可能会使用它来修改或创建它们不应该使用的文件。 在给任何你没有写的程序给予setuid之前,务必检查手册。

如果您在机器上拥有root权限,那么快速和肮脏的方式:

 chmod +s $(which iftop) 

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