Linux sudoers文件修改错误导致sudo无法使用
问题
错误修改/etc/sudoers文件,导致出现sudo命令无法正常使用的问题出现。
>>> /etc/sudoers: syntax error near line 21 <<<
sudo: parse error in /etc/sudoers near line 21
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin注意:
这里的问题,是在Ubuntu系统环境下出现的,是基于该系统进行的整理。
错误示例
youruser ALL=(ALL ALL) # 错误: 括号内容不合法原因
原因就是,编辑/etc/sudoers文件时,没有按照指定格式编辑,导致出现解析错误,无法正常使用。
解决方法
1.可以切换到root用户提权
如果可以切换到root用户,那么可以直接编辑/etc/sudoers文件,进行修改,调整错误配置项,即可恢复正常
2.无法切换到root用户
2.1桌面系统解决方法
可以通过pkexec visudo命令,编辑/etc/sudoers文件,来操作修复。
修改错误内容,保存退出Ctrl+X -> Y -> Enter(默认nano编辑器)
server版本,没有桌面,无法通过pkexec visudo命令修改,会报错,执行失败
ubuntu@ubuntu:~$ pkexec visudo
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/sbin/visudo' as the super user
Authenticating as: ubuntu
Password:
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
This incident has been reported.这是因为 pkexec 依赖于 图形化 Polkit Session(PolicyKit 会话),而在你当前的 shell 环境下(如 TTY、SSH、LiveCD 环境等),没有注册 Polkit 会话,所以认证失败。
2.2服务器系统解决方法
在不知道root密码的情况下,无法切换到root用户操作
没有图形化,无法使用pkexec visudo修复
这种情况,可以通过进入恢复模式修复
1.重启系统
2.在GRUB页面选择,进入恢复模式
如果不显示GRUB页面,可以通过点击Shift(Bios)或者ESC(UEFI)进入菜单
选择 Advanced options for Ubuntu
选择带有 recovery mode 的启动项,按 e 编辑
修改 linux 开头的行
linux /vmlinuz-.... ro recovery nomodeset dis_ucode_ldr
删除 recovery(如果你想进入正常模式)
删除 nomodeset(如果你显卡正常)
删除 dis_ucode_ldr(如果你想启用微码加载)
或添加 init=/bin/bash 来进入 root shell:
调整为
linux /vmlinuz-.... rw single init=/bin/bash
ro 改为 rw,以允许你读写系统文件;
添加 single init=/bin/bash 进入最简 root shell;
Ctrl+X 保存,进入恢复模式
3.修改/etc/sudoers文件,删除导致异常的条目或调整为正常
vim /etc/sudoers
4.重启后即可恢复正常使用
reboot -f
该模式无法reboot?
执行reboot,提示信息:
System has not been booted with systemd as init system(PID 1).Can't operate.
Failed to talk to init daemon
# 可以添加 -f 参数,强制重启
reboot -f 应该也可以通过live 光盘(Ubuntu 安装盘),进入Live系统,挂载分区,进入chroot环境,进行修改。但是这里没有尝试。
问题复现
编辑/etc/sudoers文件,添加错误内容,进行问题复现
youruser ALL=(ALL ALL) # 错误: 括号内容不合法Ubuntu 22.04
在Ubuntu 22.04 无法复现该问题,会提示语法错误,而不保存,不会出现该问题
$ sudo vim /etc/sudoers
/etc/sudoers:56:19: syntax error
youruser ALL=(ALL ALL)
^~~sudo版本
$ sudo -V
Sudo version 1.9.9
Sudoers policy plugin version 1.9.9
Sudoers file grammar version 48
Sudoers I/O plugin version 1.9.9
Sudoers audit plugin version 1.9.9Ubuntu 18.04
可以复现,估计和sudo版本有关
swift@ubuntu:~$ sudo -V
Sudo version 1.8.21p2
Sudoers policy plugin version 1.8.21p2
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.21p2编辑/etc/sudoers添加错误示例youruser ALL=(ALL ALL),导致无法执行sudo操作
swift@ubuntu:~$ sudo cat /etc/hosts
>>> /etc/sudoers: syntax error near line 32 <<<
sudo: parse error in /etc/sudoers near line 32
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
swift@ubuntu:~$ sudo vim /etc/sudoers
>>> /etc/sudoers: syntax error near line 32 <<<
sudo: parse error in /etc/sudoers near line 32
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin处理方法:
参考上述解决方法