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

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

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

我猜是环境和 DISPLAY 出了问题,但不知道该怎么办。我尝试添加-E,但收到错误消息,说我无法将其与 一起使用-i。我如何以其他用户身份通过​​ ssh 运行 GUI 应用程序?

答案1

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


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

sudo -i -u other_user \
  env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
  xapplication

即使您摆脱了-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 -

请注意,允许其他用户访问您的显示屏几乎允许他做任何事情,包括向应用程序发送虚假按键。因此,如果您为了隔离而更改用户,那么您将不会得到太多好处。

相关内容