我在服务器上配置Ansible,其中我在所有服务器上创建了一个Ansible用户,并给予他们sudo访问权限,因此每当我使用Ansible用户向另一个服务器ssh时,就不应该向我询问密码。我成功地在两台服务器上配置了它,但是当我通过更改/etc/sudoers/
文件在另一台服务器上进行配置时,系统变得没有响应,然后我重新启动了我的终端,现在当我试图将服务器登录到根用户时,它正在抛出一个错误。
$ sudo su
/etc/sudoers: syntax error near line 121 <<< sudo: parse error in /etc/sudoers near line 121 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
发布于 2023-05-20 12:43:58
您已经破坏了sudoers
文件,因此sudo
将拒绝任何访问。如果您有根密码,那么您可以使用它来修复这个问题:
su -
visudo
如果没有,则需要使用救援磁盘启动系统,并以这种方式重置sudoers
文件。要复杂得多。
不要在不使用/etc/sudoers
的情况下手动编辑visudo
文件,因为它执行语法检查以防止这种情况。
顺便说一句,没有必要使用sudo su
(它使用sudo
获取根权限,然后要求su
(已经作为root用户)再次授予它们)。sudo -s
或者sudo -i
是完全足够的。
发布于 2023-05-20 14:15:05
如果您没有根密码,但您的用户帐户位于wheel
组(或Debian/Ubuntu的sudo
组),那么还有一件事需要尝试:
pkexec visudo
它应该提示您输入密码(比sudo
更详细),然后允许您编辑/etc/sudoers
文件。
如果您没有剩余的任何活动根会话,并且无法获得它们(无论是使用sudo
还是pkexec
),那么恐怕没有一些停机时间就无法修复它。
我不熟悉Oracle Cloud。但是,由于您显然是在云服务器上,并且有几个这样的服务器,修复它的最后一种方法是使用云管理接口强制关闭服务器,然后暂时断开虚拟系统磁盘与问题云服务器的连接,并将该虚拟磁盘作为额外的磁盘呈现给第二个云服务器。然后,您可以将问题服务器的根文件系统挂载到例如第二个服务器(“修复服务器”)中的/mnt
,并运行visudo -f /mnt/etc/sudoers
来修复语法错误。完成此操作后,您将从修复服务器卸载和断开磁盘,并将其返回问题服务器。
如果云管理接口没有允许您对VM执行此操作所必需的功能,则必须与云操作员(即Oracle?)联系。以寻求支持。他们应该非常熟悉这种类型的问题:您肯定不是第一个因为错误而失去对云服务器的根访问权的人。
https://unix.stackexchange.com/questions/746449
复制相似问题