行知絮语

知行合一,步履不辍。

IT技术

【Linux 排错】彻底解决 user is not in the sudoers file 报错及权限不生效问题

2026年08月10日 admin 2 阅读

在 Linux (如 Ubuntu/Debian) 系统中,当我们使用普通用户执行 sudo 命令时,经常会遇到如下报错:

cmcc is not in the sudoers file.

本文将详细讲解如何通过 root 账户授权 并配合 Session 刷新 来彻底解决该问题,避免因“授权后未刷新环境变量”而导致配置看似失效的尴尬。


一、 问题原因分析

  1. 缺乏提权权限:Linux 系统通过 /etc/sudoers 文件管理用户提权规则。当前用户未被列入 sudoers 文件,也未加入拥有管理员权限的用户组(如 sudo 组)。
  2. 凭证未及时刷新:当我们将用户加入 sudo 组后,当前已经打开的 SSH 会话(Session)依然保留着登录时的旧权限凭证。如果不刷新组权限或重新登录,直接执行 sudo 依然会报同样的错误。

二、 彻底解决方案(两步法)

第一步:切换至 root 用户完成授权

由于当前普通用户没有超级用户权限,必须先通过拥有 root 权限的账号进行授权。

  1. 切换到 root 账户
    su -

(输入 root 用户的密码)

  1. 将普通用户加入 sudo(以用户 cmcc 为例):
    usermod -aG sudo cmcc

参数说明

  • -a (--append):追加用户组,不改变用户原本所在的其他组。
  • -G (--groups):指定目标用户组(Ubuntu/Debian 为 sudo,CentOS/RHEL 通常为 wheel)。
  1. 退出 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