Xephyrを実行するための古典的なコマンド:
Xephyr -br -ac -noreset -screen 800x600 :1
私の知る限り、-acキーはxhost +の類似物であり、ほとんどの人がモニターやマウスにアクセスできるため、これは脆弱性です。 、キーボード。
Xephyrの例でこれをどのように修正できますか?
UPD:mosvy非常に詳細な回答をありがとうございます!実際、「ac」がなくても、すべての人がアクセスできます。あなたの answer は、セキュリティの観点から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
_オプションがなくても、同じホストのすべてのユーザーが接続できるようにします。これを試して:
_hinz$ Xephyr :1 &
_
次に、別のユーザーとして
_kunz$ xclock -display :1
_
これは、Xephyr
だけでなく、anyXサーバーにも当てはまります。通常のXorg
サーバーを見ると、_-auth
_オプションが明示的に渡されていることがわかります。
$ pgrep -ai Xorg 2347/usr/lib/xorg/Xorg vt2 -displayfd 3-auth/run/user/1000/gdm/Xauthority-background none -noreset -keeptty -verbose 3
Xserver(1)
のマンページによると(私の強調):
Xサーバーは、ホストベースのアクセス制御リストを使用して、特定のマシン上のクライアントからの接続を受け入れるかどうかを決定します。 他の承認メカニズムが使用されていない場合、このリストは最初、サーバーが実行されているホストで構成されますおよびファイル_
/etc/Xn.hosts
_にリストされているすべてのマシン
別の answer ですでに述べたように、一部のXorgサーバー(Xwaylandなど)は、getsockopt(SO_PEERCRED)
を介して誰がunixソケットを開いたかを確認する以外に、認証メカニズムをサポートしていません。ローカルグループサーバーがアクセスタイプを解釈しました "from Xsecurity(7)
;また、Debianのようないくつかのディストリビューション gapped xsessionスクリプトからxhost +si:localuser:$(id -un)
を介した通常のXorgサーバー。ソケットfdを渡すことができ、クライアントはxscope
のようなプログラムによってプロキシされる可能性があるため、これは非常に愚かなことです。
他のユーザーがXサーバーに接続できないようにする場合は、何らかの形式の認証を使用する必要があります。
認証ファイルを作成し、_-auth
_オプションを介してXサーバーに渡し、サーバーに接続するときにクライアントが同じものを使用できるようにします。
_ # create a MIT-COOKIE authfile
$ xauth -f ~/.xauth-junk add :1 . "$(hexdump -n 16 -e '4/4 "%08x"' /dev/urandom)"
xauth: file /home2/ahq/.xauth-junk does not exist # it will be created
$ Xephyr :1 -auth ~/.xauth-junk &
_
次に、それを通常の_$XAUTHORITY
_ファイルにマージします(環境でオーバーライドされていない場合は_~/.Xauthority
_)
_$ xauth merge - < ~/.xauth-junk
$ xclock -display :1
_
または、XAUTHORITY
環境変数で明示的に渡します。
_$ XAUTHORITY=~/.xauth-junk xclock -display :1
_
偽の認証ファイルに接続しようとすると、_-auth
_オプションが実際に効果を発揮したことを確認できます。
_$ XAUTHORITY=/dev/null xdpyinfo -display :1 >/dev/null 2>&1 && echo OOPS, anybody can connect!
$
_