[英]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
您可以使用它來檢測應用程序是否在fakeroot中運行, 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
在上面的例子中,我將嘗試在根目錄中創建一個文件,如果我不是root用戶並且我沒有權限它會給出錯誤,我將該錯誤重定向到/ dev / null。
如果用戶具有該權限,則將創建該文件。 然后使用stat獲取該文件的用戶ID,並將其存儲到變量uid中。
在if條件中使用該變量我將檢查。
如果將創建臨時文件,則rm命令將刪除該文件。
但請確保根目錄中尚不存在該文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.