运行 Xephyr 的经典命令:
Xephyr -br -ac -noreset -screen 800x600 :1
据我了解,-ac键是 xhost + 的类似物,这是一个漏洞,因为几乎每个人都可以访问显示器、鼠标、键盘。
如何在 Xephyr 示例中解决此问题?
UPD: mosvy非常感谢您提供非常详细的答案!事实上,即使没有“ ac ”,也可以向所有人开放。从安全的角度来看,您的回答让我对 xorg 和 ssh 大开眼界。我的 LiveCD/USB 上的常规 Xorg 服务器真正通过 -auth:
$ pgrep -ai Xorg
551 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
如果您不使用该
-auth auth-file
选项,则Xephyr :1
已经允许来自同一主机的任何人连接到它,即使没有该-ac
选项。尝试这个:然后,作为另一个用户
这也适用于任何X 服务器,而不仅仅是
Xephyr
; 如果您查看您的常规Xorg
服务器,您会看到该-auth
选项是显式传递的:根据
Xserver(1)
手册页(强调我的):正如在另一个答案中已经提到的那样,一些 Xorg 服务器(例如 Xwayland)不支持任何身份验证机制,除了检查谁通过以下方式打开了 unix 套接字
getsockopt(SO_PEERCRED)
——“本地用户和本地组服务器解释的访问类型”Xsecurity(7)
;此外,像 Debian 这样的发行版通过xsessionxhost +si:localuser:$(id -un)
脚本断开了常规的 Xorg 服务器。由于可以传递套接字 fd 并且客户端可以由诸如 之类的程序代理xscope
,因此这是非常愚蠢的事情。该怎么办
如果您想阻止其他用户连接到您的 X 服务器,您必须使用某种形式的身份验证。
创建一个授权文件,通过
-auth
选项将其传递给X服务器,然后让客户端在连接服务器时使用它。然后将其合并到您常用的
$XAUTHORITY
文件中(~/.Xauthority
如果未在环境中覆盖)或者在
XAUTHORITY
环境变量中显式传递:-auth
您可以通过尝试连接伪造的身份验证文件来检查该选项是否真的有任何效果: