簡體   English   中英

測試用戶是否可以在 Bash 中執行 sudo 的最佳方法是什么?

[英]What's the best way to test if a user can sudo in Bash?

閱讀 sudo 手冊頁,我看到 -v 標志可用於檢查用戶是否在其工作站中具有 sudo 權限。 我有一段腳本需要測試它。 如果用戶沒有 sudo 權限,它會在屏幕上打印:

Sorry, user tester may not run sudo on debian.

我怎樣才能抑制這條消息並只執行代碼的 rest?

嘗試在命令中附加>/dev/null 如果在stderr中打印消息,則使用2>/dev/null或在注釋中使用&>/dev/null將stdout和stderr重定向到null。

取決於你所說的“用戶可以 sudo”是什么意思

簡短回答:

如果can_auto_sudo=$(sudo -l -n sudo &>/dev/null; echo $?)是0,你想sudo多少就sudo多少。

長答案

  • 您需要先測試還是只處理錯誤情況?
  • 您需要知道多少,例如,sudoers 的真實用戶名是需要的有效數據。
  • 這個問題經常問幾個不同但相關的問題。 所以我會更准確地詢問這些問題,然后一一回答。

1. 這個腳本是使用 sudo 運行的嗎?

[ $EUID -eq 0 ] || exit 1 [ $EUID -eq 0 ] || exit 1 # 如果不是有效root則退出

2. 這個用戶可以使用 sudo 以 root 身份運行特定命令嗎?

sudo -l /usr/bin/program &>/dev/null || exit 2 sudo -l /usr/bin/program &>/dev/null || exit 2 # 如果它不能像 sudo 一樣運行就退出

3. 這個用戶可以在沒有交互的情況下運行 sudo 嗎?

sudo -l -n /usr/bin/program &>/dev/null || exit 3 sudo -l -n /usr/bin/program &>/dev/null || exit 3 # 如果需要交互則退出

4.我可以提前檢查所有這些嗎?

`sudo -ll -U $USER # 告訴你用戶可以使用 sudo 運行哪些命令(必須自己解析)

5. 腳本是用 sudo 運行還是用 root 運行?

[[ "$(printenv SUDO_USER)" = "" ]] || echo "$SUDO_USER is sudoing!" && exit 5

使用 sudo -l 或 --list 根據手冊頁,sudo 可以與 -l 或 --list 一起使用以獲取任何特定用戶允許和禁止命令的列表。

語法為:sudo -l [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]

如果我們使用 sudo --list 而沒有任何 arguments,那么它將為執行 sudo 命令的用戶打印允許和禁止命令的列表

sudo --list

用戶 root 可以在客戶端運行以下命令: (ALL) ALL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM