在 Linux 上使用 sudo 命令的 5 個理由
在傳統的 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 參考手冊,在你最需要的時候把它當作一個有用的指導書。
via: https://opensource.com/article/22/5/use-sudo-linux
作者:Seth Kenlon 選題:lkxed 譯者:MjSeven 校對:turbokernel
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive