linux BASH:即使使用fakeroot [duplicate]也检查用户是否为root

o75abkj4  于 2023-02-03  发布在  Linux
关注(0)|答案(2)|浏览(139)
    • 此问题在此处已有答案**:

(21个答案)
3天前关闭。
如何在BASH脚本中检查用户是否为root用户?
我知道我可以用

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

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

但是如果脚本是通过fakeroot调用的,UID和EUID都是0(当然,因为fakeroot伪造了root权限)。
但是有没有什么方法可以检查用户是否是root?而不需要尝试做一些只有root才能做的事情(例如,在/中创建一个文件)?

goqiplq2

goqiplq21#

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

/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"
waxmsbnn

waxmsbnn2#

在这里,下面的脚本会发现用户是根或不是.

#!/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命令将删除该文件。
但要确保该文件不是已经存在于根目录中。

相关问题