bash脚本应该使用sudo还是假设sudo?

时间:2014-07-25 05:37:05

标签: linux bash permissions sudo

哪种模式更可取:

#!/bin/bash
echo Installing blah
apt-get install -y blah

...如果没有root权限运行会失败,或者:

#!/bin/bash
echo Installing blah
sudo apt-get install -y blah

...只要用户具有sudo访问权限,它就会成功。

我倾向于使用第二种模式,但它似乎很少见,所以我问它的缺点是什么。我看到的好处是:

  • 明确哪些命令实际上需要超级用户权限才能运行(如果读者想要将脚本拆开则很有用)
  • 为用户保存一些按键。

我认为缺点包括使用root权限可能会令人惊讶("我没有输入sudo,所以我没想到像apt-get这样运行....&#34)。还有什么?

3 个答案:

答案 0 :(得分:2)

我更喜欢第二种模式, 因为使用sudo运行一些命令比使用root权限运行整个脚本要好一些,其中一些命令不必具有root访问权限,因此如果你使用root用户执行这些命令,那么输出将再次需要root访问权限,或者你将拥有root权限改变所有权。 所以我更喜欢第二种方法,其中sudo是必要的,否则去本地用户。

答案 1 :(得分:2)

您可以随时测试用户是否为root用户(id -u获取当前用户的uid,0为root用户),如果不是,则运行sudo -

#!/bin/bash

echo Installing blah
CMD=""
if [ "$(id -u)" != "0" ]; then
  CMD="sudo"
fi
${CMD} apt-get install -y blah

如果它们不是root,则更常见的方法是退出错误条件

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
  echo "sudo $0 (must run as root)"
  exit 1
fi
echo Installing blah
apt-get install -y blah

答案 2 :(得分:0)

第二个选项是正确的选项。不需要root访问权限的命令不应仅以root身份运行以简化脚本。需要root访问权限(或任何特定用户访问)的命令应该由sudo运行。为清楚起见,您可以使用-p sudo选项来显示自定义提示,该提示可以准确解释用户被要求输入密码的原因。

选项二也是首选,因为sudo具有高度可配置性,并且用户可能已经拥有使用sudo 运行特定命令的权限,而无需密码,因此&#39 ;用户不会因密码提示而感到不便。在没有密码的情况下,允许用户sudo任意命令(例如您的脚本)的可能性较小。