1. 前言:什麼是 sudo?
sudo 的基本意義與作用
在 Linux 與 Unix 系統中,「sudo」是非常重要的指令之一。
「sudo」是「superuser do」的縮寫,是一個臨時取得管理員(root)權限來執行指令的工具。一般用戶無法進行影響整個系統的操作(如安裝套件或變更系統設定),但透過 sudo
指令,便能有條件地執行這些特殊操作。
例如,以下指令可以用 root 權限執行 apt 指令:
sudo apt update
由此可見,sudo 是「安全利用管理員權限的機制」,同時兼顧系統安全性與便利性。
與 su 指令的差異
與 sudo
類似的還有 su
指令,但這兩者有明顯不同。
su
是「substitute user」的縮寫,用來切換到其他使用者(通常是 root)。使用su
後,操作會完全以該使用者身份進行。- 而
sudo
則是在維持當前使用者身份下,暫時取得管理員權限來執行單一指令。
換句話說,su
是「會話」級別的切換,sudo
則是「指令」級別的權限提升。這在安全性上有很大差異,sudo
更容易管理操作紀錄,也是近年主流發行版的標準作法。
常用 sudo 的代表性 Linux 發行版
許多 Linux 發行版預設就採用 sudo
,特別是以下幾種:
- Ubuntu 系(Ubuntu、Linux Mint 等)
→ 預設無法直接登入 root 帳號,管理操作皆使用 sudo。 - Debian 系
→ 有時須後續啟用 sudo,但從安全政策上非常推薦使用。 - Fedora、CentOS、Red Hat 系
→ 雖可直接使用 root 帳號,但 sudo 也非常普遍。
特別是 Ubuntu,預設 root 帳號是停用狀態,所有管理操作皆需透過 sudo,理解 sudo 對 Ubuntu 用戶來說非常重要。
為何會有「sudo sudo」這樣的搜尋?
「sudo sudo」這個搜尋關鍵字,看似重複,其實背後原因可能包括:
- 新手為了強調或誤會 sudo 的用法,重複輸入查詢
- 遇到有關 sudo 的錯誤(如:
sudo: sudo: command not found
)而搜尋解法 - 看到腳本或流程中重複使用 sudo,產生疑惑而搜尋
了解這些搜尋動機後,以下將進一步說明 sudo 的正確用法、設定與常見問題解決方式。
2. sudo 指令的基本用法
sudo 的基本語法
sudo
的基本語法非常簡單:
sudo [選項] 指令
例如想更新系統套件資訊時,可執行:
sudo apt update
這表示「以 root 權限執行 apt update」。
密碼驗證與快取機制
第一次使用 sudo
,或一段時間沒操作時,系統會要求輸入用戶密碼,這是為了提升安全性、避免誤操作或第三方濫用。
密碼輸入後,在一定時間內(Ubuntu 預設 5 分鐘)會自動快取,之後短時間內再次使用 sudo
則無需重輸。這個時間可在 sudoers
檔中修改。
常用的 sudo 選項
sudo
有許多方便或靈活使用的選項,常用如下:
-u(以其他用戶身份執行)
預設為 root 權限,加上 -u
可指定為其他用戶執行。
sudo -u www-data whoami
執行結果會是 www-data
,即以 www-data 身份執行。
-s(啟動 root shell)
以下指令可暫時開啟 root 權限的 shell:
sudo -s
操作時請格外小心。
-i(完全以 root 身份登入)
會切換至 root 環境變數,等同於剛登入 root 的狀態。
sudo -i
-l(查詢可執行的指令)
可查詢自己能以 sudo
執行哪些指令:
sudo -l
對於權限設定測試、資訊安全檢查很有幫助。
新手需注意的事項
sudo
後面必須有空格,如sudoapt
是錯誤的。- 執行多個指令時,需用引號(
"
或'
)或分號區隔。 - 以
sudo
啟動 GUI 應用程式可能導致設定檔損壞,如sudo gedit
,請特別注意。
3. sudoers 檔案與存取控制
什麼是 sudoers 檔案?
控制 sudo
行為的設定檔為系統內的 /etc/sudoers
。這個檔案定義哪些用戶可以用 sudo 執行哪些指令。
例如,可以設定某用戶只能用 sudo 執行特定指令。
這種彈性讓只給予用戶最小必要權限成為可能,落實資安原則。
用 visudo 指令安全編輯
切勿直接用文字編輯器編輯 /etc/sudoers
!
若有語法錯誤,可能導致 sudo 無法使用、難以復原。請務必用 visudo
指令進行編輯,會在儲存時檢查語法,避免重大錯誤。
sudo visudo
visudo
可幫你安全檢查並儲存 sudoers 設定。
基本語法與設定範例
sudoers
檔案的基本語法如下:
用戶名稱 主機名稱 = (執行用戶) 可執行的指令
範例:
alice ALL=(ALL:ALL) ALL
這代表用戶 alice 可以在所有主機上,以所有用戶身分執行所有指令。
若只允許特定指令:
bob ALL=(ALL) /usr/bin/systemctl restart nginx
此設定僅讓 bob 用 sudo 重啟 nginx 服務。
以群組管理權限:sudo 群組
在 Ubuntu 等許多發行版中,屬於 sudo
群組的用戶自動擁有 sudo 權限。
%sudo ALL=(ALL:ALL) ALL
以 %sudo
表示群組成員管理更方便。
要將用戶加入 sudo 群組,可用下列指令:
sudo usermod -aG sudo 用戶名
NOPASSWD 選項的使用與注意事項
若覺得每次用 sudo
都要輸入密碼很麻煩,可利用 NOPASSWD
來省略密碼輸入:
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
這樣 alice 就能無需輸入密碼重啟 nginx。
但會提升資安風險,建議僅限於必要指令,尤其勿搭配 ALL 使用。
4. sudo 的進階用法
以特定用戶身份執行指令
一般 sudo
是用 root 執行,但也可以指定其他用戶:
sudo -u www-data whoami
輸出會顯示 www-data
,即以該身分執行。這對於檢查不同用戶的環境很有幫助。
與重導向、管線合併使用
新手常遇到 sudo
配合重導向(>
)或管線(|
)時的問題。如下錯誤示範:
sudo echo "test" > /etc/test.conf
這會因為重導向部份在一般用戶下執行而失敗。
正確寫法應用 tee
:
echo "test" | sudo tee /etc/test.conf
這樣才能以 sudo 權限寫入目標檔案。
腳本中使用 sudo
若 Shell 腳本需執行需管理權限的指令,應在必要處加 sudo
,而非整個腳本都用 sudo 執行。
範例(install.sh):
#!/bin/bash
echo "Installing package..."
sudo apt install -y nginx
或於腳本開頭檢查 root 身份:
if [ "$EUID" -ne 0 ]; then
echo "此腳本需要 root 權限執行"
exit 1
fi
這樣可強化腳本的安全性。
常用的方便指令
sudo !!
→ 重新以 sudo 執行上個指令。例如:
apt update
sudo !!
這就等同於 sudo apt update
。
sudo -k
→ 手動清除 sudo 密碼快取。建議暫時離開座位時使用。sudo -v
→ 延長目前 session 的 sudo 權限,長時間作業時很實用。
5. 安全性與最佳實踐
遵守最小權限原則
sudo
的核心目的,是僅以最小必要權限操作系統,而不是常駐 root 身份,僅於需要時才短暫提權。
實踐方式如:
- 只允許用戶對特定指令用 sudo(例:
systemctl restart nginx
) - NOPASSWD 只對少數必要情境啟用
- 用群組(例:
sudo
群組)管理管理者權限
操作紀錄與稽核
sudo
會將執行紀錄記錄於日誌檔,方便追蹤誰在何時做了什麼。
常見日誌路徑如下(不同發行版略有差異):
/var/log/auth.log
(Ubuntu、Debian 系)journalctl
(支援 systemd 的發行版)
例如在 Ubuntu 查詢 sudo 歷史:
grep 'sudo' /var/log/auth.log
或:
journalctl _COMM=sudo
如此一來,即使有誤操作或未授權操作也能追查來源,對伺服器管理相當重要。

