既然 kdesudo 已经消失,我如何在 kubuntu 18.04 上的 bash 中运行图形化 sudo?

既然 kdesudo 已经消失,我如何在 kubuntu 18.04 上的 bash 中运行图形化 sudo?

sudoTL;DR:通过 shell 脚本进行图形化的新正确方法是什么?

挥舞:

我刚刚从 kubuntu 16.04 升级到 18.04,并且正在进行正常分类。

kdesudo在 18.04 中已消失(不再维护)。

我在带有 GUI i/o 的 bash 脚本中经常使用它。

有些帖子说使用kdesu- 这似乎很奇怪。我似乎记得它扰乱了有效用户或类似的东西。

它没有安装在我的 PATH 中。

我发现

bigbird@sananda:~/pq$ ls -l /etc/alternatives/kdesu
rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu -> 
/usr/lib/kde4/libexec/kdesu-distrib/kdesu

仍然显示 kde4。

我试过sudo -A ls

它说

bigbird@sananda:~$ sudo -A ls
sudo: no askpass program specified, try setting SUDO_ASKPASS

我绕了几圈查看ksshaskpassssh-askpass,但都说它们不打算被直接调用。

我是不是做任何事ssh

我需要这个来执行 bash 脚本,这些脚本几乎可以以普通用户身份执行所有操作,然后以 root 身份运行一两个命令。这些脚本通常从没有打开终端窗口的桌面图标启动(我不需要也不想要终端窗口)。它们通常使用yad(如zenitykdialog)与用户交互。

答案1

正如您所发现的,您可以将 -A 选项与 sudo 一起使用,但您需要一种 gui 方法来向 sudo 提供密码。

您可以随心所欲地编写这样的工具,只要它在 stdout 上将密码传回 sudo 即可。我使用一种很久以前有人向我建议的简单解决方案,即使用 kdialog,并且像所有简单的解决方案一样,它一直是我的首选。

因此,请创建一个简单的 kdialog 脚本,例如这个

    #!/bin/bash
    kdialog --password "Password required to proceed"

现在你可以像这样使用 sudo 来使用它

    #!/bin/bash
    export SUDO_ASKPASS=<path to your kdialog script>
    sudo -A foo

当然,如果你没有 kde,你可以使用任何你想要的语言作为你的 gui 密码提供程序

编辑:绕过 sudo passwd_tries 的解决方法

这样您就可以只询问一次密码(正如您想要做的那样),您可以将密码捕获到脚本中的变量中,然后使用 -S 开关将该变量直接传递给 sudo 命令。

这样做的好处是它忽略了 sudo passwd_tries 规则,但仍然需要交互式密码输入,因此密码不存储在脚本中。

PASSWD=$(kdialog --password "sudo password required")
echo $PASSWD | sudo -S foo

如果脚本中不需要多个 sudo 命令,您也可以直接在一行上执行此操作,如下所示

echo $(kdialog --password "sudo password required") | sudo -S foo

当然,如果您希望在所有脚本中都有标准的 kdialog 提示,您可以使用我们之前讨论过的您自己的 kdialog 脚本来代替这里的 kdialog。

从我的角度来看,绕过 sudo 的 passwd_tries 的问题在于,如果密码错误,脚本将继续处理 sudo 命令之后的任何命令,因此如果 sudo 提升的命令对于脚本的成功至关重要,那么您就会遇到问题。

需要注意的是,kdialog(或 zenity 等替代方案)的密码写在 stdout 上,这一点我之前应该提到过,因此任何捕获 PID 的 stdout 的人都会看到您的密码。但任何黑客入侵您的系统都会做更多的事情。

答案2

你有没有尝试过pkexec

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit

答案3

不仅 kdesudo,而且也 gksu被弃用了。这些变化至少有点烦人。看来我们现在应该采取的方法是利用前缀,admin://例如,如果你以前使用前缀,那么kdesudo gedit /etc/default/grub现在你会改为gedit admin:///etc/default/grub如果我放弃 16.04 而使用“全新改进”版本,这肯定需要一些时间来适应。

另一个可能的解决方案是首先在终端启动脚本。

来源:https://www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html

答案4

我刚刚找到一些答案这里

其要点如下:

目前,解决方法是找到kdesu系统上的安装位置

你可以用

ls -l /etc/alternatives/kdesu

kdesudo然后为$HOME/.bashrc或 (如果使用的话) 添加别名$HOME/.bash_aliases

别名是

## Resurect kdesudo - this will probably fail eventually
alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu'

确保将路径调整为kdesu您在上一步中找到的路径。

这对于 KDE 下的一些程序不起作用,因为

KDE 开发人员正在研究 polkit 路线,以允许其他应用程序临时提升权限,就像他们已经为 Kate 所做的那样。—— GreyGeek

当他们这样做时,他们会禁用直接提升,因为(如果运行正常)你不再需要它。程序只会在需要执行特权操作时要求输入密码。这在脚本中如何工作还有待观察。

相关内容