web-dev-qa-db-ja.com

信頼できない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
3
woky

Xpraの代わりにネストされたXサーバー nxagent を使用できます。ローカルセットアップの方がはるかに高速です。

nxagentは、単一のアプリにもシームレスモードを提供します。シームレスモードでクリップボードなしで独自のXauthorityCookieを使用してセットアップするのは少し面倒です。 x11docker を使用すると、簡単に使用できます。

x11docker --nxagent --exe -- yourapplication

または短い:

x11docker -ne yourapplication

別のユーザーとして実行するには:

Sudo x11docker --user someuser -ne -- yourapplication

クリップボード共有を許可するには、x11dockerオプション--clipboardを追加します。 nxagentはデフォルトで許可しますが、x11dockerは指定されていない限り無効にします。

ハードウェアアクセラレーションが必要な場合は、xpraXwaylandwestonおよびxdotoolをインストールして実行します

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

これは、USキーボードでのみ機能します。別のキーボードレイアウトを取得するには、/tmp/nxoptionsを変更します。ドイツ語のキーボードレイアウトの場合:

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

もう1つの可能性は、ネストされたXサーバーとしてXephyrを使用することです。ただし、シームレスモードは提供されません。

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にアクセスする必要があるため、別のユーザーでは少し注意が必要な場合があります)。

1
mviereck