su與sudo 安全且靈活的切換權限身份

最後更新日期: 2025 年 4 月 26 日

在Linux作業系統中,權限管理是系統安全的核心部分。為了執行特定的管理任務或操作,使用者需要更高的權限,這時 susudo 這兩個指令就派上用場。雖然它們都能讓使用者切換身份或以更高權限執行指令,但它們的使用方式、功能以及背後的設計理念卻有明顯的不同。本文將以簡單易懂的方式,介紹 susudo 的基本概念、操作方式、差異,以及在實際使用中的注意事項,幫助初學者快速上手這兩個重要的Linux指令。

一、什麼是 su

su 是 “substitute user” 或 “switch user” 的縮寫,意思是「替換使用者」或「切換使用者」。這個指令允許目前的使用者切換到另一個使用者的身份,通常是用來切換到系統的超級使用者(root)帳號,以執行需要更高權限的操作。

1.1 su 的基本語法

su 的基本語法如下:

su [選項] [使用者名稱]
  • 如果不指定「使用者名稱」,預設會切換到 root 帳號。
  • 常用的選項包括:
    • --l:啟動一個新的登入 shell,模擬完整登入環境。
    • -c:執行單一指令後退出。

1.2 su 的使用範例

假設你目前以一般使用者 user1 登入,想切換到 root 帳號,可以輸入以下指令:

su

系統會提示你輸入 root 的密碼。輸入正確密碼後,你的終端機提示符會從 $ 變成 #,表示你已經成功切換到 root 身份。

如果想切換到另一個使用者,例如 user2,可以輸入:

su user2

這時需要輸入 user2 的密碼。

若要以 root 身份執行單一指令,而不完全切換身份,可以使用 -c 選項。例如:

su -c "apt update"

這會以 root 身份執行 apt update 指令,執行完畢後回到原使用者身份。

1.3 su 的特點

  • 完整切換身份:執行 su 後,你會進入目標使用者的環境,包括他們的家目錄、環境變數等。
  • 需要密碼:切換到哪個使用者,就需要輸入該使用者的密碼(除非你是 root 身份)。
  • 簡單直接su 的設計簡單,適合快速切換身份,但缺乏細粒度的權限控制。

二、什麼是 sudo

sudo 是 “superuser do” 的縮寫,意思是「以超級使用者身份執行」。與 su 不同,sudo 允許使用者在不切換身份的情況下,以更高權限(通常是 root 權限)執行特定的指令。sudo 的設計更注重安全性和靈活性,廣泛應用於現代 Linux 發行版中。

2.1 sudo 的基本語法

sudo 的基本語法如下:

sudo [選項] 指令
  • sudo 會檢查目前的設定檔案(通常是 /etc/sudoers),確認使用者是否有權限執行指定的指令。
  • 常用的選項包括:
    • -u:指定以某個使用者的身份執行指令。
    • -i:模擬目標使用者的登入環境。

2.2 sudo 的使用範例

假設你想以 root 權限更新系統套件,可以輸入:

sudo apt update

第一次執行 sudo 時,系統會要求輸入你自己的密碼(而不是 root 的密碼)。輸入正確密碼後,指令會以 root 權限執行。

若要以特定使用者身份執行指令,例如以 user2 身份執行 ls,可以輸入:

sudo -u user2 ls

這需要 user2sudoers 檔案中被授權。

2.3 sudo 的特點

  • 臨時提升權限sudo 僅為單一指令提升權限,不會改變使用者的身份。
  • 使用自己的密碼:執行 sudo 時,輸入的是目前使用者的密碼,而非目標使用者的密碼。
  • 權限控制靈活:透過 /etc/sudoers 檔案,系統管理員可以精確控制哪些使用者可以執行哪些指令。
  • 安全性高sudo 會記錄每次操作的日誌,便於追蹤和管理。

三、susudo 的主要差異

