我正在编写一个需要根级权限的脚本,我想让它这样做,如果脚本不是以根身份运行,它只是回显“请以根身份运行”并退出。

下面是我正在寻找的一些伪代码:

if (whoami != root)
  then echo "Please run as root"

  else (do stuff)
fi

exit

我怎样才能最好地(干净和安全地)完成这个任务呢?谢谢!

啊,只是澄清一下:(做东西)部分将涉及运行本身需要root的命令。因此,作为一个普通用户运行它只会出现一个错误。这只是为了干净地运行一个需要根命令的脚本,而不需要在脚本中使用sudo,我只是在寻找一些语法糖。


当前回答

已经给出了一些答案,但似乎最好的方法是使用:

id - u 如果以root身份运行,将返回id为0。

这似乎比其他方法更可靠,即使通过sudo运行脚本,它似乎也会返回一个id为0。

其他回答

正如@ wrkken在他的评论中提到的,id -u是一个更好的根检查。

此外,通过正确使用sudo,您可以检查脚本,看看它是否以根用户身份运行。如果不是,让它通过sudo收回自己,然后以根权限运行。

根据脚本的功能,另一个选项可能是为脚本可能需要的任何专门命令设置一个sudo条目。

我检查的根用户,运行在Bash:

#!/bin/bash

if [ "$UID" -eq 0 ]; then
    echo "You are root."
else
    echo "You are just an ordinary user." >&2
fi

使用:id -u, $EUID和whoami的问题是,当我伪造根时,它们都给出了假阳性,就像这样:

$ fakeroot

id:

$ id -u
0

$ EUID:

$ echo $EUID
0

显示本用户信息:

$ whoami
root

那么一个可靠的(和黑客)方法是验证用户是否有权访问/根目录:

$ ls /root >/dev/null 2>&1 && is_root=true || is_root=false; echo "$is_root"

1-阅读官方的GNU Linux文档,有很多正确的方法。

2-确保你把shell签名,以避免错误解释:

#!/bin/bash

3-这是我的剧本

#!/bin/bash 

if [[ $EUID > 0 ]]; then  
  echo "Please run as root/sudo"
  exit 1
else
  #do your stuff
fi

让脚本只能由root用户运行的一个简单方法是使用shebang启动脚本:

#!/bin/su root