限制哪些本地用户可以连接到X11显示器


3

我的机器上运行了一个X.org服务器(没有PAM,PolicyKit等的Gentoo Linux),使用-nolisten tcp禁用传入的TCP连接。

是否可以建立白名单,指定允许哪些本地用户在该X11显示器上打开窗口?

编辑: 我用这个systemd单元启动我的X服务器:

[Unit]
Description=X Window System
Requires=systemd-user-sessions.service
After=systemd-user-sessions.service

[Service]
ExecStart=/usr/bin/xinit ${HOME}/.xinitrc -- -nolisten tcp vt09
User=myuser
Environment=SHELL=/bin/bash

[Install]
Alias=display-manager.service

编辑2: 我把它改成了......

ExecStart=/usr/bin/xinit ${HOME}/.xinitrc -- -auth ${HOME}/.Xauthority -nolisten tcp vt09

...创建$ {HOME} /。Xauthority ...

mcookie | sed -e 's/^/add :0 . /' | xauth -q

...并重新启动X服务器。瞧,授权现在默认拒绝。为了授予特定用户访问权限,我将.Xauthority复制到了他们的主目录。

没有使用xhost命令。


我认为值得注意的是,当.Xauthority文件为空时,也可能发生default-allow场景。 / a --auth选项也没有为我创建它,必须手动完成。 superuser.com/questions/806637/...
Blauhirn

Answers:


2

使用Xorg - 是的,通过使用一种特殊的“服务器解释”地址:

xhost +SI:localuser:root
xhost +SI:localuser:jim

或者,您可以为每个用户提供您用于的Xauthority文件的副本 Xorg -auth …

但是,X11不适用于访问同一显示器的多个用户,并且每个客户端基本上都具有完全访问权限,因此您通过这样做引入了一个巨大的安全漏洞 - 任何用户都可以监视整个屏幕,运行键盘记录器,授予其他人访问或撤消现有用户的访问权限。


1
我已经尝试过您的建议,但我似乎设置了默认允许权限模型,因此它不会限制其他用户。我添加了一些有关X服务器如何启动的信息。
user267565

对于上下文:X11沙箱正是我正在构建的。经典方法使用Xephyr,我使用xpra并且它可以工作,但是如果沙盒用户可以只连接到真正的X11服务器那么有什么意义呢?
user267565

@ user267565:沙盒用户可以连接到真正的X11服务器 只有你允许它 - 通过添加到 xhost,或者给它一份Xauth数据。
grawity

3
对于遇到同样问题的其他人: 除非 X服务器以-auth参数启动,该参数指向现有的可读文件,该文件非空且包含有效数据,服务器将为default-allow。
user267565
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.