安装脚本 - sudo 授权兼容性?

安装脚本 - sudo 授权兼容性?

我目前正在更新一些脚本,并计划发布一些有用的脚本,以便其他人可以使用它们(因此它们需要在各种机器上工作而不会崩溃,并且不会破坏任何东西)。

其中之一在 Fedora 机器上添加了 chromiumpepflash 插件和其他一些东西 - 我最初将脚本制作为俄罗斯软呢帽的事当时这样做似乎不可靠,需要一堆烦人的依赖项,而且有时已经过时了。我的脚本应该做我认为的ubuntu 的脚本确实 - 使用 chrome 包并提取插件,因此可以合法地重新分发。

一旦它弄清楚它在做什么,它需要使用类似于此的复制命令将内容复制到 chromium 安装等(这在我的 Fedora 21 机器上运行良好):

sudo cp -riv ${tmpdir}/* ${location}/

${tmpdir}可以在哪里/tmp/tmp.IOfylQBAHT等等,并且${location}可以是/usr/lib64/chromium-browser/- 两者都根据脚本运行的设置以及使用的选项而有所不同。通常需要使用两个或三个复制命令。

我的问题是我认为并非所有系统都使用sudo(有些系统您必须su使用sudo 未安装或设置,并且在某些系统上,用户可能根本没有 root 权限,等等),所以我想知道我应该做什么 - 例如

  • 使用sudo并希望一切顺利
  • 使用一些奇怪的东西,例如timeout 2 sudo -v > /dev/null 2>&1检查$?用户是否可以使用 sudo 作为 root 执行某些操作 - 如果他们无法退出并显示类似消息To finish installation, please run 'cp -riv ${tmpdir}/* ${location}/' as root- 如果可以,请继续。(如果用户尝试使用 sudo,测试命令可能会在某些系统上导致臭名昭著的“将报告此事件”的问题 - 它还可能会延长用户的超时时间或其他......来源
  • 只需退出并显示后一点的消息(注意,它将被echo编辑,因此它将${tmpdir}用适当的位置替换等)
  • 确保用户以 root 身份运行脚本 - 例如:

    if [ "$(whoami)" != "root" ]; then echo -e "\e[31mERROR: This needs to be run as root\e[0m"; exit 1 ; fi
    
  • 还有别的事:)

答案1

我个人不会对 做任何假设sudo,就像放入sudo脚本是一个坏主意一样。恕我直言,您的第四个建议(检查脚本是否以 root 身份运行)是最好的。只是我更喜欢检查有效用户 ID 而不是其名称:

[ -n "$EUID" ] && [ $EUID -eq 0 ] || <not root, exit>

这会将选择权留给用户,即使用哪个超级用户工具来运行脚本。

相关内容