修改权限与 Root 脚本执行。哪个更好?

修改权限与 Root 脚本执行。哪个更好?

每次挂起后,当我唤醒笔记本电脑时,它都不会连接到任何网络,必须重新启动 NetworkManager。所以,出于懒惰,我写了这个脚本一切按预期顺利进行。

我使用了一个if块来检查脚本是否始终由 root 用户执行:

if [ $(id -u) -ne 0 ]
then
    echo "ERROR : Root Priveleges Required"                                                                                       
    exit NOT_ROOT                                                                                                                 

else                                                                                                                                  
    netrestart                                                                                                                
fi

我授予此脚本此权限(执行此命令时为 root 用户):

chmod u+x netrestart

现在,当我以非 root 用户身份运行此脚本时,它会显示以下内容

bash: ./netrestart: Permission denied

然后,运行脚本sudo运行良好

sudo ./netrestart

我认为这使得脚本中的根检查变得毫无用处。现在我有两个问题:

  1. 我是否应该删除那部分代码或者仍然在脚本中使用?

  2. 有什么更好的方法以及怎样做?

    • 检查脚本中的用户是否为 root 并授予所有人执行权限,即chmod 755 netrestart
    • 在脚本本身上设置正确的所需权限,并且不包括检查用户是否是脚本内的 root 权限,即chmod 711 netrestart

答案1

我认为你的脚本可以浓缩为:

#!/bin/bash

NOT_ROOT=2
sudo service network-manager restart || exit $NOT_ROOT
if service network-manager status
then
    echo "Successfully Restarted NetworkManager"
else
    echo "ERROR : Failed to work"
    exit 1
fi

sudo将检查您的 root 访问权限并在必要时提示。此service ... status检查将更可靠地告诉您 NetworkManager 是否正常启动。

您可以向所有人授予此脚本的执行权限,并将sudo负责权限检查。

相关内容