
(最初發佈在 Stack Overflow 上)。他們建議我試試這裡。這是原始帖子:
見標題。我想要一個可以讓我查詢 sudo 的命令。理想情況下,如果我仍然有 sudo,它將返回成功;如果 sudo 已過期,它將返回 false。獲得剩餘的時間可能也很有用(儘管如果我擔心的話,我可以sudo -v
重新驗證。)哦,它不應該要求輸入密碼。
我發現的最接近的是sudo -n true
,但該-n
選項僅出現在我工作的 Centos 5 機器上。-n
如果必須要求輸入密碼,則會失敗。還有其他方法可以實現此功能嗎?假設我實際上在所有使用的機器上都沒有 root 權限,所以我無法根據自己的喜好安裝新版本的 sudo。
為了值得我這樣做,這樣我就可以得到指示 sudo 狀態的提示。我喜歡知道哪些終端可以主動使用 sudo。我還有一個提示,當我是 root 時會改變顏色,但我不經常使用 root,所以它的用途有限。
答案1
該-n
選項在較新版本的 中可用sudo
,但正如您所說,這不是選項。除了嘗試sudo
並查看它是否返回並提示輸入密碼之外,沒有真正的方法可以完成您正在尋找的操作。如果您關心的是想要一個視覺指示,為什麼不開始執行sudo /bin/bash
root bash 會話呢?請注意,這是不安全的,但如果有人意識到您對 sudo 的提示更改,這也有點不安全。
答案2
我知道這是一個非常老的問題,但這是我今天在腳本中所做的。假設 sudo 意味著能夠以 sudo 的方式運行任何命令(或至少是正常運行時間)
CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1 | grep "load" | wc -l) 如果 [ ${CAN_I_RUN_SUDO} -gt 0 ] 然後 echo "我可以執行 sudo 指令" 別的 echo "我無法執行 Sudo 指令" 菲
但是,如果您的使用者在 中受到限制visudo
,則此檢查還不夠,例如,如果您的使用者只能使用 make 命令。嘗試執行一些您知道會起作用的命令。
您可以新增過濾器grep -v Sorry
,例如:
$(sudo -n uptime 2>&1 | grep "load" | grep -v Sorry | wc -l)
為了避免這些誤報。
答案3
為了簡化@wags007給的答案
if sudo -n true
then
sudo id
else
echo "sorry, but did not want to bother you"
fi
然而,如果在你的https://www.sudo.ws/man/1.8.15/sudoers.man.html根據您的配置,defaults mail_badpass
每次結果為 false 的測試都會發送一封郵件(會提示)。為了避免這種麻煩,請將 sudoers 檔案的該部分更改為
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
因此,除 /bin/true 之外的所有命令都會發送安全警報郵件。是的,現在有人可以透過sudo true
無限次呼叫來嘗試暴力破解密碼,而無需發送任何安全警報郵件。
注意:請務必使用visudo
您最喜歡的編輯器來編輯 sudoers 檔案。如果不這樣做,您就有被拒之門外的風險。
答案4
根據 sudo 手冊,sudo 會話是根據時間戳檔案 ( /usr/lib/sudo/<username>
) 確定的,因此您可以透過檢查時間戳檔案的日期/時間來計算還剩多少時間。然而,在我的系統中,時間戳文件實際上是一個目錄,並且有三個文件,其中包含神秘內容(還有一些奇怪的時間戳,但/usr/lib/sudo/<username>
似乎有一個時間戳與我給 sudo 密碼的時間一致)我認為/usr/lib/sudo/<username>/0
有最近執行的時間戳記sudo
。