xhost は, いくらなんでもやばいぜ.


追加 (Mon Jul 6 01:37:44 JST 1998) ftp とかで get した .Xauthority の許可属性を, よくチェックして 下さい. 通常 600 である必要があります.

まあ, 世の中悪い人ばかりではないですが, 良い人ばかりではないので, ネットワークで使う計算機では, 保安と利便性を両立させるのに, 皆様苦労しておられます.

X はいまんところ, 実用になる唯一のリモートでグラフィックのアプリケーショ ンが使えるシステムですね. telnet 先で起動したグラフィックアプリケーションが, ローカルのディスプレ イに出現する様は, なんつうか, いわゆる一つの

ぶんさんしょりによるねっとわーくそりゅーしょん

みたいな感じで便利なんですけど, そんときどうしてます?

というのは, local を hoge , telnet 先を dokoka.or.die としますと, telnet 先で単に xterm -display hoge:0.0 とやっただけでは,

Xlib: connection to "hoge:0.0" refused by server
Xlib: Client is not authorized to connect to Server
xterm Xt error: Can't open display: hoge:0.0

てな感じで接続を拒否されちゃうのだ. 当たり前なのだ. どこの誰とも知らんプ ログラムの画をいちいち描いてたら, Xサーバはそれだけで他に何にもする事が 無くなってしまうのだ. それに, Xサーバの仕事はクライアントの画を描く事だ けではない. 入力を受け付けて, それをクライアントに渡すのも仕事だ(xmodmap を思い出そう. あるいは, XF86 なら 3ボタン emulation でもいい).

入力を横取りされちゃうかも知れないのだ! そういうプログ ラムは実際に存在する. kinput2 は, (たとえば ktermへの)キー入力を横取り して, 日本語に変換してから他のプログラムへ渡す. つまり, グラフィックは何にも出さ ないけれど, 入力を見て, リモートに送信してしまうプログラムを書く事 は可能だ. たとえば, パスワードとかね. だから, Xサーバは特定のプログラムしか, 接続させてあげないのだ.

そこで, 接続許可を発行するために, ローカルで

xhost + dokoka.or.die

とかやっとくと, 動くわけです. ところが, xhost のマニュアルを見るとわかり ますが, これでは dokoka.or.die を利用できるユーザなら, 誰でもあなたの ディスプレイに接続できる事になります. つまり, スゴ腕の人ならなんか怪しい プログラムを出して, 盗聴したりしてな. ヘボい人でも, やたらと xengine -geometry 1000x1000+0+0 とかで邪魔したり, xv ~/ero/dosukebe.jpg とかを起動しまくって, セクハラ攻撃できるわけです.

つまり, dokoka.or.die に, 悪い人(あるいは, 仲の悪い奴)が一人も居ない時に しか, xhost は駄目なわけですよ. つうか, 要するに安全保障において, 第3者の善意をあてにする事は許されな いわけだから, 安全度ゼロ.

telnet 先の自分が起動したクライアントだけが接続できるようにしたい! と, 誰しも思う事でしょう. Xは ハッカーの人びとが知恵を絞ってつくったシ ステムなので, そんくらいは余裕で出来ます.

ローカルのホームディレクトリにある ".Xauthority" というファイルを, telnet 先の ホームディレクトリに copy すればオッケー. これで, だせえ xhost しなくても, クライアントが Xサーバに接続できるようになるのだ. telnet した時に, 勝手に .Xauthority を送ってくれると楽なんだけどなあ.

複数のディスプレイ(*)を使い分ける時は, xauth コマンドを使って .Xauthority のデータベースを書き換えよう. 詳しくは xauth のマニュアルを 見てくれ. でも, 普通の人はシングルタスクだから, いっぺんに複数のディスプ レイを使う事もないと思うけどね.

デフォルトの Xサーバの認証は, MIT-magic cockie で, クッキーを平文で流し てます. よこから tcpdump とかで聴かれたら終ります(この辺は telnet や POP3 も同じだけどね). だから, もっと強まった認証が幾つか用意されています. 詳しくは, Xsecurity のマニュアルを見て下さい. Xの認証の仕組みは, おおむねつぎの通りです. (わしの勝手な想像を含む)

  1. クライアント (xtermとか)は, ホームディレクトリにある ".Xauthority" を見て, クッキーを get
  2. それを持って, "$DISPLAY" が指すサーバに接続を依頼.
  3. サーバは, クライアントが持って来たクッキーを見て, 認証
  4. サーバが持ってるクッキーと一致したら, クライアントが出現
クッキーは xdm でログインする度に新しいのがつくられます. "startx" で X 起動してる人は, デフォルトでは認証が一切無いので, ザルです. ネットワークに繋ぐのであれば, たとえ電話接続であっても, 止めましょう. 自動攻撃プログラムは, 電話接続の IPアドレスであっても調べて攻撃して来ま す(幸い, わしは電話接続中に攻撃食らった事は無いけどね). inetd.conf で systat とかを開けとくと, Xサーバがザルモードで動いてる事 を認証を経ずに( tcpd で, 一応 log は残るかも) 知られてしまい, 変な攻撃を受ける. つうか, 俺が攻撃するぜ. dosukebe.jpg を表示するぜ. ガーッ!!(意味不明)

だから, X は xdm で使え. それから xhost はやめよう.