我当前正在使用需要管理特权的VPN应用程序,并且已将该应用程序添加到我的自动启动中。但是,每次我登录时,总是会要求我输入密码以授予对此应用程序的权限,由于我只是使用相同的密码登录,因此这是非常多余的。
无论如何,是否可以让我自动启动该应用程序而无需输入密码?我已经尝试过执行autostart命令sudo airvpn
,但这导致应用程序根本无法打开。
为了澄清起见,我不希望在引导时运行命令,而是希望在登录时运行命令。这个问题是相关的,但是,我尝试添加exec airvpn
到/etc/rc.local
,登录时什么也没有发生。
如果您正在运行图形程序,也许应该避免使用sudo
,因为它只能通过终端窗口询问您的密码,这对图形程序不利。(除非您从终端启动这些程序。)我曾经推荐gksu
或gksudo
,但是遗憾的是,这两个程序都已停产,并且在Ubutnu的最新版本中不再可用。您可以改为使用policykit以root身份运行程序pkexec airvpn
。这也需要密码,但是可以通过图形弹出窗口提示输入密码,因此不依赖于在终端中键入密码。
如果您不想每次都输入密码,这里有一些提示,提示您如何以root用户身份执行程序而无需输入密码。
如果airvpn
可执行文件是二进制文件(而不是文本文件),则应该能够使用chmod命令更改文件权限以激活setuid模式,这意味着它将始终以拥有该文件的用户身份运行。(要确保该用户是root用户,请运行sudo chroot $(which airvpn)
。)这不需要密码,也不需要您执行以下任何步骤。但是,它将要求您运行以下命令:sudo chmod u+s $(which airvpn)
。但是,此技巧不适用于文本文件(python程序,shell脚本等)。另外,如果您更新了此文件,则可能必须再次执行此操作。下次您再次更新时。然后再次...
sudo
配置文件BTW sudo
(以及扩展名gksudo
和gksu
,都使用与相同的配置sudo
)和policykit(可以使用来以root身份执行程序pkexec
)都可以被编程为运行程序,而无需输入密码。IDK如何使用policykit做到这一点,但我可以教您如何使用来实现这一点sudo
。在继续之前,您应该在后台运行一个root shell,以防万一出问题。(您可能会完全失去使用能力sudo
,请参见下文)。在/etc/sudoers.d
目录中创建一个文本文件。只要它没有.
字符且不以字符结尾,就可以随意命名~
。
在继续之前,我应警告您,您需要知道airvpn
可执行文件的路径。如果您进入which airvpn
终端,它应该告诉您该文件在哪里。假设是/usr/bin/airvpn
,您可以输入:
%admin ALL = NOPASSWD:/usr/bin/airvpn
并将其保存在/etc/sudoers.d
目录中。使用该chmod
命令将文件许可权设置为0440可能是一个好主意。您可以通过运行(以root身份)chmod 0440 file
,用新创建的文件名替换“ file”来做到这一点。
现在,打开一个新终端,并通过运行来测试此新配置sudo airvpn
。(“ new”一词以粗体显示的原因是,即使您没有成功地配置为避免要求您输入sudo
密码,如果您已经sudo
在现有终端中执行了命令,也可能不会sudo
要求您输入密码。)如果您能够在新的终端上执行此操作,则说明您airvpn
无需密码即可成功执行。现在,您要做的就是将启动项更改为run sudo airvpn
,那么您就可以顺利进行了。无论可执行文件是二进制文件还是文本文件,这都将起作用。另外,无论您更新该程序的频率如何,您都只需执行一次。
如果出现问题,并且您失去sudo
了以root用户身份执行任何操作的能力,则可以删除新创建的文件,并且sudo的行为应与以前相同。(请记住,当我建议您保持根外壳程序运行时?您可能需要它来删除该文件。当然,您可以通过运行来执行根外壳程序pkexec su
,然后使用它来删除该文件。帐户有密码,su
应该这样做。)
尽管gksudo可能已经死了,但是有一种方法可以自己进行类似的替换。步骤一,安装ssh-askpass软件包:sudo apt install ssh-askpass
。然后,使用以下命令创建一个shell脚本(使用您喜欢的文本编辑器):
#!/bin/sh
export SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass
exec sudo "$@"
您可以将其另存为gksudo
。现在,您需要使该脚本可执行,并将其复制到可以执行该脚本的位置。您可以结合使用heinstall
命令,让您同时执行这两项操作:sudo install -o 0 -g 0 -m 0755 ./install /usr/local/sbin
。(如果您没有/usr/local/sbin
目录,则可能要创建一个目录:sudo mkdir -p /usr/local/sbin
。)您可能还想运行rm install
,这样就不会造成无用的第二个副本。
现在,您可以输入gksudo airvpn
,并且会出现一个非终端的提示,要求您输入密码。您可以重新使用它来制作应用程序启动器,启动项或其他任何东西。由于此脚本依赖于sudo
后端,因此您进行的任何配置也sudo
将在此处应用。因此,如果您的sudo
配置失败,这可能会成为一个后备-除非您无法使用sudo进行任何操作,在这种情况下,您只能靠自己了。(因此,例如,如果您的/etc/sudoers.d/*
文件由于某种原因而被删除。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句