我正在尝试编写bash脚本(在Ubuntu中),该脚本将使用tar备份目录。
如何在脚本中进行检查,使其只能以root身份(或使用sudo)运行?
例如,如果用户运行该脚本,则应说该脚本必须以sudo特权运行,然后退出。如果脚本以root身份执行,它将继续通过检查。
我知道必须有一个简单的解决方案,但我只是无法通过谷歌搜索找到它。
我正在尝试编写bash脚本(在Ubuntu中),该脚本将使用tar备份目录。
如何在脚本中进行检查,使其只能以root身份(或使用sudo)运行?
例如,如果用户运行该脚本,则应说该脚本必须以sudo特权运行,然后退出。如果脚本以root身份执行,它将继续通过检查。
我知道必须有一个简单的解决方案,但我只是无法通过谷歌搜索找到它。
Answers:
要提取有效的uid,请使用以下命令:
id -u
如果结果为“ 0”,则脚本以root身份或使用sudo运行。您可以通过执行以下操作来运行检查:
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo "Not running as root"
exit
fi
我假设您知道通过将所有权更改为root
chown root:root file
并将权限设置为700
chmod 700 file
您将完成相同的操作-无需建议以sudo身份运行。
但我会将此答案发布完整。
sudo git add <file>
您的目的是为了通知用户他们应该以root用户身份或某种安全预防措施运行脚本?
如果您只是想告知用户,任何uid建议都可以,但是作为安全预防措施,它们就像骑轮胎一样有用-阻止用户复制脚本,删除if语句,没有什么阻止任何事情,并继续运行它。
如果这是安全问题,则应将脚本设置为root:root拥有的700,以便其他任何用户都不可读或可执行。
您也可以使用whoami命令。
if [ ! "`whoami`" = "root" ]
then
echo "\nPlease run script as root."
exit 1
fi
bash变量$EUID
显示脚本运行所在的有效UID,如果要确保脚本以root身份运行,请检查是否$EUID
包含值0:
if [ $EUID -ne 0 ]; then
echo "$0 is not running as root. Try using sudo."
exit 2
fi
这比使用/usr/bin/id
(对于bash脚本!)的解决方案更好,因为它不需要外部命令。
echo
与线sudo "$0" "$@"
,并更换exit 2
有exit $?
。