Linux系統非root用戶使用sudo命令報錯應該如何解決?
Linux系統非 root 用戶使用 sudo 命令報錯是一個常見問題。解決這個問題的核心在于:該用戶必須被授予使用 sudo 的權限。
錯誤原因分析
當你看到類似這樣的錯誤時:
[username] is not in the sudoers file. This incident will be reported.
或者
[username] is not allowed to run sudo on [hostname].
根本原因是:該用戶賬戶沒有被系統信任為可以使用 sudo 命令的賬戶。
在 Linux 中,sudo 的權限由 /etc/sudoers 文件控制。只有在這個文件中明確指定的用戶或用戶組,才能使用 sudo。
解決方法
根據你當前擁有的權限,解決方法不同。請參照以下流程圖找到適合你的路徑:

方案一:由 root 用戶操作(最常見和標準的做法)
你需要一個有 root 權限的用戶來執行以下操作。
方法A:將用戶加入 wheel 組 (推薦)
在大多數 Linux 發行版(如 CentOS, Fedora, RHEL)中,wheel 組的成員默認擁有 sudo 權限。在 Debian/Ubuntu 及其衍生版中,對應的通常是 sudo 組。
切換到 root 用戶:
su - root
或者使用另一個有 sudo 權限的用戶:
sudo su - root
將目標用戶添加到 wheel (或 sudo) 組:
對于 CentOS/RHEL/Fedora:
usermod -aG wheel <用戶名>
對于 Debian/Ubuntu:
usermod -aG sudo <用戶名>
參數解釋:
-a:追加,表示將用戶添加到組而不移出其他組。
-G:指定組名。
驗證:
讓該用戶重新登錄(或開啟一個新的終端),然后運行:
sudo whoami
如果正確輸入密碼后輸出 root,則表示成功。
方法B:使用 visudo 命令單獨添加用戶
這種方法更精細,可以控制用戶能執行的命令范圍。
1:以 root 用戶身份運行 visudo:
visudo
重要:visudo 會檢查語法,防止你生成一個有語法錯誤的 sudoers 文件而導致所有 sudo 功能失效。
2:在文件中添加規則:
在打開的文件中找到類似的位置,添加一行:
# 允許用戶 "username" 在任何主機上以任何用戶身份運行任何命令 username ALL=(ALL) ALL # 允許用戶 "username" 在任何主機上以任何用戶身份運行任何命令,且無需輸入密碼 (不安全,請謹慎使用) username ALL=(ALL) NOPASSWD: ALL # 允許組 "groupname" 的成員在任何主機上以任何用戶身份運行任何命令 %groupname ALL=(ALL) ALL
保存并退出(在 vi 編輯器中是按 Esc 然后輸入 :wq)。
方案二:如果你是系統的唯一擁有者(例如你的個人電腦)
如果你忘記了 root 密碼,或者初始用戶沒有 sudo 權限,你可以通過重啟系統進入 單用戶模式 或 恢復模式 來獲取 root 權限。
警告:此方法需要物理機或虛擬機控制臺訪問權限,不適用于遠程服務器。
步驟(以 GRUB 引導器為例):
1:重啟系統。在 GRUB 啟動菜單出現時,迅速按下 Esc、Shift 或 上下箭頭鍵 以進入菜單。
2:選擇第一個啟動項(通常是默認的 Linux 內核),然后按下 e 鍵進行編輯。
3:找到以 linux 或 linux16 或 linuxefi 開頭的行。
4:移動到該行的末尾,先添加一個空格,然后輸入:
single
或者
systemd.unit=rescue.target
(不同發行版可能略有不同)
5:按下 Ctrl + X 或 F10 以這個修改后的配置啟動。
6:系統會啟動到一個 root shell 提示符下(不需要密碼)。
7:現在你擁有了 root 權限,可以按照 方案一 中的方法,使用 usermod 或 visudo 為你的用戶添加 sudo 權限。
8:完成后,執行 reboot 重啟系統。
上一篇:Nginx高性能優化的幾個關鍵點
下一篇:Linux系統命令:配置介紹及修改配置
