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高性能优化的几个关键点
