sudo 使用者和 root 使用者的區別
該
/etc/sudoers
文件列出了哪些使用者可以使用該sudo
命令執行哪些操作root 使用者創建和修改
/etc/sudoers
文件。這個概念我很難理解。
如果所有具有 sudo 權限的使用者都屬於
sudoers
組,那麼他們都可以通過發出sudo su
命令成為 root。那麼誰是實際的 root 使用者,他如何控制 sudoers 組中使用者的權限呢?
請給我解釋一下。
執行摘要:“root”是管理員帳戶的實際名稱。“sudo”是一個允許普通使用者執行管理任務的命令。“須藤”不是使用者。
長答案:
“root”(又名“超級使用者”)是系統管理員帳戶的名稱。這個名字的起源有點古老,但這並不重要。
根使用者的使用者 ID 為 0,名義上具有無限權限。Root 可以訪問任何文件、執行任何程序、執行任何系統呼叫以及修改任何設置。(但見下文¹)。
在“sudo”命令發明之前,如果您想執行管理任務,您必須以 root 身份登錄,或者通過某種方式獲得登錄提示²,或者使用
su
命令(“su”是替代使用者的縮寫。)³這有點麻煩,也不允許您授予使用者部分管理權限。於是發明了“sudo”命令(“substitute user do”的縮寫)。
只要您的使用者 ID 在 sudoers 文件中,“sudo”命令就可以讓您以超級使用者權限執行命令,從而為您提供必要的授權。
因此,例如
sudo vi /etc/hosts
將允許您編輯 hosts 文件,就好像您以 root 身份執行一樣。你甚至不需要root密碼,只需要你自己的登錄密碼。當然,
sudo su
也可以讓你簡單地成為 root。結果與您以 root 身份登錄或執行su
命令相同,只是您不需要知道 root 密碼,但您確實需要在 sudoers 文件中。sudoers 文件確定誰可以使用 sudo 命令以及他們可以用它做什麼。
sudoers 文件為您提供了多個管理員⁴。實際上,您的管理員是 root 以及 sudoers 文件中列出的每個人。沒有 sudoers 文件,唯一的管理員是 root。
事實上,在其他人為您管理您的電腦的組織中,不知道您自己電腦的 root 密碼是很常見的——只要您在 sudoers 文件中,就沒有關係。
在我工作的一家公司,擁有一個龐大的伺服器場,只有極少數人知道 root 密碼。相反,有一個關於誰被允許在哪些伺服器上工作的數據庫。一個自動化的過程會將您添加到您有權訪問的那些伺服器的 sudoers 文件中,並在您的授權到期時將您刪除。
¹ 還有一件事:現代 Unix 版本現在甚至可以限制 root 使用者可以執行的操作。
在SELinux(安全增強型 Linux)下,實際上有一個訪問控制列表,可以確定哪個程序可以做什麼,甚至 root 也無法超越這些限制。
在 Apple 的系統完整性保護(SIP)(又名“無根”)系統下,某些文件和目錄被鎖定,因此只有相應白名單上的應用程序才能訪問它們。
這些系統的存在是為了保護系統免受惡意使用者設法獲得 root 訪問權限的影響。(或者在某些情況下,為了防止使用者越獄他們的嵌入式設備。)出於顯而易見的原因,繞過這些限制是極其困難的,即使是 root 訪問。
² “登錄:”提示符是 Unix 歷史的另一個古老片段,可以追溯到我們在串列線路上都使用 ascii 終端而不是視窗系統的時候。您仍然可以獲得“登錄:”提示,只需
login
在任何終端視窗中鍵入,或從其他地方打開與您電腦的 ssh(或 telnet 或 rsh)連接。如果需要,您可以從那里以其他使用者身份登錄。(如果您的電腦恰好有串列埠,您仍然可以將其配置為允許在它們上登錄。)³ 也可以為個別程序授予 root 訪問權限。這些程序可以執行具有 root 訪問權限的使用者可以執行的任何操作,即使是由普通使用者執行。這些通常僅限於特定任務。例如,crontab程序具有 root 權限,因此它可以編輯 cron 表。顯然,“sudo”具有 root 權限,因此它可以做它所做的事情。
⁴ 我將再介紹一個我之前忽略的點。我一直在交替使用“管理員”和“root”,但還有其他類型的管理員。這些通常被稱為“角色帳戶”,也就是說這些帳戶不屬於實際的人類,而是存在於系統中執行某些特定角色。如果您查看
/etc/passwd
系統上的文件,您會發現數十個這樣的帳戶。例如,如果您的系統上安裝了 mysql,則將有一個“mysql”使用者,並且所有數據庫文件、配置文件等都將歸該使用者所有。只有該使用者(當然還有 root)才有訪問文件和執行 mysql 伺服器的必要權限。從某種意義上說,該使用者將是管理員帳戶,但僅適用於 mysql。
如果您需要執行數據庫管理任務,您可以使用該
su mysql
命令成為“mysql”,或者使用sudo
sudoers 文件為您提供這些特定命令的 mysql 權限的位置。