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

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

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

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

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

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

答案1

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

id -u

如果结果为“0”,则表示脚本正在以 root 身份运行,或者正在使用 sudo。您可以通过以下方式运行检查:

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

答案2

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

chown root:root file

并将权限设置为 700

chmod 700 file

您将完成同样的事情 - 无需以 sudo 身份运行的建议。

但为了完整性,我还是会发布这个答案。

答案3

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

if [[ $EUID -ne 0 ]]; then
    echo "$0 is not running as root. Try using sudo."
    exit 2
fi

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

答案4

您的目的是什么,是告知用户他们应该以 root 身份运行脚本还是以某种安全预防措施运行?

如果您只是想通知用户,那么任何 uid 建议都可以,但它们作为安全预防措施就像马身上的轮胎一样有用 - 没有什么可以阻止用户复制脚本,取出 if 语句并运行它。

如果这是一个安全问题,那么脚本应该设置为 700,由 root:root 拥有,这样其他任何用户都无法读取或执行它。

相关内容