私はこのブログに出くわしました 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
Xpraの代わりにネストされたXサーバー nxagent を使用できます。ローカルセットアップの方がはるかに高速です。
nxagent
は、単一のアプリにもシームレスモードを提供します。シームレスモードでクリップボードなしで独自のXauthorityCookieを使用してセットアップするのは少し面倒です。 x11docker を使用すると、簡単に使用できます。
x11docker --nxagent --exe -- yourapplication
または短い:
x11docker -ne yourapplication
別のユーザーとして実行するには:
Sudo x11docker --user someuser -ne -- yourapplication
クリップボード共有を許可するには、x11dockerオプション--clipboard
を追加します。 nxagentはデフォルトで許可しますが、x11dockerは指定されていない限り無効にします。
ハードウェアアクセラレーションが必要な場合は、xpra
、Xwayland
、weston
および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にアクセスする必要があるため、別のユーザーでは少し注意が必要な場合があります)。