目次 1 1. 前言:什麼是 sudo?1.1 sudo 的基本意義與作用1.2 與 su 指令的差異1.3 常用 sudo 的代表性 Linux 發行版1.4 為何會有「sudo sudo」這樣的搜尋?2 2. sudo 指令的基本用法2.1 sudo 的基本語法2.2 密碼驗證與快取機制2.3 常用的 sudo 選項2.3.1 -u(以其他用戶身份執行)2.3.2 -s(啟動 root shell)2.3.3 -i(完全以 root 身份登入)2.3.4 -l(查詢可執行的指令)2.4 新手需注意的事項3 3. sudoers 檔案與存取控制3.1 什麼是 sudoers 檔案?3.2 用 visudo 指令安全編輯3.3 基本語法與設定範例3.4 以群組管理權限:sudo 群組3.5 NOPASSWD 選項的使用與注意事項4 4. sudo 的進階用法4.1 以特定用戶身份執行指令4.2 與重導向、管線合併使用4.3 腳本中使用 sudo4.4 常用的方便指令5 5. 安全性與最佳實踐5.1 遵守最小權限原則5.2 操作紀錄與稽核5.3 曾經發生的 sudo 漏洞(CVE-2021-3156)5.4 sudo 的替代方案:介紹 doas6 6. 常見錯誤與排錯技巧6.1 出現「用戶未被包含在 sudoers 檔案中」錯誤6.2 重導向、管線用法出現「權限不足」錯誤6.3 sudoers 檔案編輯失誤導致無法操作6.4 出現「sudo: command not found」7 7. FAQ:sudo 常見問題解答7.1 Q1. sudo 和 su 有什麼不同?7.2 Q2. 用 sudo 需要輸入 root 密碼嗎?7.3 Q3. sudo 的操作紀錄存放在哪?7.4 Q4. 不小心誤編輯 sudoers 檔案怎麼辦?7.5 Q5. 有不用 sudo 就能取得 root 權限的方法嗎?7.6 Q6. 可以用 sudo 啟動 GUI 應用程式嗎?8 8. 總結8.1 正確認識 sudo 的作用8.2 正確使用才能避免麻煩8.3 選擇最適合自己的系統管理方式8.4 最後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 visudovisudo 可幫你安全檢查並儲存 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.logRHEL/CentOS:/var/log/securesystemd 系統: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 時,你能更有信心地運用這項關鍵技術!