我试图编写一个作为守护进程和监视器运行的应用程序
运行X个会话。现在我正努力寻找文件
关于X安全模型。具体来说,我正试图
从我的守护进程连接到运行X displays。打电话
XOpenDisplay(dispName)不起作用,我想是因为我的流程
没有连接到此显示的权限。一点之后
调查,看来我需要和xauth做点什么。
在我的测试环境中,X服务器的启动方式如下:

/usr/bin/X -br -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-QBEVDj

该文件包含一个条目,如下所示:
#ffff##:  MIT-MAGIC-COOKIE-1  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

通过使用相同的十六进制键向~/.Xauthority添加一个条目,我可以
连接到X服务器。但是,这很难,因为我需要
以编程方式查找X服务器正在使用的身份验证文件
我想它的位置会从一个发行版变为另一个发行版,而且
可能是从一个引导到下一个引导),然后查询它,然后编写一个新的
验证文件。如果进程作为守护进程运行,则它可能没有
主目录,那么我如何知道将新条目写入何处?
理想情况下,我所寻找的是一种绕过
~/.Xauthority中验证cookie,甚至知道cookie在什么位置
全部。我意识到这不太可能-安全模型有什么好处
如果很容易绕过?但我希望名单上有人
一些好主意。有没有办法说明我的流程是
特权,因此应自动授予访问任何
在本地计算机上显示?

最佳答案

如果指定XAUTHORITY环境变量(指定.Xauthority文件的位置),则不必使用主目录。阅读xauth手册页。
但是,一般来说,由于您提到的原因,很难找到auth文件;而且,这种“寻找auth令牌”方法只适用于本地显示。
关于让root(或其他一些用户)随意连接到X服务器,您可能需要修补源代码来完成此操作,并且必须使用类似于getpeereid的东西来获取连接用户的uid/gid(这只适用于Unix域套接字,我认为这将是用于本地连接的类型)。

10-04 20:34