我有一个在文本模式下运行iftop
的脚本,将输出减少到我关注的范围,并将其与date
命令的输出一起保存到文本文件中(我随着时间的推移监视各种接口上的网络使用情况。我遇到的唯一问题是我试图通过crontab每15分钟运行一次脚本,为了运行iftop
命令,我需要sudo权限。有没有人知道某些方法来更改iftop
的权限以使其成为所以我不需要sudo权限?
或者,如果我可以让脚本能够使用sudo运行命令,我也可以。我尝试通过sudo visudo
将脚本添加到sudoers文件并添加以下行:
user ALL=(ALL) NOPASSWD: /home/user/network_usage.sh
但是这不起作用......也许是从crontab执行的结果?
谢谢,
-Eric
答案 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运行可执行文件。
无论采取何种方法,都要非常小心。
答案 2 :(得分:0)
更精细的方法是使用:
# setcap cap_net_raw=eip $(which iftop)
这允许iftop捕获数据包,但不赋予进程完整的root特权。如果出现安全问题或带有“ iftop”错误,则其副作用将受到更大的限制。