我正在尝试编写一个 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 拥有,这样其他任何用户都无法读取或执行它。