如何通过 sudo 以另一个用户身份通过​​ ssh 运行 GUI 应用程序

amo*_*fis 3 ssh sudo

我在我的服务器上配置了 ssh,有时我必须在它上面运行一些图形应用程序。当我与-X选项连接时,它工作得很好。我可以运行,例如google-chrome。但是,如果我将用户更改为sudo -i -u other_user,则无法以该用户身份运行 GUI 应用程序。

我认为它与环境和显示有关,但不知道该怎么做。我尝试添加-E,但随后收到错误消息,提示我无法将其与-i. 如何以其他用户身份通过​​ ssh 运行 GUI 应用程序?

Gil*_*il' 5

最简单的方法是使用ssh -X以其他用户身份运行命令。但这会使应用程序的运行速度明显变慢,即使在本地也是如此。


-i选项告诉sudo重新初始化环境。X 应用程序需要$DISPLAY和(在某些设置上)$XAUTHORITY,并且可能使用其他环境变量,例如区域设置。尝试不使用-i,或者如果必须使用-i,请运行

sudo -i -u other_user \
  env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
  xapplication
Run Code Online (Sandbox Code Playgroud)

即使您摆脱了-i,您也可能必须XAUTHORITY明确提供:默认情况下(如果未设置变量)它.Xauthority位于主目录中。

到目前为止,我一直假设其他用户可以读取您的$XAUTHORITY. 但情况并非如此,除非您这样做(例如使用setfacl -m user:other_user:r $XAUTHORITY)。

或者,$XAUTHORITY您可以将正确的 cookie 复制到用户可以读取的另一个文件中,而不是让其他用户读取您的.

xauth extract -f - "$DISPLAY" |
sudo -u other_user xauth -f ~other_user/.Xauthority merge -
Run Code Online (Sandbox Code Playgroud)

请注意,允许其他用户访问您的显示器几乎可以让他对其进行任何操作,包括向应用程序发送虚假按键。因此,如果您为了隔离而更改用户,您将不会得到太多。