现在kdesudo已经消失了,如何在kubuntu 18.04上的bash中运行图形sudo?
TL; DR:从shell脚本执行图形化sudo
的新方法是什么?
挥舞:
我刚从kubuntu 16.04升级到18.04,我正在进行正常的分流。
kdesudo
在18.04离开了(没有维护)。
我在使用GUI i / o的bash脚本中经常使用它。
有些post说使用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
我走了几圈看着ksshaskpass
和ssh-askpass
,但两人都说他们不打算直接打电话。
我没有用ssh
做任何事情。
我需要这个用于作为普通用户执行几乎所有操作的bash脚本,然后以root身份运行一个或两个命令。 这些脚本通常是从没有打开终端窗口的桌面图标启动的(我不需要或想要一个。)他们经常使用yad
(如zenity
或kdialog
)与用户交互。
正如您所发现的,您可以在sudo中使用-A选项,但是您需要一个为sudo提供密码的gui方法。
你可以随意编写这样的工具,只要它将密码传递回stdout上的sudo即可。 我使用了一个很久以前有人向我建议的简单解决方案,它使用kdialog,就像所有简单的解决方案一样,它一直是我的追随者。
所以创建一个简单的kdialog脚本,比如这个
#!/bin/bash kdialog --password "Password required to proceed"
现在你像这样使用sudo
#!/bin/bash export SUDO_ASKPASS= 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。
从我的POV绕过sudo的passwd_tries的问题是,如果你输错密码,你的脚本将继续处理sudo命令之后的任何命令,所以如果sudo raise命令对于脚本的成功至关重要,那么你就会遇到问题。
需要注意的是,来自kdialog的密码(或者像zenity这样的替代品)写在stdout上,这是我之前应该提到的,所以任何捕获了PID标准输出的人都会看到你的密码。 但是,你系统上的任何黑客都会做更多的事情。
我刚刚在这里找到了一些答案。
它的要点是:
目前,解决方法是找到系统上安装kdesu
位置
你可以做什么
ls -l /etc/alternatives/kdesu
然后为$HOME/.bashrc
添加kdesudo
的别名,或者如果使用它, $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
当他们这样做时,他们禁用直接提升,因为(如果它正常工作)你不再需要它。 程序只需要在需要执行特权操作时请求密码。 它将如何在脚本中起作用还有待观察。
你试过pkexec
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
不仅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