sudo 指令嘗試搜尋主機名

sudo 指令嘗試搜尋主機名

最近,我透過 /etc/hostname 更改了 sudoers 檔案和主機名稱。更改此文件後,我的 sudo 命令花費了很多時間。另外,它說 sudo 無法解析主機 kaagini(我的機器的主機名稱)。

為什麼 sudo 必須知道主機名稱才能提供某些權限?

我的 sudoers 檔案有一個命令“Defaults env_reset”。我看到了一些類似的問題,但這裡的上下文不是遠端登入。該錯誤顯示在本機上。

對該問題的最初谷歌搜尋表明 /etc/hosts 檔案必須具有 127.0.0.1 的實際主機名稱。這解決了我的問題。但我真正的問題是:為什麼我們需要這個 sudo ?無論登入位置如何,sudo 是否都可以運作。

答案1

/etc/sudoers文件被設計為能夠分佈在多個伺服器之間。為了實現這一點,檔案中的每個權限都有一個主機部分。

這通常設定為ALL=意味著該權限對任何伺服器都有效,但也可以設定為特定主機:

%sudo    kaagini=(ALL) ALL

為了讓 sudo 知道是否應該套用此規則,它需要尋找正在執行的主機。它使用的呼叫依賴於/etc/hosts正確性,這就是為什麼如果不正確就會失敗的原因。

有人可能會說,sudo如果主機部分設定ALL=為所有權限,則不需要費心進行名稱查找,但它只是不能那樣工作 - 它似乎在處理規則之前計算出它運行的位置。

這實際上是為了便於維護,因為 sudo 只讀取 /etc/sudoers 來查看使用者可以在目前電腦上執行的操作。但作為擁有 100 台伺服器的管理員,這可能需要維護 100 個不同的 /etc/sudoers 檔案。由於 sudoers 在權限中具有主機部分,因此您可以維護單個 sudoers 文件並將其分發到所有計算機,但仍然可以精確控制用戶在每台計算機上可以執行的操作。

答案2

感謝連結的錯誤報告由 Matthias Urlichs 在另一條評論中提交,以下命令為我解決了這個問題:

Defaults !fqdn

將此行放入/etc/sudoers文件中

答案3

木偶是一種組態管理軟體,能夠透過讀取 Puppet Manifests 檔案自動設定一組伺服器。這樣的檔案可能包含 /etc/sudoers 檔案的定義,然後可以將其從傀儡「主人」推送到所有傀儡「代理」。然後所有主機將獲得 /etc/sudoers 檔案的相同副本,該檔案可以(並且應該)包含 HOST 定義,因此您可以向某些使用者授予一些命令一些主機(但不適用於其他人)。

相關內容