sudo用戶和root用戶之間的區別

sudo用戶和root用戶之間的區別

/etc/sudoers文件列出了哪些使用者可以使用該sudo命令執行哪些操作

root 使用者建立並修改該/etc/sudoers檔案。

這個概念對我來說很難理解。

如果所有具有 sudo 權限的使用者都屬於sudoers該群組,那麼透過發出該指令,所有使用者都可以成為 root sudo su

那麼誰是真正的root用戶,他是如何控制sudoers群組用戶的權限的呢?

請給我解釋一下。

答案1

內容摘要:「root」是管理員帳號的實際名稱。 「sudo」是一個允許普通使用者執行管理任務的指令。 “Sudo”不是用戶。


長答案:

「root」(又稱「超級使用者」)是系統管理員帳號的名稱。這個名字的起源有點古老,但這並不重要。

Root 使用者的使用者 ID 為 0,名義上擁有無限的權限。 root 可以存取任何檔案、執行任何程式、執行任何系統呼叫以及修改任何設定。 (但見下文1)。

在「sudo」命令發明之前,如果您想執行管理任務,您必須以 root 身份登錄,要么通過某種方式獲得登錄提示²,要么使用命令su(「su」是替代用戶的縮寫。)³

這有點麻煩,而且也不允許您授予使用者部分管理權限。於是「sudo」指令(「substitute user do」的縮寫)就被發明了。

只要您的使用者 ID 在 sudoers 檔案中,「sudo」指令就可以讓您以超級使用者權限執行指令,從而為您提供必要的授權。

因此,egsudo vi /etc/hosts將允許您編輯主機文件,就像您以 root 身份運行一樣。您甚至不需要 root 密碼,只需要您自己的登入密碼。

當然,sudo su會讓你簡單地成為root。結果與您以 root 身分登入或執行命令相同su,只是您不需要知道 root 密碼,但確實需要位於 sudoers 檔案中。

sudoers 檔案確定誰可以使用 sudo 命令以及他們可以用它做什麼。

sudoers 檔案為您提供了多位管理員⁴。實際上,您的管理員是 root,加上 sudoers 檔案中列出的每個人。如果沒有 sudoers 文件,唯一的管理員就是 root。

事實上,在其他人為您管理電腦的組織中,不知道自己電腦的 root 密碼是很常見的 — 只要您位於 sudoers 檔案中,就沒有關係。

我工作過的一家公司擁有龐大的伺服器群,只有極少數人知道 root 密碼。相反,有一個資料庫記錄了誰可以在哪些伺服器上工作。自動化程序會將您新增至您有權存取的伺服器的 sudoers 檔案中,並在您的授權過期時將您刪除。


1 還有一件事:現代 Unix 版本現在甚至可以限制 root 使用者可以執行的操作。

在下面SELinux(安全增強型 Linux),實際上有一個存取控制清單來決定哪個程式可以做什麼,甚至 root 也無法超越這些限制。

在蘋果的下系統完整性保護(SIP)(又稱「無根」)系統,某些檔案和目錄被鎖定,以便只有相應白名單上的應用程式才能存取它們。

這些系統的存在是為了保護系統免受惡意使用者設法獲得根存取權限的情況的影響。 (或在某些情況下,防止使用者越獄其嵌入式裝置。)出於顯而易見的原因,即使具有 root 存取權限,也很難繞過這些限制。

² 「login:」提示符號是 Unix 歷史的另一段古老的內容,可以追溯到我們在串列線路上使用 ascii 終端機而不是視窗系統的時候。您仍然可以透過簡單地login在任何終端機視窗中鍵入內容或從其他地方開啟到電腦的 ssh(或 telnet 或 rsh)連線來獲得「登入:」提示。如果需要,您可以從那裡以其他使用者登入。 (如果您的電腦恰好有串行端口,您仍然可以將其配置為允許登入。)

³ 也可以為單一程式授予 root 存取權。這些程式可以執行具有 root 存取權限的使用者可以執行的任何操作,即使由普通使用者執行也是如此。這些通常僅限於特定任務。例如,定時任務程式具有 root 權限,因此可以編輯 cron 表。顯然,“sudo”具有root權限,因此它可以做它所做的事情。

⁴ 我將再談一談我之前忽略的一點。我一直交替使用“管理員”和“root”,但還有其他類型的管理員。這些通常稱為“角色帳戶”,也就是說這些帳戶不屬於實際人類,而是為了在系統上執行某些特定角色而存在。如果您查看/etc/passwd系統上的文件,您會發現數十個此類帳戶。

例如,如果您的系統上安裝了 mysql,則將有一個「mysql」用戶,並且所有資料庫檔案、設定檔等都將歸該用戶所有。只有該使用者(當然還有 root)才有存取檔案和執行 mysql 伺服器所需的權限。從某種意義上說,該用戶將是管理員帳戶,但僅限於 mysql。

如果您需要執行資料庫管理任務,您可以使用該su mysql命令成為“mysql”,或使用sudosudoers 檔案為您提供這些特定命令的 mysql 權限。

相關內容