【Linux 新手必看】sudo 指令完整教學:權限、用法、設定、常見問題一次解決

目次

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 群組。

解決方式:

  1. 以有 root 權限的用戶登入
  2. 將該用戶加進 sudo 群組
sudo usermod -aG sudo 用戶名

登出並重新登入後即可正常用 sudo。

重導向、管線用法出現「權限不足」錯誤

Permission denied

這是因為雖然 sudo 了指令,但重導向部分仍以一般用戶身份執行所致。

錯誤示範:

sudo echo "test" > /etc/test.conf

正確寫法:

echo "test" | sudo tee /etc/test.conf

或多行寫入可用 sudo teesudo bash -c

sudo bash -c 'echo "line1" > /etc/test.conf'

sudoers 檔案編輯失誤導致無法操作

若直接編輯 sudoers 檔案發生語法錯誤,可能會讓 sudo 完全無法使用,風險極高。

解決方式:

  1. 以 root 登入(Ubuntu 預設停用 root,需注意)
  2. 用下列指令修復:
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 時,你能更有信心地運用這項關鍵技術!