理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

ForwardX11Trusted は true でいいかな

X をリモートから飛ばすときに、よく .ssh/config の ForwardX11 を yes に設定したりすると思いますが、ちょっとドキュメントを読んでると ForwardX11Trusted という設定項目が出てきた。FowardX11 の項目には

An attacker may then be able to perform activities such as keystroke monitoring if the ForwardX11Trusted option is also enabled.

という文言があったことから、じゃぁ ForwardX11Trusted は no の方がいいよな、うん、という形でこれを no に設定して X をリモートサーバから飛ばしてみると、なんか Warning が出てきて大変に醜い。

$ ssh myhost emacs
kiririmode@myhost's password: 
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.

そもそも、ForwardX11Trusted とは何なんだろう。

ForwardX11Trusted とは何なのか

まず trusted なクライアントと untrusted なクライアントが存在する。このうち、untrusted なクライアントは動作上制限をうけ、その制限は「他のウィンドウからのデータを取得できない」等といったものである。例えば、別ブラウザで銀行口座のパスワードを入力しようとしていた際、untrusted なクライアント X 経由でこのスクリーンショットを取ることも、キーロガーでパスワードを盗むこともできない。

この前提の下、ForwardX11Trusted はクライアントを trusted と見るか、untrusted と見るかを指定できるディレクティブであると言うことができる。trusted とした場合(つまり、ForwardX11Trusted を true)とした場合、クライアントは安全と見なされフルアクセスが許可される。一方、クライアントを untrusted と見た場合、ssh は安全さを保証するために様々な方法を取ることになる。そのうちの一つに xauth の使用があり、上記のエラーメッセージを見る限り xauth generate の untrusted オプションを使用しているのだと思う。

この xauth generate の untrusted オプションは Xorg サーバの XC-Security 拡張とやらを使うらしいのだが、クライアントプログラムの多くはこのあたりを適切にハンドリングできていない関係で、XC-Security 拡張もデフォルトでは有効になっていない。そのために、[セキュアではない]が ForwardX11Trusted は true としていた方が(日常の)トラブルは起こらないかなというのが個人的な結論となった。

なお、

ForwardX11Trusted を no にしておかないと動かないクライアントもある、という話もあるので、そのあたりは注意しないといけない。

あと

今日 30 分くらいかけてはじめて調べた内容なので諸々間違ってるかもしれないです。そのときはいろいろ指摘ください。