创建的Centos 虚拟机,开机后使用sudo su 切换root 用户是报错。
提示is not in the sudoers file,说明该用户无任何 sudo 权限,唯一解决方式是进入 CentOS 7 单用户模式(绕过权限验证),要么直接重置 root 密码、要么将普通用户加入 sudoers 文件。以下是一步到位的操作步骤,适配虚拟机(VMware/VirtualBox/OpenStack 等)场景:
核心原理
CentOS 7 单用户模式会跳过系统权限验证,直接以 root 身份进入命令行,可修改任意系统配置(包括 sudoers、root 密码)。
步骤1:重启虚拟机,进入 GRUB 编辑模式
- 重启虚拟机(执行
reboot,或在虚拟机控制台点击「重启」); - 当开机出现CentOS 7 启动 GRUB 菜单(屏幕显示
CentOS Linux (3.10.0-xxx.el7.x86_64) 7 (Core))时,立即按e键(GRUB 菜单仅停留 2~3 秒,需提前准备,错过则重新重启);- 若未看到 GRUB 菜单:开机时持续按
ESC键(虚拟机控制台),强制调出 GRUB 菜单。
- 若未看到 GRUB 菜单:开机时持续按
步骤2:修改内核参数,进入单用户模式
- 在 GRUB 编辑界面,找到以
linux16开头的行(内核启动核心行),将光标移到该行末尾(可按方向键 ←/→ 调整); - 追加以下内容(注意空格分隔):
示例(修改后):init=/bin/bashlinux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet init=/bin/bash - 按下
Ctrl + X执行修改后的内核配置,系统会直接进入单用户模式(命令行提示符为bash-4.2#,无需密码)。
步骤3:挂载根目录为可读写(关键)
单用户模式下根目录默认是只读,无法修改文件,先执行挂载命令:
mount-o remount,rw /执行后无报错即成功(若提示mount: / is busy,可忽略,直接执行后续步骤)。
步骤4:二选一解决权限问题(推荐方案2,更直接)
方案1:将普通用户加入 sudoers 文件(保留普通用户操作)
- 用
visudo编辑 sudoers 文件(必须用 visudo,避免语法错误导致 sudo 失效):visudo - 在文件中找到以下行(通常在文件中部):
root ALL=(ALL) ALL - 在该行下方添加普通用户的 sudo 权限(将
your_username替换为你的虚拟机普通用户名,如centos/admin等):your_username ALL=(ALL) ALL- 若想让该用户免密使用 sudo(推荐),改为:
your_username ALL=(ALL) NOPASSWD: ALL
- 若想让该用户免密使用 sudo(推荐),改为:
- 按
ESC键,输入:wq保存并退出visudo(若提示只读,可输入:wq!强制保存)。
方案2:重置 root 密码(直接用 root 操作,更简单)
无需配置 sudo,直接给 root 设置密码,后续全程用 root 操作:
passwdroot按提示输入 2 次 root 密码(输入时无回显,确保两次一致),成功后会提示:
passwd: all authentication tokens updated successfully.步骤5:修复 SELinux 上下文,重启系统
- 执行以下命令(避免重启后权限异常):
touch/.autorelabel - 重启虚拟机:
exec/sbin/init- 重启过程可能稍慢(SELinux 自动重标文件上下文),属于正常现象,等待 1~2 分钟即可。
步骤6:验证操作结果
验证方案1(普通用户加 sudo 权限):
- 登录普通用户,执行:
若输出包含sudo-l(ALL) ALL,说明 sudo 权限生效; - 测试 sudo 命令(如修改主机名):
无权限报错即成功。sudohostnamenew-name
验证方案2(root 密码):
- 登录普通用户后,执行:
su- root - 输入刚设置的 root 密码,提示符变为
#即切换成功,后续操作无需 sudo。
关键注意事项
visudo编辑错误的补救:若编辑 sudoers 时语法错误,重启后 sudo 失效,需重新进入单用户模式,执行visudo -c检查语法,再重新编辑;- 虚拟机控制台操作:若远程连接(如 SSH)无法操作,必须通过虚拟机「控制台界面」(VMware 控制台/VirtualBox 窗口)执行以上步骤;
- SELinux 影响:若
touch /.autorelabel后重启过慢,可临时关闭 SELinux(单用户模式下执行setenforce 0),但生产环境不建议永久关闭。
完成后,你就可以用 root 用户(或带 sudo 权限的普通用户)继续操作了。