最後更新日期: 2025 年 4 月 26 日
在Linux作業系統中,權限管理是系統安全的核心部分。為了執行特定的管理任務或操作,使用者需要更高的權限,這時 su
和 sudo
這兩個指令就派上用場。雖然它們都能讓使用者切換身份或以更高權限執行指令,但它們的使用方式、功能以及背後的設計理念卻有明顯的不同。本文將以簡單易懂的方式,介紹 su
和 sudo
的基本概念、操作方式、差異,以及在實際使用中的注意事項,幫助初學者快速上手這兩個重要的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
這需要 user2
在 sudoers
檔案中被授權。
2.3 sudo
的特點
- 臨時提升權限:
sudo
僅為單一指令提升權限,不會改變使用者的身份。 - 使用自己的密碼:執行
sudo
時,輸入的是目前使用者的密碼,而非目標使用者的密碼。 - 權限控制靈活:透過
/etc/sudoers
檔案,系統管理員可以精確控制哪些使用者可以執行哪些指令。 - 安全性高:
sudo
會記錄每次操作的日誌,便於追蹤和管理。
三、su
與 sudo
的主要差異
雖然 su
和 sudo
都能讓使用者以更高權限執行任務,但它們在設計理念和使用場景上有顯著不同。以下是它們的主要差異:
特性 | 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
,以防萬一需要恢復。 - 最小權限原則:只授予使用者執行任務所需的最低權限,避免安全風險。
五、使用 su
和 sudo
的注意事項
雖然 su
和 sudo
簡單易用,但不當使用可能導致系統安全問題或操作失誤。以下是一些實用的建議:
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
檔案。 - 指令執行失敗:檢查指令路徑是否正確,或者確認是否有足夠的權限。
六、結論
su
和 sudo
是 Linux 系統中管理權限的兩大核心工具。它們各自有不同的使用場景和優勢:su
適合需要完整切換身份的情況,而 sudo
則提供更安全、靈活的權限管理方式。對於初學者來說,建議優先學習 sudo
,因為它在現代 Linux 發行版中更常見,且能有效降低操作風險。
透過本文的介紹,相信你已經對 su
和 sudo
的基本概念、用法和差異有了清晰的理解。無論是執行簡單的系統更新,還是進行複雜的伺服器管理,這兩個指令都將是你不可或缺的幫手。只要謹記安全原則並靈活運用,你就能在 Linux 世界中遊刃有餘!