sudoers改坏后无法使用sudo的解决办法

Posted by AspenStars on March 24, 2022

老师在服务器添加sudo权限的时候修改了/etc/sudoers的读写权限,由于组里服务器没有配置root账号,导致所有账户都出现了sudo权限全部失效的问题。但是这个文件必须由sudo进行操作,因此陷入僵局。

系统提示:

/etc/sudoers is world writable

查阅网上的参考资料后,提示这条命令可以解决

1
pkexec chmod 440 /etc/sudoers

兴高采烈地拿到管理员密码去执行这条命令,但是又出现了下面的问题

==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===Authentication is needed to run `/usr/sbin/visudo’ as the super user

Authenticating as: ubuntu,,, (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.

应该是没有root账号,只有sudo账号导致所有sudo账号权限失效的原因,这就陷入死循环中了

然后又查了大量资料,基本上都说要去物理机上启动另一个系统来修改权限

但是突然看到这篇文章成功解决了问题

解决方案如下

  • 远程的话开两个ssh终端,能直接操作物理机的话使用ctrl+alt+F2 创建第二个终端窗口使用ctrl+alt+F1切换到tty1;ctrl+alt+F2切换到tty2
  • 两个终端,都用有sudo权限的用户登录
  • 对tty1终端:输入 echo $$ // 获取pid
  • 切换到tty2:输入pkttyagent --process $上一步获取的pid值,此时该tty2终端会卡住
  • 切到tty1:输入 pkexec visudo,此时tty1也会卡住
  • 切到tty2:会看到要求输入密码,对应输入
  • 切回到tty1:发现已经进入了visudo编辑界面,修改出错的sudoers,保存(此处可能会提示保存到sudoer.tmp等文件,这里删除后缀直接保存)
  • 修改完成,发现就可以继续使用sudo命令了

提示

/etc/sudoers文件应该使用专门的命令visudo进行修改,输入这个命令后会自动给出一个文本编辑器nano进行编辑。

另外:nano编辑器中

  • Ctrl-键被表示为一个脱字符(^),因此Ctrl+W被写成了^W,等等。
  • Alt-键被表示为一个M(从”Meta”而来),因此Alt+W被写成了M-W