当前位置: 首页>>技术问答>>正文


脚本如何检查它是否以root身份运行?

, , ,

问题描述

我正在编写一个简单的bash脚本,但我需要它来检查它是否以root身份运行。我知道这可能是一种非常简单的方法,但我不知道如何做到这一点。

需要说明的是:编写脚本foo.sh的简单方法是什么,以便命令./foo.sh输出0,命令sudo ./foo.sh输出1

最佳解决方案

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

次佳解决方案

root用户不必命名为”root”。 whoami返回用户ID为0的第一个用户名。 $USER包含登录用户的名称,该用户可以具有用户ID 0,但名称不同。

唯一可靠的程序,用于检查帐户是否以root用户身份登录:

id -u

我使用-u作为有效用户ID,而不是-r作为真实用户ID。权限是determined的有效用户ID,而不是真实的用户ID。

Tests

/etc/passwd按给定顺序包含以下用户ID为0的用户名:

rootx
root2

root2登录,显示下一个结果:

  • whoamirootx

  • echo $USERroot2(如果程序在空的环境中启动,则返回空字符串,例如env -i sh -c 'echo $USER')

  • id -u0如您所见,其他程序在此检查中失败,只有id -u通过。

更新后的脚本如下所示:

#!/bin/bash
if ! [ $(id -u) = 0 ]; then
   echo "I am not root!"
   exit 1
fi

第三种解决方案

作为@Lekensteyn said,您应该使用有效的用户ID。你不需要在bash中调用id -u

#!/bin/bash

if [[ $EUID -ne 0 ]]; then
   echo "You must be root to do this." 1>&2
   exit 100
fi

@ geirha的评论建议使用算术评估:

#!/bin/bash

if (( EUID != 0 )); then
   echo "You must be root to do this." 1>&2
   exit 100
fi

第四种方案

您可以使用whoami命令完成此操作,该命令返回当前用户:

#!/bin/bash

if [ `whoami` != 'root' ]
  then
    echo "You must be root to do this."
    exit
fi

...

如果当前用户不是root,则运行上述操作将打印You must be root to do this.


注意:在某些情况下,另一种方法是简单地检查$USER变量:

if [ $USER != 'root' ]

第五种方案

#!/bin/bash
[[ $(id -u) != 0 ]] 
echo $?

第六种方案

考虑到效率,您可以首先测试EUID环境变量,然后,如果它不存在,则调用标准id命令:

if ((${EUID:-0} || "$(id -u)")); then
  echo You are not root.
else
  echo Hello, root.
fi

这样,由于OR快捷方式,您可以避免调用系统命令,优先查询in-memory变量。

代码重用:

function amIRoot() {
  ! ((${EUID:-0} || "$(id -u)"))
}

第七种方案

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1071.html,未经允许,请勿转载。