如何追溯使脚本以 root 身份运行?

Min*_*nix 7 root sudo shell-script

我正在编写一个 shell 脚本,它需要以 root 权限运行。

我可以检查用户是否具有 root 权限sudo -nv || echo "no sudo",但这对我没有帮助,如果他的凭据仍然由 缓存sudo,但他没有用它调用我的脚本。所以我无法对用户做出反应,而不是用 sudo 调用我的脚本。

我可以将sudo每个需要它的命令放在前面,因此只需检查用户是否具有 root 权限就足够了,但在我看来,应该有更好的解决方案。

我正在寻找一个命令,我可以将它放入我的脚本中,该命令要求用户提供 root 权限,如果提供,则执行脚本的其余部分,就好像用户首先使用 root 权限调用它一样。

我想要的是:

#!/bin/bash

if ! command; then        # what I'm looking for
    echo "This script needs root privileges."
    exit 1
fi

mv /bin/cmd1 /bin/cmd2    # requires root
Run Code Online (Sandbox Code Playgroud)

编辑了2次

mur*_*uru 15

测试您是否是 root,如果不是,请使用 重新启动sudo,例如:

#! /bin/bash

if [[ $EUID -ne 0 ]];
then
    exec sudo /bin/bash "$0" "$@"
fi
Run Code Online (Sandbox Code Playgroud)

  • 这在任何解释 #! bangline - 如果 $PATH 中有正确的 `sudo`。如果假设 bangline 被解释,那么 `/bin/bash` 位并不是真正必要的 - `exec sudo "$0" "$@"` 应该就足够了 - 并且可能对那些 POSIX 系统有益不处理 bangline 但仍然执行 `sudo` 它可能仍然会以升级的权限运行原始脚本。`sudo` 不确定的地方,POSIX 还指定了 `newgrp` 命令。 (2认同)