曾經發生的 sudo 漏洞(CVE-2021-3156)
sudo
雖可靠,但歷史上也有嚴重漏洞。例如 2021 年發現的 CVE-2021-3156(Baron Samedit),特定情境下會讓一般用戶可竊取 root 權限。
這已被修正,但從中學到:
- sudo 等關鍵套件務必保持最新
- 定期關注官方或漏洞資料庫
這些都是日常資安管理不可忽略的重點。
sudo 的替代方案:介紹 doas
部分重視輕量或資安的 Linux 用戶會選用 doas 取代 sudo。
doas
起源自 OpenBSD,是個簡潔的權限提昇工具,比 sudo 更單純、更易於設定。
範例:
doas apt update
設定檔寫於 /etc/doas.conf
,語法簡單:
permit nopass :wheel
即允許 wheel 群組免密碼用 doas。
不過有些 Linux 預設沒裝 doas,需自行安裝與設定。依需求決定採用 sudo 或 doas。
6. 常見錯誤與排錯技巧
出現「用戶未被包含在 sudoers 檔案中」錯誤
用戶名 is not in the sudoers file. This incident will be reported.
這表示目前用戶無 sudo 權限,常見於新建用戶未加入 sudo 群組。
解決方式:
- 以有 root 權限的用戶登入
- 將該用戶加進
sudo
群組
sudo usermod -aG sudo 用戶名
登出並重新登入後即可正常用 sudo。
重導向、管線用法出現「權限不足」錯誤
Permission denied
這是因為雖然 sudo
了指令,但重導向部分仍以一般用戶身份執行所致。
錯誤示範:
sudo echo "test" > /etc/test.conf
正確寫法:
echo "test" | sudo tee /etc/test.conf
或多行寫入可用 sudo tee
或 sudo bash -c
:
sudo bash -c 'echo "line1" > /etc/test.conf'
sudoers 檔案編輯失誤導致無法操作
若直接編輯 sudoers
檔案發生語法錯誤,可能會讓 sudo 完全無法使用,風險極高。
解決方式:
- 以 root 登入(Ubuntu 預設停用 root,需注意)
- 用下列指令修復:
pkexec visudo
若無法用 pkexec,請用救援模式修正 /etc/sudoers
。
為避免語法錯誤,編輯請一律使用:
sudo visudo
出現「sudo: command not found」
sudo: command not found
這通常是系統沒裝 sudo
,或 PATH
設定異常導致找不到。
解決方式:
- 用 root 登入,重新安裝 sudo:
apt update
apt install sudo
- 或直接指定路徑執行:
/usr/bin/sudo ls
7. FAQ:sudo 常見問題解答
Q1. sudo 和 su 有什麼不同?
A:sudo
是「暫時以管理員權限執行單一指令」,su
則是「完全切換為其他用戶(多為 root)」。
sudo
:保留當前用戶,只提升權限su
:完全切換至其他用戶
出於安全和追蹤考量,現在多數推薦用 sudo
。
Q2. 用 sudo 需要輸入 root 密碼嗎?
A:
不用,通常是輸入自己的用戶密碼,而不是 root 密碼。這有助於避免 root 密碼外洩並可追蹤每個用戶的操作紀錄。
Q3. sudo 的操作紀錄存放在哪?
A:
多數 Linux 發行版會將 sudo
操作紀錄存於以下之一:
- Ubuntu/Debian:
/var/log/auth.log
- RHEL/CentOS:
/var/log/secure
- systemd 系統:
journalctl _COMM=sudo
這有助於系統管理員追蹤異常行為。
Q4. 不小心誤編輯 sudoers 檔案怎麼辦?
A:
請務必用 sudo visudo
編輯。如果已造成錯誤、sudo 無法用時,請嘗試以下方法:
- 以 root 登入後用 visudo 修正
- Ubuntu 可用「復原模式」進入 root,進行修復
- 可用
pkexec visudo
(若支援 polkit)
修正後請再次測試,避免系統失控。
Q5. 有不用 sudo 就能取得 root 權限的方法嗎?
A:
有,但不建議,安全風險高。
例如:
- 用
su
切換為 root(需 root 密碼) - 直接以 root 登入(Ubuntu 預設禁用 root)
大多數 Linux 發行版推薦用 sudo
,更安全。
Q6. 可以用 sudo 啟動 GUI 應用程式嗎?
A:
不建議。例如 sudo gedit
,可能導致設定檔權限錯誤或損壞。
建議用 pkexec
(部分環境亦可用 gksudo
):
pkexec gedit
8. 總結
正確認識 sudo 的作用
本文介紹了 Linux/Unix 系統中極為重要的 sudo
指令,從基本原理、用法、設定、進階技巧、安全防護、常見錯誤與 FAQ 均有完整說明。
sudo
不只是「加在指令前面」那麼簡單,而是保障系統安全同時方便管理的重要存取控制機制。
正確使用才能避免麻煩
安全用好 sudo
,務必注意以下重點:
- 僅以最小必要權限操作(落實最小權限原則)
- 用
visudo
安全管理設定 - 利用日誌管理操作歷史
- 重導向、管線搭配時須特別小心
- 盡量避免用於 GUI 應用
忽略這些重點,常見的狀況就會包括「檔案損壞」「設定無法回復」「sudo 失效」等問題。
選擇最適合自己的系統管理方式
Linux 系統高度彈性。除了 sudo
之外,也可根據需求考慮 doas
等工具。依據你的管理方針和資安需求,選擇最合適的管理方式,才是長期運維的關鍵。
最後
掌握 sudo
,是學習 Linux 的第一步。請將其視為守護系統安全的「鑰匙」,不僅僅是便利指令。
希望下次操作 Linux 時,你能更有信心地運用這項關鍵技術!