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

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

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

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

我知道必须有一个简单的解决scheme,我只是无法通过Googlesearchfind它。

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

id -u 

如果结果是'0',那么脚本或者以root身份运行,或者使用sudo。 您可以通过执行以下操作来运行检查:

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

我假设你知道通过改变所有权到根

chown root:root file

并将权限设置为700

chmod 700 file

你会完成同样的事情 – 没有build议作为sudo运行。

但我会发布这个答案的完整性。

你的目标是什么?告诉用户他们应该以root身份运行脚本还是作为某种安全预防措施?

如果你只是想告诉用户比任何uid的build议都好,但是作为安全防范,它们和马上的轮胎一样有用 – 没有什么能阻止用户复制脚本,取出if语句,并无论如何运行。

如果这是一个安全问题,那么该脚本应该被设置为700,由root:root拥有,以便其他用户不可读或不可执行。

你也可以使用whoami命令。

 if [ ! "`whoami`" = "root" ] then echo "\nPlease run script as root." exit 1 fi 

bashvariables$EUID显示脚本运行的有效UID,如果要确保脚本以root身份运行,请检查$EUID是否包含值0:

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

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

使脚本只能以root运行的一种简单方法是使用以下行来启动脚本:
#!/bin/su root

“#!/ bin / su root”允许超级用户模式的用户在不使用root密码的情况下运行脚本。 如果你想让超级用户运行带有根的结果的脚本,就这样做。