我试图写一个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密码的情况下运行脚本。 如果你想让超级用户运行带有根的结果的脚本,就这样做。