【Linux 排错】彻底解决 user is not in the sudoers file 报错及权限不生效问题
在 Linux (如 Ubuntu/Debian) 系统中,当我们使用普通用户执行 sudo 命令时,经常会遇到如下报错:
cmcc is not in the sudoers file.
本文将详细讲解如何通过 root 账户授权 并配合 Session 刷新 来彻底解决该问题,避免因“授权后未刷新环境变量”而导致配置看似失效的尴尬。
一、 问题原因分析
- 缺乏提权权限:Linux 系统通过
/etc/sudoers文件管理用户提权规则。当前用户未被列入sudoers文件,也未加入拥有管理员权限的用户组(如sudo组)。 - 凭证未及时刷新:当我们将用户加入
sudo组后,当前已经打开的 SSH 会话(Session)依然保留着登录时的旧权限凭证。如果不刷新组权限或重新登录,直接执行sudo依然会报同样的错误。
二、 彻底解决方案(两步法)
第一步:切换至 root 用户完成授权
由于当前普通用户没有超级用户权限,必须先通过拥有 root 权限的账号进行授权。
- 切换到
root账户:su -
(输入 root 用户的密码)
- 将普通用户加入
sudo组(以用户cmcc为例):usermod -aG sudo cmcc
参数说明:
-a(--append):追加用户组,不改变用户原本所在的其他组。-G(--groups):指定目标用户组(Ubuntu/Debian 为sudo,CentOS/RHEL 通常为wheel)。
- 退出 root 账号:
exit
第二步:刷新权限凭证(关键步骤)
完成步骤一后,回到普通用户终端,直接执行 sudo 往往仍会报错。这是因为当前 Shell 进程尚未更新用户组列表。
方案 A:使用 newgrp 立即刷新(推荐,无需断开连接)
在当前普通用户终端中直接运行:
newgrp sudo
newgrp命令会发起一个新的 Shell 并实时加载sudo组权限,无需注销或重启 SSH 会话即可立即生效。
方案 B:重新建立 SSH 连接
如果不方便使用 newgrp,可以退出当前 SSH 并重新登录:
# 退出当前连接
exit
# 重新 SSH 登录
ssh cmcc@<服务器IP>
三、 验证配置是否彻底成功
在普通用户终端下,运行以下命令验证提权是否生效:
sudo whoami
预期的正确输出:
[sudo] password for cmcc:
root
如果成功输出了 root,说明该用户已获得完整的 sudo 权限,后续运行脚本或安装依赖将不再受阻。
四、 拓展与补充
-
CentOS / RHEL 差异:在 CentOS/RHEL 系统中,管理员组通常是
wheel而非sudo,对应命令为:usermod -aG wheel cmcc -
验证用户所属组:随时可以通过
groups命令查看当前用户已加入的所有组:groups