设置用户标识

设置用户标识

我目前正在使用一款需要管理员权限的 VPN 应用程序,并且我已将该应用程序添加到自动启动中。但是,每次登录时,我都会被要求输入密码以授予此应用程序的权限,这对我来说非常多余,因为我只是使用相同的密码登录。

有什么办法可以让这个应用程序自动启动而无需输入密码?我已经尝试过发出自动启动命令sudo airvpn,但这导致应用程序根本无法打开。

需要澄清的是,我并不是想在启动时运行命令,而是想在登录时运行命令。这个问题是相关的,但是,我尝试添加exec airvpn/etc/rc.local,但登录时什么也没有发生。

答案1

如果您正在运行图形程序,也许您应该避免使用sudo,因为它只能通过终端窗口询问您的密码,这对图形程序来说并不好。(除非您从终端启动上述程序。)我曾经推荐gksugksudo,但遗憾的是这两个程序都已停用,并且在 Ubutnu 的最新版本中不再可用。您可以改用 policykit 以 root 身份运行程序pkexec airvpn。这也需要密码,但可以使用图形弹出窗口提示输入密码,因此不依赖于在终端中输入的密码。

如果您不想每次都输入密码,这里有一些关于如何以 root 身份执行程序而无需输入密码的提示。

设置用户标识

如果airvpn可执行文件是二进制文件(而不是文本文件),则应该能够使用 chmod 命令更改文件权限以激活 setuid 模式,这意味着它将始终以拥有它的用户身份运行。 (要确保用户是 root,请运行sudo chroot $(which airvpn)。)这不需要密码,也不需要您执行以下任何步骤。 但是,它将要求您运行以下命令:sudo chmod u+s $(which airvpn)。 但是,此技巧不适用于文本文件(python 程序、shell 脚本等)。 此外,如果您更新此文件,则可能必须再次执行此操作。 下次更新时再执行一次。 再一次……

制作sudo配置文件

顺便说一句,sudo(以及扩展名gksudogksu,它们都使用与相同的配置sudo)和 policykit(可以使用以 root 身份执行程序pkexec)都可以被编程为运行程序而无需输入密码。我不知道如何使用 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无需密码执行。现在您所要做的就是将启动项更改为运行sudo airvpn,然后就可以开始了。无论可执行文件是二进制文件还是文本文件,这都可以正常工作。此外,无论您更新此程序的频率如何,都只需要执行一次此操作。

哦不!它不起作用,现在 sudo 给我错误了!

如果出现问题,并且您无法以sudoroot 身份执行任何操作,则可以删除新创建的文件,并且 sudo 应该会像以前一样运行。(还记得我建议您保持 root shell 运行吗?您可能需要它来删除该文件。当然,您可以通过运行来执行 root shell pkexec su,然后使用它来删除该文件。或者,如果 root 帐户有密码,su也可以这样做。)

gksudo 替换

尽管 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/*文件因某种原因被删除。)

相关内容