限制不受信任的 X11 客户端的剪贴板

限制不受信任的 X11 客户端的剪贴板

我偶然发现了这个博客https://notehub.org/rp5n2它描述了一种使某些 X11 客户端不受信任的[1],这使得某些 X11 扩展无法使用。请注意,我非常清楚,除非我也使用 UID 分离(我确实这么做了),否则仅此一项是没有价值的。我使用xsudo[2] 来运行垃圾软件。

但是,即使使用不受信任的连接,客户端仍然可以监视剪贴板。如果用户是crapware,则在其帐户下运行的程序仍可以监视主要选择。你试一试:

watch -n0.5 xsudo crapware xclip -o 

安全扩展绝对有用,因为它可以防止不受信任的 X11 客户端记录键盘或模拟按键,但嗅探剪贴板是一个弱点。默认情况下,如何防止与不受信任的 X11 客户端共享剪贴板?

我对消防监狱之类的事情不感兴趣。我不关心命名空间。 UNIX 用户分离就是我所需要的。我也想避免 Xpra。与直接连接到 X11 的客户端相比,它太慢了。您确实可以注意到打字时的延迟。

[1]https://www.x.org/releases/X11R7.6/doc/xextproto/security.html

[2]

#!/bin/zsh
set -e

# Copied from https://notehub.org/rp5n2

if [[ $# -lt 1 ]]; then
    echo "Usage: $0 asuser [cmdline...]" >&2
    exit 1
fi

asuser=$1
shift

if [[ -z $DISPLAY ]]; then
    echo "DISPLAY is not set" >&2
    exit 1
fi

cookie=/tmp/.Xauthority-$DISPLAY-$asuser

if [[ ! -e $cookie ]]; then
    touch $cookie
    chmod 600 $cookie
    xauth -f $cookie generate $DISPLAY MIT-MAGIC-COOKIE-1 untrusted
    sudo chgrp $asuser $cookie
    chmod 660 $cookie
fi

export XAUTHORITY=$cookie

if [[ $# -gt 0 ]]; then
    exec sudo -u $asuser "$@"
else
    exec sudo -u $asuser -i
fi

答案1

您可以使用嵌套的 X 服务器NX代理与 xpra 相比,它对于本地设置来说要快得多。

nxagent还为单个应用程序提供无缝模式。将其设置为无缝模式并且不使用剪贴板并使用自己的 Xauthority cookie 有点令人兴奋。您可以使用x11docker为了方便使用:

x11docker --nxagent --exe -- yourapplication

或简称:

x11docker -ne yourapplication

以另一个用户身份运行:

sudo x11docker --user someuser -ne -- yourapplication

要允许剪贴板共享,请添加 x11docker 选项--clipboard。 nxagent 默认允许它,但除非指定,否则 x11docker 会禁用它。

如果您需要硬件加速,请安装xpraXwaylandwestonxdotool运行

sudo x11docker --user someuser --xpra-xwayland --exe -- yourapplication

仅使用 nxagent 进行设置,并且不为客户端设置 cookie:

echo "nx/nx,clipboard=none:25" >/tmp/nxoptions
nxagent :25 -R -nolisten tcp -options /tmp/nxoptions
sudo -u someuser env DISPLAY=:25 yourapplication

这仅适用于美国键盘。要获得另一种键盘布局,请更改/tmp/nxoptions.对于德语键盘布局:

echo "nx/nx,clipboard=none,keyboard=evdev/de:25" >/tmp/nxoptions

另一种可能性是使用 Xephyr 作为嵌套 X 服务器。但它不提供无缝模式。

Xephyr :10
sudo -u someuser env DISPLAY=:10 openbox  # provide a window manager
sudo -u someuser env DISPLAY=:10 someapplication

对于 Xephyr 的硬件加速,您可以使用virtualgl. (但对于不同的用户来说可能有点棘手,因为 virtualgl/vglrun需要访问显示:0)。

相关内容