web-dev-qa-db-ja.com

Xephyr -ac危険ですか?

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
1
My5555

_-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 -n​​oreset -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!
$
_
0
mosvy