複数のウィンドウシステムを実行するようにインストールするには、 xdm の代わりに xinit(1) ユーティリティを使うことが必要だろ う。しかし、xinit は起動スクリプトの生成に使うツールであり、エン ドユーザが使うためのものではない。サイト管理者は xdm を使うこと か、初心者ユーザ向けの別のインタフェースを用意することが強く求め られる。
X サーバはユーザが直接起動することもできるが、この方法は一般にテスト用 のものであり、通常の操作では使わない方がよい。プラットフォームによって は、あるデバイス(例えば /dev/mouse)へのアクセスが制限されていることが しばしばあり、X サーバを起動するためにユーザが特別な権限を必要とするこ とがある。
X サーバが起動しているときは一般にディスプレイを全て使用する。 コンソールがディスプレイであるワークステーションで動作している場合、サー バの動作中にはコンソールでログは見ることはできない。
サーバの多くにはデバイス特有のコマンド行オプションもある。詳しくは 個別のサーバ用のオンラインマニュアルを参照すること。
セキュリティポリシーファイルの文法は次の通りである。 記法: "*" は前の要素 0 個以上繰り返されることを意味し、"+" は前の要素 が 1 個以上繰り返されることを意味する。<foo/bar> の解釈では / の後の文 字列は無視される。これは次のセクションの <foo> のインスタンスを区別す るために使う。
<policy file> ::= <version line> <other line>* <version line> ::= <string/v> '\n' <other line > ::= <comment> | <access rule> | <site policy> | <blank line> <comment> ::= # <not newline>* '\n' <blank line> ::= <space> '\n' <site policy> ::= sitepolicy <string/sp> '\n' <access rule> ::= property <property/ar> <window> <perms> '\n' <property> ::= <string> <window> ::= any | root | <required property> <required property> ::= <property/rp> | <property with value> <property with value> ::= <property/rpv> = <string/rv> <perms> ::= [ <operation> | <action> | <space> ]* <operation> ::= r | w | d <action> ::= a | i | e <string> ::= <dbl quoted string> | <single quoted string> | <unqouted string> <dbl quoted string> ::= <space> " <not dqoute>* " <space> <single quoted string> ::= <space> ' <not squote>* ' <space> <unquoted string> ::= <space> <not space>+ <space> <space> ::= [ ' ' | '\t' ]* 文字集合: <not newline> ::= '\n' を除く任意の文字 <not dqoute> ::= " を除く任意の文字 <not squote> ::= ' を除く任意の文字 <not space> ::= <space> に含まれる文字を除く任意の文字
上述の記法に関連する意味付けは以下のようになる。
<version line>, ファイルの最初の行であり、ファイルのフォーマットのバー ジョンを示す。サーバがバージョン <string/v> を認識できない場合、ファイ ルの残りの部分は無視される。ここで説明するファイルフォーマットに対する バージョン文字列は "version-1" である。
一度 <version line> を過ぎると、上記の文法に合わない行は無視される。
<comment> 行は無視される。
現在は<sitepolicy> 行は無視される。これは XC-QUERY-SECURITY-1 認証方式で使われるサイトポリシーを指定する予定である。
<access rule> 行は、名前が <property/ar> X ウィンドウのプロパティに影 響を及ぼすような、信頼できないクライアントからのリクエストにどのように 反応するかを指定する。 このセクションの残りでは <access rule> の解釈を説明する。
与えられた <property/ar> のインスタンスに適用される <access rule> に対 しては、<property/ar> は <window> によって指定されたウィンドウの集合に 含まれるウィンドウ上になければならない。<window> が any の場合、規則は 任意のウィンドウの <property/ar> に適用される。<window> が root の場合、 規則ルールはルートウィンドウの <property/ar> だけに適用される。
<window> が <required property> の場合は、以下のような適用が行われる。 <required property> が <property/rp> ならば、ウィンドウも その <property/rp> を持っている時に、その値にかかわらず規則が適用される。 <required property> が <property with value> の場合は、<property/rpv> も <string/rv> で指定された値を持っていなければならない。この場合は、 プロパティは STRING 型で フォーマット 8 でなければならず、null で終了 する 1 つ以上の文字列を含まなければならない。<string/rv> にマッチする 文字列があった場合は、規則が適応される。
文字列のマッチングの定義は、一度確認を行う単純な大文字小文字を区別した 文字列の比較である。<string/rv> 内に現われた '*' 文字は、「任意の文字列」 を表すワイルドカードを意味する。<string/rv> は文字列のどこにでも複数の ワイルドカードを含むことができる。例えば、 "x*" は x で始まる全ての文 字列にマッチし、"*x" は x で終わる文字列とマッチし、 "*x*" は x を含む すべての文字列にマッチする。そして "x*y*" は x で始まりそれ以降に y を含む文字列にマッチする。
与えられた <property/ar> に対して複数の <access rule> 行が存在すること がある。 この規則はファイル内で出現した順にテストされる。適用された最初に規則が 使われる。
<perms> は信頼できないクライアントが試みる操作と、サーバがこれらの操作 に対して行うべきアクションを指定する。
<operation> は r (read), w (write), d (delete) のいずれかである。以 下の表は、X コンソーシアムのサーバの実装において X プロトコルのプロパ ティリクエストがこれらの操作とどのように対応しているかを示す。
GetProperty r, または delete = true ならば r かつ d ChangeProperty w RotateProperties r かつ w DeleteProperty d ListProperties なし。信頼されていないクライアントも必ず全てのプロパティをリストできる
<action> は a (allow), i (ignore), e (error) のいずれかである。allow はリクエストを信頼できるクライアントが発行したかのように実行することを 意味する。 ignore はリクエストを no-op (何もしない)のように扱う。GetProperty の場 合は、ignore はプロパティがあった時には実際の値に関わらず空のプロパティ 値を返すことを意味する。error はリクエストを実行せず、アトムにプロパティ 名をセットして BadAtom エラーを返すことを意味する。error は全てのプロ パティに対するデフォルトのアクションである。これにはセキュリティポリシー ファイルにリストされていないものも含まれる。
<action> は次の <action> に出会うまで以降のすべての <operation> に適用 される。このように、irwad は ignore, read, write, allow delete を意味 する(訳注: irwad はそれぞれの頭文字を集めたものになっている)。
GetProperty と RotateProperties は複数の操作(r と d または r と w) を 実行する。異なるアクションが操作に適用された場合、最も厳しいアクション がリクエスト全体に適用される。部分的なリクエストの実行は行われない。 厳しさの順序は allow < ignore < error である。 したがって、プロパティに対する <perms> が ired (ignore read, error delete)であり、 信頼されていないクライアントがそのプロパティに対して delete = True と して GetProperty を試みた場合には、エラーが返されるがプロパティ値は返 されない。同様に RotateProperties のプロパティのいずれかで読み書きいず れも許可されていない場合、プロパティ値は変更されることなくエラーが返さ れる。
セキュリティポリシーファイルの例を示す。
version-1 # アプリケーションリソースの取得を許すが、書き込みは許可しない property RESOURCE_MANAGER root ar iw property SCREEN_RESOURCES root ar iw # カットバッファを使う試みを無視する。エラーを起こすとアプリケーション # がクラッシュし、アクセスを許すと多くの情報を与えすぎてしまう。 property CUT_BUFFER0 root irw property CUT_BUFFER1 root irw property CUT_BUFFER2 root irw property CUT_BUFFER3 root irw property CUT_BUFFER4 root irw property CUT_BUFFER5 root irw property CUT_BUFFER6 root irw property CUT_BUFFER7 root irw # Motif を使う場合、多分この設定を使いたくなるだろう。 property _MOTIF_DEFAULT_BINDINGS rootar iw property _MOTIF_DRAG_WINDOW root ar iw property _MOTIF_DRAG_TARGETS any ar iw property _MOTIF_DRAG_ATOMS any ar iw property _MOTIF_DRAG_ATOM_PAIRS any ar iw # 次の2つの規則は信頼されていない xwininfo -tree を動作できるようにする。 property WM_NAME any ar # WM_CLASS の取得を許可するが、これは WM_NAME を持つウィンドウに対して # のみである。これは必要以上に厳しいかもしれないが、<required property> # 機能をよく示し、「トップレベルウィンドウのみ」という試みでもある。 property WM_CLASS WM_NAME ar # 次の3つは信頼されていない xlsclients を動作させる。これを含める前に # は注意深く考えること。これはクライアントのマシン名を与え、コマンドが露 # わになりすぎてしまうかもしれない。 property WM_STATE WM_NAME ar property WM_CLIENT_MACHINE WM_NAME ar property WM_COMMAND WM_NAME ar # 信頼されていないクライアントに xstdmap が生成した標準カラーマップを # 使用させるためには、以下の行を含めること。 property RGB_DEFAULT_MAP root ar property RGB_BEST_MAP root ar property RGB_RED_MAP root ar property RGB_GREEN_MAP root ar property RGB_BLUE_MAP root ar property RGB_GRAY_MAP root ar # 信頼されていないクライアントに xcmsdb が生成した色管理データベースを # 利用させるには、以下の行を含めること。 property XDCCC_LINEAR_RGB_CORRECTION rootar property XDCCC_LINEAR_RGB_MATRICES rootar property XDCCC_GRAY_SCREENWHITEPOINT rootar property XDCCC_GRAY_CORRECTION rootar # 信頼されていないクライアントに多くのベンダがサポートしている # オーバレイビジュアルを利用させるには、以下の行を含めること。 property SERVER_OVERLAY_VISUALS rootar # 他の機能を示すためのダミーの例 # 変わったプロパティ名明示的なエラー条件の指定 property "property with spaces" 'property with "'aw er ed # ウィンドウが "son" で終わる値を持つプロパティ OhBoy を持っている場合、 # Woo-Hoo の削除を認める。読み書きはエラーとなる。 property Woo-Hoo OhBoy = "*son"ad
上記のプロトコルが要求する認証データは、-auth コマンド行オプション で指定する個人のファイル名でサーバに渡される。サーバがリセット後 (またはサーバ開始時)の最初の接続を受け付けるときはいつも、サーバはこの ファイルを読む。 このファイルが許可レコードを含む場合、ローカルホストは自動的にはサーバ へのアクセスを許可されず、ファイルが持つ許可レコードの一つを接続設定情 報で送ったクライアントだけがアクセスを許可される。このファイルのバイナ リフォーマットの説明については Xau のオンラインマニュアルを参照 すること。このファイルの管理とファイルの内容のリモートホストへの配布に ついては、xauth(1) のオンラインマニュアルを参照すること。
X サーバは、特定マシン上のクライアントからの接続を許可するかどうか決め るためにホストに基づくアクセス制御リストも使用する。 他の認証機構を使用しない場合、このリストの初期状態はサーバが動作してい るマシンと /etc/Xn.hosts ファイル(n はサーバのディス プレイ番号)にリストされている任意のマシンからなる。このファイルのそれ ぞれの行はインターネットのホスト名(例えば expo.lcs.mit.edu)または二重 コロンフォーマットのDECnet のホスト名(例えば hydra::)を持つ。いずれの 行に置いても、ホスト名の前後に空白文字があってはならない。以下に例を示 す:
joesworkstation corporate.company.com star:: bigcpu::
ユーザはこのリストにホスト名を追加または削除でき、サーバと同じマシンか ら xhost コマンドを使ってアクセス制御を有効にしたり無効にしたり できる。
X プロトコルにはウィンドウ操作の許可やクライアントの動作に対して制限を 与えるという考えは本来備わっていない。つまり、プログラムがディスプレイ に接続できる場合、プログラムにはスクリーンを自由に使うことができる。 セキュリティ機能拡張をサポートしている X サーバの動作はこれよりもかな り良い。なぜなら、接続に使用する認証を経由して、クライアントが信頼され ていないと指定することができるからである。詳しくは xauth(1) のオ ンラインマニュアルを参照すること。クライアントが起こすことがある悪影響 をなくすような制限が信頼されていないクライアントに課される。この制限の 完全な一覧については、セキュリティ機能拡張の仕様を参照すること。
より良い認証と許可のシステムを持つサイトは、セキュリティモデルを追加す るためにライブラリやサーバ内でフックを利用しようと考えるかもしれない。
フォントパスのデフォルト値は "<XRoot>/lib/X11/fonts/misc/, <XRoot>/lib/X11/fonts/Speedo/, <XRoot>/lib/X11/fonts/Type1/, <XRoot>/lib/X11/fonts/75dpi/, <XRoot>/lib/X11/fonts/100dpi/" である。ここで <XRoot> は X11 のインストールツリーのルートを指す。
フォントパスは -fp オプションで設定するか、サーバが起動した後に xset(1) で設定することができる。
注意: <XRoot> は X11 のインストールツリーのルートを指す。
プロトコル: X Window System Protocol, The X Font Service Protocol, X Display Manager Control Protocol
フォント: bdftopcf(1), mkfontdir(1), xfs(1), xlsfonts(1), xfontsel(1), xfd(1), X Logical Font Description Conventions
セキュリティ: Xsecurity(1), xauth(1), Xau(1), xdm(1), xhost(1), Security Extension Specification
サーバの起動: xdm(1), xinit(1)
サーバが起動した後の制御: xset(1), xsetroot(1), xhost(1)
サーバ固有のオンラインマニュアル: Xdec(1), XmacII(1), Xsun(1), Xnest(1), Xvfb(1), XF86_Accel(1), XF86_Mono(1), XF86_SVGA(1), XF86_VGA16(1), XFree86(1)
サーバの内部情報: Definition of the Porting Layer for the X v11 Sample Server