su 指令的安全使用方式 文章首圖

su 指令的安全使用方式

su 指令的安全使用方式

在 Linux 系統管理與日常開發中,我們經常需要切換使用者身份以執行特定任務。雖然 sudo 是現代 Linux 發行版中更推薦的權限提升工具,但 su (switch user) 指令依然佔有重要地位,特別是在需要完全切換環境變數或進行深度除錯時。然而,su 的直覺性也帶來了潛在的安全風險。本文將深入解析 su 的安全使用方式,幫助你在享受便利的同時,兼顧系統安全。

su 指令的核心用法與選項

su 的基本功能是切換當前使用者身份。預設情況下,若不指定使用者名稱,它會切換至 root 使用者。這與 sudo 僅臨時獲取 root 權限有本質上的不同:su 會建立一個全新的登入會話,並載入該使用者的環境設定。

基本切換與環境差異

最常見的用法是直接輸入 su。這會提示你輸入目標使用者(預設為 root)的密碼。

$ su
Password: 
# whoami
root

切換成功後,提示符號通常會從 $ 變為 #,這表示你現在擁有 root 權限。此時,任何指令都將以 root 身份執行。

若希望保留當前使用者的環境變數(如 PATHHOME 等),可以使用 --l (login) 選項。這實際上模擬了一次完整的登入過程,載入目標使用者的 .bashrc.profile

$ su -
Password: 
# echo $HOME
/root
# echo $USER
root

注意:加上 - 後,當前目錄會變更為目標使用者的家目錄,環境變數也會重置為該使用者的預設值。這在需要測試特定使用者環境時非常有用。

切換至特定使用者

除了 root,你也可以切換至系統上的其他使用者。例如,切換至名為 developer 的使用者:

$ su - developer
Password: 
$ whoami
developer

這裡需要注意的是,系統會提示輸入 developer 使用者的密碼,而非 root 的密碼。這意味著只有知道該使用者密碼的人才能切換過去。

安全最佳實踐:避免直接使用 su

儘管 su 功能強大,但直接頻繁使用它來獲取 root 權限並非最佳實踐,主要原因如下:

  1. 密碼管理風險:每個使用者都需要知道 root 密碼,這增加了密碼洩漏的風險。一旦 root 密碼外洩,整個系統將無密可守。
  2. 權限粒度粗糙su 提供的是「全有或全無」的權限。你無法限制使用者僅執行特定的指令(如僅能重啟服務或僅能讀取特定檔案)。
  3. 稽核困難:使用 su 切換至 root 後,所有操作都記錄為 root 執行,難以追蹤具體是哪個使用者執行了該指令。

推薦替代方案:sudo

現代 Linux 系統強烈建議使用 sudo 來替代 su。透過 /etc/sudoers 檔案,你可以精細控制哪些使用者可以執行哪些指令,且無需共享 root 密碼。

$ sudo ls /root
[sudo] password for user: 
...

若你確實需要偶爾使用 su,請確保:

  • 僅在必要時切換,完成任務後立即退出 (exit)。
  • 不要將 root 密碼分發給所有使用者。
  • 定期審視 /var/log/auth.log 以監控 su 的使用紀錄。

常見問題與解決方案

Q1: 為什麼我輸入正確的 root 密碼,su 卻顯示 "su: Authentication failure"?

這通常發生在 Ubuntu 或 Debian 等發行版上,因為預設情況下,root 帳戶是鎖定(locked)狀態,沒有設定密碼。這些系統設計為僅透過 sudo 來執行管理任務。

解決方案: 如果你確實需要啟用 root 密碼(不建議長期保留),可以使用以下指令設定:

$ sudo passwd root
New password: 
Retype new password: 
passwd: password updated successfully

設定後,即可使用 su 切換。但請記住,完成工作後建議再次鎖定 root 帳戶以確保安全:

$ sudo passwd -l root

Q2: 切換使用者後,環境變數沒有正確載入,怎麼辦?

如果你發現切換後 PATH 或其他環境變數仍顯示原使用者的設定,可能是因為你忘記加上 - 選項。su 預設僅切換使用者身份,不載入新的登入環境。

解決方案: 務必使用 su -su -l 來進行完整的登入切換。

$ su -
Password: 
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

小結

su 是一個強大且底層的工具,適合用於需要完全切換使用者環境的場景。然而,在日常系統管理中,我們應優先考慮使用 sudo 以提升安全性和可稽核性。若必須使用 su,請務必理解其行為差異,並遵循最小權限原則,避免長期依賴 root 密碼。正確使用這些工具,將有助於建構更安全、穩定的 Linux 系統環境。