sudo (superuser do) 讓一般使用者以提升權限執行特定命令,是 Linux 系統管理的核心授權機制。本文深入解析 sudo 運作原理、/etc/sudoers 設定語法、visudo 安全編輯、常用選項 (-b, -s, sudo su -) 與安全強化建議。

/var/log/secure 或 /var/log/auth.log 記錄誰、何時、執行什麼指令。使用者/群組 主機=(切換身分) 命令清單
# 範例:
user1 ALL=(ALL) ALL # user1 可在任何主機以任何身分執行任何命令
%wheel ALL=(ALL) ALL # wheel 群組成員享有完整 sudo 權限
user2 ALL=(root) /bin/systemctl restart httpd # 僅能以 root 重啟 httpd
user3 ALL=(ALL) NOPASSWD: /bin/cat /var/log/* # 免密碼讀取日誌
visudo
# 1. 鎖定檔案防止並發編輯
# 2. 使用 vi/vim 編輯
# 3. 存檔時自動語法檢查,錯誤則拒絕存檔
切勿直接用 vim /etc/sudoers,語法錯誤會導致所有 sudo 失效,需單人模式修復。
| 選項 | 說明 |
|---|---|
| -b | 背景執行 (適合長時間輸出命令) |
| -s | 啟動提權 Shell (提示符變 #,輸入 exit 返回) |
| sudo su - | 切換為 root 並載入 root 環境變數 (慎用) |
| -u user | 以指定使用者身分執行 (非 root) |
| -g group | 以指定群組身分執行 |
| -k | 使時間戳失效,下次需重新輸入密碼 |
| -v | 延長時間戳效期 (預設 15 分鐘) |
| -l | 列出當前使用者可執行的 sudo 命令 |
首次 sudo 需輸入密碼,成功後建立時間戳 (/var/run/sudo/ts/),預設 15 分鐘內免再輸入。sudo -k 可立即失效,sudo -v 可延長。
ALL。%wheel ALL=(ALL) ALL,用戶加入 wheel 群組即獲權限。NOPASSWD 僅限唯讀/低風險操作 (如讀取日誌)。Defaults logfile=/var/log/sudo.log 或 syslog 記錄。Defaults env_reset、Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。Defaults requiretty (防止腳本/遠程無終端竄改),但會影響自動化部署,視環境權衡。user NOT in sudoers file → 編輯 sudoers 加入該用戶/群組。sudo: parse error in /etc/sudoers near line N → 語法錯誤,進入單人模式用 visudo 修正。sudo: no tty present and no askpass program specified → 關閉 requiretty 或設定 SUDO_ASKPASS。sudo 是 Linux 權限管理的基石。善用 visudo 安全編輯、群組授權、命令白名單、審計日誌與環境變數隔離,即能在便利性與安全性間取得平衡。切記:「權力越大,責任越大」,每一條 sudo 規則都應經過審慎評估。