运行基于显示的程序而不以root身份调用sudo / not

时间:2018-01-01 14:37:18

标签: ubuntu permissions xorg xserver

我有一个运行使用gpu的程序的Ubuntu服务器。 直到现在,为了运行我的程序,我一直在调用

  • export DISPLAY=:0
  • export XAUTHORITY=/var/run/lightdm/root/:0

但是,这需要我以root身份运行我的应用程序,因为root拥有:0文件。最后,我的问题是如何配置我的系统以避免这种情况?

一些背景知识:

此服务器当前配置为在启动时调出lightdm。 lightdm反过来启动Xorg,使用-auth / var / run / sddm / root /:0,这样ps -aux将此作为一个进程显示:

/usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

在玩游戏时,我已成功配置所有内容,因此我不需要sudo:

  • 致电export XAUTHORITY=~/.Xauthority
  • 在我的用户的.Xauthority文件中为:0添加一个cookie mcookie|sed -e 's/^/add :0 . /'|xauth
  • 停止lightdm
  • 使用-auth “$HOME/.Xauthority”
  • 重新启动Xorg

这一切都很好,但不是可部署的解决方案。所以这里有其他问题:

如果要在启动时启动Xorg,如何提供对特定用户的访问权限?或者应该在用户登录时以某种方式提起?如果我将从命令行执行所有操作,我是否还需要lightdm?我有什么选择,最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

有几种可能性。

一个简单的方法是允许使用xhost访问已经运行的X(但是不鼓励使用xhost,使用cookie被认为更安全):

xhost +SI:localuser:USERNAME

另一个是从ps -aux中提取Cookie名称并将其复制到~/.Xauthority。将~/.Xauthority的所有权更改为用户。只有用户才能拥有rw-access(chmod 600)。

另一种可能性是,如果它以X extension SECURITY运行,则从X获取新的cookie。请注意,您已经需要访问已在运行的X才能获得新Cookie:

xauth -f /home/USERNAME/.Xauthority generate $DISPLAY . trusted

标准方式:在使用

启动X之前为选项-auth创建一个cookie
export XAUTHORITY=$HOME/.Xauthority
export DISPLAY=:0
xauth -f $XAUTHORITY add $DISPLAY . $(mcookie)
  

使用-auth“$ HOME / .Xauthority”重新启动Xorg

小心;检查$HOME/.Xauthority是否已存在且不为空;否则X根本没有身份验证协议运行,每个人都可以访问它。而是使用xauth自己创建一个cookie。

我不确定你想要完成什么;请注意,允许多个用户访问同一个X显示器是安全危险/隐私泄漏。 X客户可以互相监视。