SSH経由でネットワークにログインした後、ネットワークで使用されるデフォルトのシェルはBASHです。
グラフィックスを使用するアプリケーションは、X11転送が有効になっている場合にのみ実行できます。通常、ログイン時にこのオプションを使用します-X
。
ssh -X [email protected]
有効にすると、DISPLAY環境変数が存在し、そのように設定されますが、DISPLAY=localhost:11.0
ユーザーが同じ名前の環境変数をエクスポートして有効になっているように見えるようにすることを防ぐ方法はありません。
X11転送が有効になっていることをbashシェルまたはbashスクリプトで確認する方法はありますか?
答え1
まず、なぜ?ユーザーがDISPLAYを偽造したいのはなぜですか?それにもかかわらず、2つの解決策があります。
readonly DISPLAY
bashrc/config ファイルにあります。ログイン時に正しく実行されると、ユーザーは後でDISPLAYを設定できません。xset q
。いくつかのX11情報を照会します。 X11 セッションがない場合、エラーが返されます。
答え2
テストするのがDISPLAY
正しいことです。うまくいくことはできません。よりスマートにしようとすると、利益よりも害を及ぼす可能性が高くなります。
はい、もちろん、ユーザーは嘘をついてDISPLAY
誤った値を設定できます。ただし、ユーザーはディスプレイをオフにすることもできます。お客様が表示する内容をユーザーが閲覧できることを保証することはできません。ユーザーが嘘をついたら、どうしてもわからないでしょう。DISPLAY
情報が異なる場所(通常は同じユーザーの別のセッション)に表示されるようにする値を設定できます。代わりに、有効な値が存在してもDISPLAY
設定を無効にしたり、無効な値に設定したりできますが、その値が何であるかを知る方法はありません。
もちろんDISPLAY
設定は可能ですが、Xサーバーに接続することはできません。この場合、明確なエラーメッセージを印刷すると便利です。設定されているが使用できない場合は、DISPLAY
構成に問題があるため、この情報をユーザーに渡す必要があります。
答え3
私が理解しているように、DISPLAY変数をテストして知ることはできませんが、SSHセッションを確立するときにSSH_CONNECTION環境変数があります。 X11-Forardingはxhostを使用しませんが、SSH_CONNECTION変数が存在し、エラーなしでxhostを使用できる場合は、明らかにX対応の接続があるため、X11-Forwardingです。