為什麼 Unix/Linux 中存在超級使用者?
我知道某些系統任務只允許特權使用者/程序執行,但超級使用者(通常是
root
Unix/Linux 中的)或管理員在安全性方面可能會出現很多問題,並且最常被嘗試利用。你們都知道為什麼。我不僅(但主要)對 Unix/Linux 的一般答案感興趣。其背後的基本原理是什麼?
如果您沒有超級使用者,您將需要能夠以普通使用者的身份執行所有現在需要特權提升的任務。
這將使您的辦公桌無人看管更加危險,因為在螢幕保護程序鎖定係統之前使用您的鍵盤的任何人都可以添加新的使用者帳戶,格式化磁碟等。
刪除超級使用者不會刪除漏洞的攻擊目標,它只會創建一個更容易的目標。
以一種或另一種形式存在的超級使用者在邏輯上是必要的。必須有一些允許配置憑據的憑據。那是根。
Root 不必是使用者帳戶。例如,它可能是一種能力。Unix 歷來追求簡單的設計,並使用一個概念來實現帳戶和功能:使用者。每個使用系統的人都有一個使用者帳戶,系統服務也被分配一個使用者帳戶。系統服務,除其他外,可以控制使用者憑據(
/etc/passwd
以及在現代系統中扮演相同角色的其他功能),可以間接獲得任何功能。在 Unix 設計下,root 也可以直接獲得任何能力(例如,通過執行su
或底層系統呼叫),但即使不是這樣,也很難阻止憑證管理器為自己分配任何憑證¹。現代系統已經發展為更細粒度的安全模型。例如,Unix 早期添加了組的概念以允許使用者共享文件,但組只能由 root 管理。大多數現代 Unix 系統都有訪問控制列表,允許使用者在沒有 root 干預的情況下共享文件。越來越多的 Linux 系統使用諸如SELinux之類的安全機制來限制甚至 root 可以執行的操作。
但更複雜的安全模型是一把雙刃劍。更細粒度的權限允許更大的控制,並且它們允許以簡單的方式實現更多的安全策略(例如 ACL 用於訪問而不是通過 setuid 程序進行間接訪問)。但是更複雜的安全策略更難審查(用更複雜的語言要審查的東西太多了),實現這些策略的程式碼更複雜,因此有更多的錯誤風險。
¹這可以通過雙重控製或加密方式來防止,但這會限制功能(如果無法以最終權限執行任意程式碼)和可用性(如果系統被鎖定太多,這會增加被鎖定的風險)。