初學 Linux 時,嘗試執行 sudo 指令卻提示 xxx is not in the sudoers file. This incident will be reported. 是常見挫折。本文記錄完整解決流程,並補充 sudoers 進階配置技巧,助您掌握 Linux 權限管理核心。
預設只有 root 與 sudo 群組成員能執行 sudo。一般使用者未被加入 /etc/sudoers 設定檔,故無權限執行。
su - root
# 輸入 root 密碼
注意:需具備 root 密碼。若雲端主機僅提供金鑰登入,請先以具 sudo 權限的使用者登入(如 ubuntu、ec2-user)。
chmod u+w /etc/sudoers
/etc/sudoers 預設唯讀(440),編輯前必須授予擁有者寫入權限。
visudo
# 或 vi /etc/sudoers
強烈建議使用 visudo:它會在儲存前自動語法檢查,防止配置錯誤導致無法 sudo(進而無法修復)。
在檔案中找到:
root ALL=(ALL) ALL
在其下方新增一行(將 xxx 替換為您的使用者名稱):
xxx ALL=(ALL) ALL
chmod u-w /etc/sudoers
恢復唯讀狀態,防止惡意或誤修改。
在 sudoers 中可依需求選擇以下任一行:
| 配置行 | 效果 | 適用場景 |
|---|---|---|
youuser ALL=(ALL) ALL | 允許使用者 youuser 執行所有指令,需輸入密碼 | 標準管理員帳號 |
%youuser ALL=(ALL) ALL | 允許群組 youuser 成員執行所有指令,需輸入密碼 | 團隊共用管理權限 |
youuser ALL=(ALL) NOPASSWD: ALL | 允許使用者 youuser 執行所有指令,免密碼 | 自動化腳本、CI/CD 機器人 |
%youuser ALL=(ALL) NOPASSWD: ALL | 允許群組 youuser 成員執行所有指令,免密碼 | 自動化部署群組 |
關鍵差異:% 前綴代表群組;NOPASSWD: 表示免密碼(生產環境謹慎使用,建議搭配指令白名單限制)。
wheel 或 admin 群組,將需 sudo 的使用者加入群組,統一在 sudoers 配置群組權限,單一維護點。deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx。sudo 執行記錄預設寫入 /var/log/secure 或 /var/log/auth.log,定期審查。visudo -f /etc/sudoers.d/username 建立獨立配置檔,主檔保持乾淨,套件升級不衝突。# 切回一般使用者
su - xxx
# 測試 sudo
sudo whoami
# 輸出 root 即成功
搞定 sudo 權限,是 Linux 進階之路的第一關。養成「最小權限、群組管理、審計追蹤」習慣,才能在生產環境遊刃有餘。