當前位置: 首頁>>技術教程>>正文


sudoers – 要求簡單的解釋

問題描述

每次我希望能夠運行需要我成為 sudoer 太多次的東西時,我需要用穀歌搜索 /etc/sudoers 的格式,以再次提醒我正確的編寫方法是什麽。

現在我在我的 sudoers 文件中看到了不同的寫作風格,這是幾個月來穀歌搜索結果不同的結果。我還注意到第二個示例(如下)似乎在 XFCE 中有效,但在 Cinnamon(Gnome 3)中無效。這可能完全不相關,但我還是想一勞永逸地知道,sudoer 行的正確語法是什麽,給定示例之間有什麽區別?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

另外,所有 ALL 的用途是什麽?一個用戶,一個命令,但我需要使用 ALL 關鍵字最多 3 次?我做錯了嗎?

當然,省略 NOPASSWD: 會使您在被允許運行命令之前輸入密碼,但有一點令人困惑的是 =: 的用法,因為作為該行主題的最終命令可以由 = 前綴, :) ,混淆了相似語義的語法。

最佳答案

它不僅僅是一個用戶和一個命令:


redsandro host=(user:group) tag:commands
  • host 指定此行有效的主機名。除非您在需要不同規則的不同主機之間共享 asudoers 文件,否則使用特殊值 ALL 意味著 “all hosts” 是一個不錯的選擇。

  • user 指定可以使用 -u 選項運行命令的用戶。如果您省略此選項,則無法使用 -u 選項。

  • group 指定可以與 -g 選項一起使用的組。如果省略它,則不能使用 -g 選項。

usergroup 都將特殊值 ALL 理解為“所有用戶/組”

如果省略整個 (user:group) 內容,則不能使用 -u-g,而隻能以 root 身份運行命令。

  • tag 允許您指定一些選項,例如 NOPASSWD


因此,在您的第一個示例中,您可以以 root 身份運行命令,但不能使用 -u-g 以任何其他用戶或組身份運行它。

對於示例 2,您可以以 root 身份運行該命令,或者使用 -u 以任何其他用戶身份運行它。

使用 3. 您可以以 root 身份運行該命令,或者使用 -u-g 以任何其他用戶或組的身份運行該命令。

次佳答案

讓我們把這個拆開:redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro 是我們授予權限的用戶名。在前麵放一個 % 使其適用於一個組。

ALL 是此規則的名稱。 Sudoers 可以做的不僅僅是授予全局權限。這就是它變得複雜的地方。

= 無需解釋

ALL:ALL 讀作 (who_to_run_it_as:what_group_to_run_it_as)。通過這種方式,您可以允許運行命令,但隻能在特定用戶或組的上下文中運行。

NOPASSWD:告訴它關閉密碼提示。

/path/to/command 允許您指定特定命令 path_to_commmand, another_command

要記住的是,雖然 sudo 主要由家庭用戶用來升級到 root 權限,但它可以並且用於以更精細的方式控製對特定命令的訪問。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/12453.html,未經允許,請勿轉載。