在 Linux 上使用 sudo 命令的 5 個理由 | Linux 中國

語言: CN / TW / HK

以下是切換到 Linux sudo 命令的五個安全原因。下載 sudo 參考手冊獲取更多技巧。

(本文字數:2768,閱讀時長大約:4 分鐘)

以下是切換到 Linux sudo 命令的五個安全原因。下載 sudo 參考手冊獲取更多技巧。

在傳統的 Unix 和類 Unix 系統上,新系統中存在的第一個同時也是唯一的使用者是 root 。使用 root 賬戶登入並建立“普通”使用者。在初始化之後,你應該以普通使用者身份登入。

以普通使用者身份使用系統是一種自我施加的限制,可以防止愚蠢的錯誤。例如,作為普通使用者,你不能刪除定義網路介面的配置檔案或意外覆蓋使用者和組列表。作為普通使用者,你無權訪問這些重要檔案,所以你無法犯這些錯誤。作為系統的實際所有者,你始終可以通過 su 命令切換為超級使用者( root )並做你想做的任何事情,但對於日常工作,你應該使用普通賬戶。

幾十年來, su 執行良好,但隨後出現了 sudo 命令。

對於日常使用超級使用者的人來說, sudo 命令乍一看似乎是多餘的。在某些方面,它感覺很像 su 命令。例如:

$ su root
<輸入密碼>
# dnf install -y cowsay

sudo 做同樣的事情:

$ sudo dnf install -y cowsay
<輸入密碼>

它們的作用幾乎完全相同。但是大多數發行版推薦使用 sudo 而不是 su ,甚至大多數發行版已經完全取消了 root 賬戶(LCTT 譯註:不是取消,而是預設禁止使用 root 使用者進行登入、執行命令等操作。root 依然是 0 號使用者,依然擁有大部分系統檔案和在後臺執行大多數服務)。讓 Linux 變得愚蠢是一個陰謀嗎?

事實並非如此。 sudo 使 Linux 更加靈活和可配置,並且沒有損失功能,此外還有幾個顯著的優點。

為什麼在 Linux 上 sudo 比 root 更好?

以下是你應該使用 sudo 替換 su 的五個原因。

1. root 是被攻擊確認的物件

我使用防火牆、fail2ban 和SSH 金鑰 的常用組合來防止一些針對伺服器的不必要訪問。在我理解 sudo 的價值之前,我對日誌中的暴力破解感到恐懼。自動嘗試以 root 身份登入是最常見的情況,自然這是有充分理由的。

有一定入侵常識的攻擊者應該知道,在廣泛使用 sudo 之前,基本上每個 Unix 和 Linux 都有一個 root 賬戶。這樣攻擊者就會少一種猜測。因為登入名總是正確的,只要它是 root 就行,所以攻擊者只需要一個有效的密碼。

刪除 root 賬戶可提供大量保護。如果沒有 root,伺服器就沒有確認的登入賬戶。攻擊者必須猜測登入名以及密碼。這不是兩次猜測,而是兩個必須同時正確的猜測。(LCTT 譯註:此處是誤導,root 使用者不可刪除,否則系統將會出現問題。另外,雖然 root 可以改名,但是也最好不要這樣做,因為很多程式內部硬編碼了 root 使用者名稱。可以禁用 root 使用者,給它一個不能登入的密碼。)

2. root 是最終的攻擊媒介

在訪問失敗日誌中經常可以見到 root 使用者,因為它是最強大的使用者。如果你要設定一個指令碼強行進入他人的伺服器,為什麼要浪費時間嘗試以受限的普通使用者進入呢?只有最強大的使用者才有意義。

root 既是唯一已知的使用者名稱,又是最強大的使用者賬戶。因此,root 基本上使嘗試暴力破解其他任何東西變得毫無意義。

3. 可選擇的許可權

su 命令要麼全有要麼全沒有。如果你有 su root 的密碼,你就可以變成超級使用者。如果你沒有 su 的密碼,那麼你就沒有任何管理員許可權。這個模型的問題在於,系統管理員必須在將 root 金鑰移交或保留金鑰和對系統的所有權之間做出選擇。這並不總是你想要的, 有時候你只是想授權而已

例如,假設你想授予使用者以 root 身份執行特定應用程式的許可權,但你不想為使用者提供 root 密碼。通過編輯 sudo 配置,你可以允許指定使用者,或屬於指定 Unix 組的任何使用者執行特定命令。 sudo 命令需要使用者的現有密碼,而不是你的密碼,當然也不是 root 密碼。

4.超時

使用 sudo 執行命令後,通過身份驗證的使用者的許可權會提升 5 分鐘。在此期間,他們可以執行任何管理員授權的命令。

5 分鐘後,認證快取被清空,下次使用 sudo 再次提示輸入密碼。超時可防止使用者意外執行某些操作(例如,搜尋 shell 歷史記錄時不小心或按多了 向上 箭頭)。如果一個使用者離開辦公桌而沒有鎖定計算機螢幕,它還可以確保另一個使用者不能執行這些命令。

5. 日誌記錄

Shell 歷史功能可以作為一個使用者所做事情的日誌。如果你需要了解系統發生了什麼,你可以(理論上,取決於 shell 歷史記錄的配置方式)使用 su 切換到其他人的賬戶,檢視他們的 shell 歷史記錄,也可以瞭解使用者執行了哪些命令。

但是,如果你需要審計 10 或 100 名使用者的行為,你可能會注意到此方法無法擴充套件。Shell 歷史記錄的輪轉速度很快,預設為 1000 條,並且可以通過在任何命令前加上空格來輕鬆繞過它們。

當你需要管理任務的日誌時, sudo 提供了一個完整的日誌記錄和警報子系統,因此你可以在一個特定位置檢視活動,甚至在發生重大事件時獲得警報。

學習 sudo 其他功能

除了本文列舉的一些功能, sudo 命令還有很多已有的或正在開發中的新功能。因為 sudo 通常是你配置一次然後就忘記的東西,或者只在新管理員加入團隊時才配置的東西,所以很難記住它的細微差別。

下載sudo 參考手冊,在你最需要的時候把它當作一個有用的指導書。