問題描述
每次我希望能夠運行需要我成為 sudoer
太多次的東西時,我需要用穀歌搜索 /etc/sudoers
的格式,以再次提醒我正確的編寫方法是什麽。
現在我在我的 sudoers
文件中看到了不同的寫作風格,這是幾個月來穀歌搜索結果不同的結果。我還注意到第二個示例(如下)似乎在 XFCE 中有效,但在 Cinnamon(Gnome 3)中無效。這可能完全不相關,但我還是想一勞永逸地知道,sudoer 行的正確語法是什麽,給定示例之間有什麽區別?
redsandro ALL=NOPASSWD:/path/to/command
redsandro ALL=(ALL) NOPASSWD:/path/to/command
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
選項。
user
和 group
都將特殊值 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 權限,但它可以並且用於以更精細的方式控製對特定命令的訪問。