ネットワークを透過的に扱うことができるというのが Unix システムの特長です。 Unix オペレーティングシステムにおけるウインドウシステムである X も同様に、ネットワーク経由で簡単に扱うことができます。 X ではネットワーク上離れた場所からログインして、グラフィカルなプログラムをネットワーク経由で表示させ、操作することができるようになっています。
X クライアントがネットワーク上離れた場所にある X サーバとの間で通信を行う場合、サーバ側では不正なアクセスを行われないようにするため、保護を行う必要があります。もっとわかりやすい表現をすると、クライアントプログラム側に特定の許可を設定する必要があることになります。 X Window System では、ホストベースのアクセス制御と、 Cookie ベースのアクセス制御の 2 種類が用意されています。前者のアクセス制御は IP アドレスを元にした認証で、特定の IP アドレスのクライアントのみが X サーバにアクセスできるようにする仕組みです。この制御を行う際に使用するプログラムが xhost
で、許可する IP アドレスをデータベースで管理することで、 IP アドレスベースのアクセス制御を実現します。ただし、 IP アドレスによる保護だけでは安全とは言えません。たとえば許可されている IP アドレスのクライアント内で、複数のユーザがログインしているような場合、異なるユーザにもアクセスを許可してしまうことになるからです。このようなセキュリティ面の問題から、この認証方法については詳しく説明していません。詳しく知りたい場合は、 man
xhost
で表示されるマニュアルページをお読みください。
Cookie ベースのアクセス制御では、 ID カードのように X サーバと正規のユーザの 2 者しか知り得ない文字列 (Cookie) を生成して、アクセスを制御します。 Cookie はホームディレクトリ内の .Xauthority
というファイル内に保存され、 X サーバに対してウインドウを表示したい、様々なプログラムから使用することができます。 .Xauthority
ファイルは xauth
というプログラムを使用することで、さまざまな処理を行うことができます。誤って .Xauthority
を削除してしまったり、ファイル名を買えたりしてしまった場合は、新しいウインドウを表示することができなくなります。
SSH (Secure SHell) を使用することで、ネットワーク通信を暗号化して X サーバとの通信を透過的に扱うことができます。これを X Forwarding (転送) と呼びます。 X Forwarding はサーバ側で擬似的な X サーバを動作させ、それにアクセスさせるために DISPLAY 環境変数を設定することによって成り立っています。 SSH に関する詳細な説明については、 第22章 「OpenSSH によるネットワーク操作の機密保持」 をお読みください。
接続先のコンピュータが安全なホストではないとお考えの場合は、 X Forwarding を使用してはなりません。 X Forwarding が有効化されていると、攻撃者は SSH 接続を介して認証を行うことができてしまうためです。これにより、攻撃者はお使いの X サーバを乗っ取ることができてしまうため、たとえばキーボード入力を読み取るなどの行為が実現できてしまいます。