Security

獲得 root 權限的最安全方法是:sudo、su 還是登錄?

  • April 22, 2018

即使我的非特權使用者受到威脅,我也希望 root 帳戶安全。

在 Ubuntu 上,預設情況下您只能出於“安全原因”使用 sudo。但是,我不確定它是否比僅在文本模式控制台上使用登錄更安全。如果攻擊者可以以我的普通使用者身份執行程式碼,那麼有太多事情會出錯。例如添加別名、向我的 PATH 添加內容、設置 LD_PRELOAD 和 X11 鍵盤記錄器等等。我能看到的唯一優點是超時,所以我永遠不會忘記註銷。

我對 su 也有同樣的疑問,但它甚至沒有時間限制。一些操作(尤其是 IO 重定向)使用 su 更方便,但在安全方面這似乎更糟。

在文本模式控制台上登錄似乎是最安全的。由於它是由 init 啟動的,如果攻擊者可以控制 PATH 或 LD_PRELOAD 他已經是 root。按鍵事件不能被X上執行的程序攔截,不知道X上執行的程序能不能攔截

$$ ctrl $$+$$ alt $$+$$ f1 $$(並打開一個看起來像控制台的全屏視窗)或者它是安全的$$ ctrl $$+$$ alt $$+$$ del $$在 Windows 上。除此之外,我看到的唯一問題是沒有超時。 所以我錯過了什麼嗎?為什麼 Ubuntu 的傢伙決定只允許 sudo?我可以做些什麼來提高任何方法的安全性?

SSH 呢?傳統上,root 無法通過 SSH 登錄。但是使用上述邏輯並不是最安全的做法:

  • 通過 SSH 允許 root
  • 切換到文本模式
  • 以 root 身份登錄
  • ssh 到另一台機器
  • 以root身份登錄?

安全性總是需要權衡取捨。就像眾所周知的伺服器位於海底的保險箱中,未插電,如果根本無法訪問它,那root將是最安全的。

像您描述的那樣的 LD_PRELOAD 和 PATH 攻擊假定攻擊者已經可以訪問您的帳戶,或者至少可以訪問您的點文件。Sudo 根本不能很好地防止這種情況——畢竟,如果他們有你的密碼,以後就不需要再試圖欺騙你了……他們sudo 現在就可以使用。

重要的是要考慮 Sudo 最初的設計目的:將特定命令(例如管理列印機的命令)委託給“子管理員”(可能是實驗室中的研究生),而無需完全放棄 root。使用 sudo 做所有事情是我現在看到的最常見的用途,但這不一定是程序要解決的問題(因此配置文件語法複雜得離譜)。

但是,sudo-for-unrestricted-root確實解決了另一個安全問題:root 密碼的可管理性。在許多組織中,這些往往像糖果一樣被傳遞,寫在白板上,並且永遠保持不變。這留下了一個很大的漏洞,因為撤銷或更改訪問權限成為一個很大的生產數字。即使跟踪哪台機器有什麼密碼也是一個挑戰——更不用說跟踪誰知道哪個密碼了。

請記住,大多數“網路犯罪”都來自內部。使用所描述的 root 密碼情況,很難追踪誰做了什麼——遠端日誌記錄的 sudo 處理得很好。

在您的家庭系統上,我認為這實際上更多的是不必記住兩個密碼的方便問題。很可能很多人只是將它們設置為相同 - 或者更糟糕的是,最初將它們設置為相同然後讓它們不同步,從而使 root 密碼失效。

對 SSH完全使用密碼是危險的,因為密碼嗅探特洛伊木馬 ssh 守護程序在我見過的 90% 的真實係統危害中都已安裝到位。使用 SSH 密鑰要好得多,這對於遠端 root 訪問來說也是一個可行的系統。

但是現在的問題是您已經從密碼管理轉移到密鑰管理,而 ssh 密鑰並不是非常易於管理。沒有辦法限制副本,如果有人確實製作了副本,他們就會嘗試暴力破解密碼。您可以製定政策,規定密鑰必須儲存在可移動設備上,並且僅在需要時安裝,但無法強制執行——現在您已經引入了可移動設備失去或被盜的可能性。

最高安全性將通過一次性密鑰或基於時間/計數器的加密令牌來實現。這些可以在軟體中完成,但防篡改硬體更好。在開源世界中,有WiKiDYubiKeyLinOTP,當然還有專有的重量級RSA SecurID。如果您在一個大中型組織,甚至是一個注重安全的小型組織,我強烈建議您研究其中一種管理訪問方法。

不過,這對於家庭來說可能有點過頭了,因為你並沒有真正的管理麻煩——只要你遵循明智的安全做法。

引用自:https://unix.stackexchange.com/questions/8581