BASH:检查用户是否是root用户

问题描述 投票:4回答:2

如何在BASH脚本中检查用户是否为root用户?

我知道我可以使用

[[ $UID -eq 0 ]] || echo "Not root"

要么

[[ $EUID -eq 0 ]] || echo "Not root"

但是如果脚本是通过fakeroot调用的,那么UID和EUID都是0(当然,因为fakeroot伪造了root权限)。

但有没有办法检查用户是否是root用户?没有尝试做只有root可以做的事情(即在/中创建一个文件)?

linux bash root privileges
2个回答
7
投票

Fakeroot设置包含LD_LIBRARY_PATH路径的自定义libfakeroot。例如:

/usr/lib/x86_64-linux-gnu/libfakeroot:/usr/lib64/libfakeroot:/usr/lib32/libfakeroot

您可以使用它来检测应用程序是否在fakeroot内运行迭代路径并查找libfakeroot

示例代码:

IS_FAKEROOT=false

for path in ${LD_LIBRARY_PATH//:/ }; do
        if [[ "$path" == *libfakeroot ]]; then
                IS_FAKEROOT=true
                break
        fi
done

echo "$IS_FAKEROOT"

-1
投票

在这里,下面的脚本将发现用户是否是root用户。

#!/bin/bash
touch /checkroot 2>/dev/null

uid=`stat -c "%u" /checkroot 2>/dev/null`

if [ "$uid" = "0" ]
then
    echo "Root user"

else
    echo "Not a root user"
fi

rm /checkroot 2>/dev/null

在上面的例子中,我将尝试在根目录中创建一个文件,如果我不是root用户并且我没有权限它会给出错误,我将该错误重定向到/ dev / null。

如果用户具有该权限,则将创建该文件。然后使用stat获取该文件的用户ID,并将其存储到变量uid中。

在if条件中使用该变量我将检查。

如果将创建临时文件,则rm命令将删除该文件。

但请确保根目录中尚不存在该文件。

© www.soinside.com 2019 - 2024. All rights reserved.