/etc/sudoers 文件已损坏,我无法通过 SSH 运行“pkexec visudo”

Tho*_*sen 24 ssh sudo policykit pkexec 16.04

按照这里的说明我得到:

pkexec visudo

==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/sbin/visudo' as the super user
Authenticating as: Thomas,,, (tuc) 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.
Run Code Online (Sandbox Code Playgroud)

我是通过 ssh 执行此操作的,因为我正在执行此操作的盒子用作没有屏幕的音乐服务器,并且无法访问。这发生在我从 Ubuntu 14.04 升级到 16.04 时。我试图从另一个最近的 16.04 安装中复制一个 sudoers 文件,但由于 sudoers 文件,我无法这样做:

sudo mv ~/gyrf sudoers

>> /etc/sudoers: syntax error near line 36 <<<
>> /etc/sudoers: syntax error near line 37 <<<
>> /etc/sudoers: syntax error near line 38 <<<
>> /etc/sudoers: syntax error near line 39 <<<
>> /etc/sudoers: syntax error near line 40 <<<
>> /etc/sudoers: syntax error near line 41 <<<
>> /etc/sudoers: syntax error near line 42 <<<
>> /etc/sudoers: syntax error near line 43 <<<
>> /etc/sudoers: syntax error near line 44 <<<
>> /etc/sudoers: syntax error near line 45 <<<
>> /etc/sudoers: syntax error near line 46 <<<
>> /etc/sudoers: syntax error near line 47 <<<
>> /etc/sudoers: syntax error near line 48 <<<
>> /etc/sudoers: syntax error near line 49 <<< 
sudo: parse error in /etc/sudoers near line 36    
sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
Run Code Online (Sandbox Code Playgroud)

我应该去阁楼拿盒子试试pkexec visudo还是这里有什么问题?

Sat*_* A. 66

我也遇到了这个问题,并通过一些挖掘找到了一个可行的解决方案。原始解决方案来自EstalillaJ 针对 NixOSgithub 问题

  1. 打开到目标服务器的两个 ssh 会话。

  2. 在第一个会话中,通过运行获取 bash 的 PID:

    echo $$

  3. 在第二个会话中,使用以下命令启动身份验证代理:

    pkttyagent --process (pid from step 2)

  4. 回到第一个会话,运行:

    pkexec visudo

  5. 在第二个会话中,您将收到密码提示。visudo 将在第一个会话中启动。

  • 该死的家伙,你救了我的命!谢谢:D (8认同)
  • 这太疯狂了,它工作完美!并且无需重新启动系统 (3认同)
  • 非常感谢,这真的救了我!⭑ (3认同)
  • 让我免于重新启动服务器进入恢复状态,太棒了! (2认同)
  • 我不明白为什么它有效,但它有效。 (2认同)
  • 对于那些像我一样搞砸了“sudoers”文件的人来说,这是一个绝妙的修复。如果有人能解释一下那就太好了。很高兴了解“PolicyKit”。谢谢。 (2认同)
  • 我很高兴这对你们有帮助。当我找到原始答案时,我同样激动!@Long,据我所知,pkexec 与 sudo 类似,允许您升级到 root 权限。根据实现,它将在用户(wheel、sudo 等)上寻找不同的组。由于 sudoers 文件已损坏,因此 sudo 无法检查用户是否具有升级 privs 的权限。我认为这两个 SSH 会话只是 pkexec 设计方式的一个怪癖。我主要在桌面环境中看到它作为密码提示 (2认同)

PDD*_*PDD 5

我的回答基于 Satyen 的

它在 Debian 10.4 上进行了测试,无法运行 visudo

  1. 打开两个到目标服务器的 ssh 会话。

  2. 在第一个会话中,通过运行以下命令获取 bash 的 PID:

    echo $$

  3. 在第二个会话中,使用以下命令启动身份验证代理:

    pkttyagent --process (pid from step 2)

  4. 回到第一个会话,运行:

    pkexec su

  5. 在第二个会话中,您将收到密码提示。su 将在第一个会话中启动。

  6. 编辑 /etc/sudoers(CTRL+S 保存编辑,CTRL+X 退出)

    nano /etc/sudoers