我正在尝试编写一个作为守护进程和监视器运行的应用程序
运行X会话。现在我正在努力寻找文件
关于X安全模型。具体来说,我正在尝试
连接到我的守护程序进程中运行的X显示。调用
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服务器正在使用的auth文件(
我想它的位置会从发行版改为发行版,而且
可能从一个启动到下一个),然后查询它,然后写一个新的
auth文件。如果进程作为守护程序运行,则它可能没有
主目录,那我怎么知道在哪里写新条目?
理想情况下,我正在寻找的是一种绕过需要的方法
~/.Xauthority
中的xauth cookie,甚至可以知道cookie的内容
所有。我意识到这不太可能 - 安全模型有什么用处
如果它很容易被绕过?但我希望这份名单上有人可能有
一些好主意。有没有办法指定我的流程
特权,因此应自动获得任何权限
在本地机器上显示?
答案 0 :(得分:1)
如果指定XAUTHORITY
环境变量,则不必使用主目录,该变量指定.Xauthority
文件的位置。阅读xauth
手册页。
但是,一般来说,由于你提到的原因,很难找到auth文件;此外,这种“钓鱼认证令牌”方法仅适用于本地展示。
关于让root(或其他一些用户)不知不觉地连接到X服务器,你可能需要修改源代码来执行此操作,并且必须使用类似{{1}的内容获取连接用户的uid / gid(这只适用于Unix域套接字,无论如何我认为它是用于本地连接的类型)。
答案 1 :(得分:1)
Xauth不是X
的唯一安全机制还有另一个(不太安全)只执行基于IP的身份验证 (见xhost)。
因此,如果您将X服务器切换到这种不太安全的模式,它将信任所有连接 来自定义的IP集。
这样您根本不需要处理Xauthority。