分页: 1 / 1

sudo改用pkexec的问题

发表于 : 2023-02-19 11:57
huangsijun17
一段脚本里,原来有两处sudo。现在想改用pkexec,怎么在第二处提权时免输密码?

Re: sudo改用pkexec的问题

发表于 : 2023-02-22 21:44
lanxing0821
你可以换一种思路,比如你为什么用 pkexec 而不用 sudo ?是不方便在终端输入密码,还是纯粹地只想换个提升用户权限的程序?如果是前者,你完全可以用 sudo 的 -A 选项来替代。

举个例子,假设你的电脑已经安装了 ssh-askpass 辅助程序(如果没有,则可以通过如下命令来安装):

代码: 全选

command -v seahorse		# 检测是否安装了  ssh-askpass 
sudo apt install seahorse	# 如果没有安装,则安装它
那么,你可以在脚本中添加如下内容:

代码: 全选

export SUDO_PROMPT="检测到你所要进行的操作,需要更高的权限方可继续。
若要通过本次验证请求,请在下面输入你的用户密码!"
export SUDO_ASKPASS=/usr/libexec/seahorse/ssh-askpass

sudo -A 你要运行的程序
这里解释一下所用到的 sudo 的两个环境变量:

SUDO_PROMPT 用于定义 sudo 的提示文本;

SUDO_ASKPASS 用于定义 sudo 的 askpass 辅助程序,它必须是一个绝对路径名。一些桌面环境可能自带了 askpass 辅助程序,例如, KDE 的 ksshaskpass (/usr/bin/ksshaskpass)。

Re: sudo改用pkexec的问题

发表于 : 2023-02-23 2:06
huangsijun17
lanxing0821 写了: 2023-02-22 21:44 你可以换一种思路,比如你为什么用 pkexec 而不用 sudo ?是不方便在终端输入密码,还是纯粹地只想换个提升用户权限的程序?如果是前者,你完全可以用 sudo 的 -A 选项来替代。

举个例子,假设你的电脑已经安装了 ssh-askpass 辅助程序(如果没有,则可以通过如下命令来安装):

代码: 全选

command -v seahorse		# 检测是否安装了  ssh-askpass 
sudo apt install seahorse	# 如果没有安装,则安装它
那么,你可以在脚本中添加如下内容:

代码: 全选

export SUDO_PROMPT="检测到你所要进行的操作,需要更高的权限方可继续。
若要通过本次验证请求,请在下面输入你的用户密码!"
export SUDO_ASKPASS=/usr/libexec/seahorse/ssh-askpass

sudo -A 你要运行的程序
这里解释一下所用到的 sudo 的两个环境变量:

SUDO_PROMPT 用于定义 sudo 的提示文本;

SUDO_ASKPASS 用于定义 sudo 的 askpass 辅助程序,它必须是一个绝对路径名。一些桌面环境可能自带了 askpass 辅助程序,例如, KDE 的 ksshaskpass (/usr/bin/ksshaskpass)。
我是写在一个.desktop脚本里,使用bash -c来执行的。脚本有进行分发给不同的人使用。之前适配的第三方发行版改过sudoers,默认sudo免密码。而现在装备兼容别的系统,默认sudo需要输入密码,而且sudoers还被爆改过。基本不可能修改sudoers或者使用sudo -A。至于ssh,更加不方便了。
PS,都是X86掌机的系统。

Re: sudo改用pkexec的问题

发表于 : 2023-02-23 11:59
lilydjwg
那你开俩进程吧,一个 pkexec 里一个 pkexec 外。

Re: sudo改用pkexec的问题

发表于 : 2023-02-23 20:37
huangsijun17
lilydjwg 写了: 2023-02-23 11:59 那你开俩进程吧,一个 pkexec 里一个 pkexec 外。
饶了我吧,我还是直接pkexec bash得了。