BASH: 检查用户是否为root
BASH: Check if user is root
如何在 BASH 脚本中检查用户是否为 root?
我知道我可以使用
[[ $UID -eq 0 ]] || echo "Not root"
或
[[ $EUID -eq 0 ]] || echo "Not root"
但如果脚本是通过 fakeroot 调用的,UID 和 EUID 都是 0(当然,因为 fakeroot 伪造了 root 权限)。
但是有什么方法可以检查用户是否是root?不尝试做只有 root 可以做的事情(即在 / 中创建文件)?
Fakeroot 设置包含 libfakeroot
路径的自定义 LD_LIBRARY_PATH
。例如:
/usr/lib/x86_64-linux-gnu/libfakeroot:/usr/lib64/libfakeroot:/usr/lib32/libfakeroot
您可以使用它来检测应用程序是否在 运行 内,通过路径迭代并寻找 libfakeroot
。
示例代码:
IS_FAKEROOT=false
for path in ${LD_LIBRARY_PATH//:/ }; do
if [[ "$path" == *libfakeroot ]]; then
IS_FAKEROOT=true
break
fi
done
echo "$IS_FAKEROOT"
在这里,下面的脚本会判断用户是否是 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
在上面的示例中,我将尝试在根目录中创建一个文件,如果我不是根用户并且我没有权限会报错,我将该错误重定向到 /dev/null.
如果用户有权限,将创建文件。然后使用 stat 获取该文件的用户 ID,并将其存储到变量 uid 中。
在 if 条件下使用那个变量我会检查。
如果创建临时文件,rm 命令将删除该文件。
但请确保根目录中不存在该文件。
如何在 BASH 脚本中检查用户是否为 root?
我知道我可以使用
[[ $UID -eq 0 ]] || echo "Not root"
或
[[ $EUID -eq 0 ]] || echo "Not root"
但如果脚本是通过 fakeroot 调用的,UID 和 EUID 都是 0(当然,因为 fakeroot 伪造了 root 权限)。
但是有什么方法可以检查用户是否是root?不尝试做只有 root 可以做的事情(即在 / 中创建文件)?
Fakeroot 设置包含 libfakeroot
路径的自定义 LD_LIBRARY_PATH
。例如:
/usr/lib/x86_64-linux-gnu/libfakeroot:/usr/lib64/libfakeroot:/usr/lib32/libfakeroot
您可以使用它来检测应用程序是否在 运行 内,通过路径迭代并寻找 libfakeroot
。
示例代码:
IS_FAKEROOT=false
for path in ${LD_LIBRARY_PATH//:/ }; do
if [[ "$path" == *libfakeroot ]]; then
IS_FAKEROOT=true
break
fi
done
echo "$IS_FAKEROOT"
在这里,下面的脚本会判断用户是否是 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
在上面的示例中,我将尝试在根目录中创建一个文件,如果我不是根用户并且我没有权限会报错,我将该错误重定向到 /dev/null.
如果用户有权限,将创建文件。然后使用 stat 获取该文件的用户 ID,并将其存储到变量 uid 中。
在 if 条件下使用那个变量我会检查。
如果创建临时文件,rm 命令将删除该文件。
但请确保根目录中不存在该文件。