Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

Cor*_*tek 32 scripting permissions bash root

我正在尝试编写一个 bash 脚本(在 Ubuntu 中),它将使用 tar 备份目录。

如何检查脚本,使其只能以 root 身份(或使用 sudo)运行?

例如,如果用户运行该脚本,则应该说该脚本必须以 sudo 权限运行,然后退出。如果脚本以 root 身份执行,它将继续通过检查。

我知道必须有一个简单的解决方案,我只是无法通过谷歌搜索找到它。

Sco*_*ack 43

要提取有效的 uid,请使用以下命令:

id -u
Run Code Online (Sandbox Code Playgroud)

如果结果为“0”,则脚本要么以 root 身份运行,要么使用 sudo。您可以通过执行以下操作来运行检查:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi
Run Code Online (Sandbox Code Playgroud)

  • 任何试图运行脚本的“狡猾”都不会被您使用 id 的完整路径阻止。 (7认同)
  • 我建议完全限定 id 的路径(例如,/usr/bin/id)。否则,狡猾的用户可以编写自己的脚本/二进制文件,始终返回 0,然后将其放在执行用户路径中较早存在的位置。 (6认同)
  • 这并没有解决“sudo”要求。 (2认同)

Bre*_*nt 19

我假设您知道通过将所有权更改为 root

chown root:root file

并将权限设置为 700

chmod 700 file

你会完成同样的事情 - 没有建议以 sudo 运行。

但为了完整起见,我会发布这个答案。

  • 这是比公认的答案更合适的解决方案。- 我的 $0.02 (3认同)

neu*_*aus 5

bash 变量$EUID显示脚本正在运行的有效 UID,如果您想确保脚本以 root 身份运行,请检查是否$EUID包含值 0:

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi
Run Code Online (Sandbox Code Playgroud)

这比/usr/bin/id(对于 bash 脚本!)的解决方案更好,因为它不需要外部命令。

  • 除了退出之外,还可以通过将 `echo` 行替换为 `sudo "$0" "$@"` 来提示用户进行 sudo 登录,并将 `exit 2` 替换为 `exit $?`。 (2认同)