雖然 susudo 都能讓使用者以更高權限執行任務,但它們在設計理念和使用場景上有顯著不同。以下是它們的主要差異:

特性 su sudo
功能 完整切換到另一個使用者身份 以更高權限執行單一指令
密碼要求 需要目標使用者的密碼 需要目前使用者的密碼
權限控制 無細粒度控制,切換後擁有全部權限 可透過 sudoers 檔案精確控制權限
安全性 較低,切換後可能無限制操作 較高,有日誌記錄和權限限制
使用場景 適合需要長時間以 root 身份操作的情況 適合臨時需要提升權限的單一操作

3.1 實際應用中的選擇

  • 使用 su 的場景
    • 需要長時間以 root 身份執行多個指令,例如進行系統維護或安裝軟體。
    • 在小型系統或個人設備中,管理簡單且不需要複雜的權限控制。
  • 使用 sudo 的場景
    • 需要臨時執行單一管理指令,例如更新系統或修改設定檔案。
    • 在多人共用的伺服器環境中,管理員希望限制每個使用者的權限範圍。
    • 希望記錄操作日誌以便追蹤。

四、如何設定與使用 sudo

sudo 的靈活性來自於它的設定檔案 /etc/sudoers,這個檔案定義了哪些使用者或群組可以執行哪些指令。以下是設定 sudo 的基本步驟和注意事項。

4.1 修改 sudoers 檔案

為了安全起見,應該使用 visudo 指令來編輯 /etc/sudoers 檔案,因為它會檢查語法錯誤,避免因設定錯誤導致系統無法使用。

sudo visudo

sudoers 檔案中,可以添加以下格式的規則:

使用者 主機=(執行身份) 指令

例如,允許 user1 在所有主機上以 root 身份執行 apt 指令:

user1 ALL=(ALL) /usr/bin/apt

4.2 常見設定範例

  • 允許某使用者執行所有指令
    user1 ALL=(ALL) ALL
  • 允許某群組執行特定指令
    %admin ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

4.3 注意事項

  • 不要直接編輯 /etc/sudoers:直接編輯可能導致語法錯誤,使 sudo 無法運行。
  • 備份檔案:在修改前備份 /etc/sudoers,以防萬一需要恢復。
  • 最小權限原則:只授予使用者執行任務所需的最低權限,避免安全風險。

五、使用 susudo 的注意事項

雖然 susudo 簡單易用,但不當使用可能導致系統安全問題或操作失誤。以下是一些實用的建議:

5.1 安全建議

  • 避免長期使用 root 身份:使用 su 切換到 root 後,擁有無限制權限,容易因誤操作損壞系統。建議使用 sudo 執行單一指令。
  • 保護密碼:確保你的使用者密碼和 root 密碼安全,不要輕易洩露。
  • 定期檢查 sudoers 設定:確保只有必要的權限被授予,定期審計日誌。

5.2 常見問題與解決方法

  • 忘記 root 密碼:如果無法使用 su 切換到 root,可以透過單使用者模式或救援模式重設 root 密碼。
  • sudo 提示「user is not in the sudoers file」:這表示目前使用者未被授權使用 sudo,需要以 root 身份修改 /etc/sudoers 檔案。
  • 指令執行失敗:檢查指令路徑是否正確,或者確認是否有足夠的權限。

六、結論

susudo 是 Linux 系統中管理權限的兩大核心工具。它們各自有不同的使用場景和優勢:su 適合需要完整切換身份的情況,而 sudo 則提供更安全、靈活的權限管理方式。對於初學者來說,建議優先學習 sudo,因為它在現代 Linux 發行版中更常見,且能有效降低操作風險。

透過本文的介紹,相信你已經對 susudo 的基本概念、用法和差異有了清晰的理解。無論是執行簡單的系統更新,還是進行複雜的伺服器管理,這兩個指令都將是你不可或缺的幫手。只要謹記安全原則並靈活運用,你就能在 Linux 世界中遊刃有餘!