Linux Weekly News はLinux kernel 開発者の間で「常に特許を侵害しているのではないか」との自覚が次第に広まっていることに注意をうながし。 LWNレポートは、読者チャンネルの他に、kernelメールリスト(Alan Cox 及び Linus Torvaldsの貢献を含む)に対するリンクを持っている。 さらに読者の意見はSlashdot coverage of the storyで見出される。
News.comのDeclan McCullagh は、DMCAもそう悪くはなくthe DMCA is not so bad 、EFFは過剰反応だと言っている。
Declanについては、Verizon副社長兼顧問弁護士SarahDeutschとの会見を interview by Declan McCullagh をSkashdotが報じている Slashdot highlighted 。同女史は、DMCAに反対で、このような発展に同社がどう対応するかを説明している。
Registerは最近、HPが今後のTru64バグ鎮圧にDMCAを使う動きをしていると報じたThe Register reported。後に、駆け引きがDMCAに元気付けられた狂気に変貌して見捨てられるand abandoned the DMCA-fuelled madness..広報活動の悪夢を見ると思われる。Alan Coxは、自分のログ変更の校閲を始める迄はさほど見当外れではないだろう。
Slashodotは、高等教育年表の中でBen Edelmanとの会見を発表している、Ben EdelmanはACLUと一緒にDMCAを訴えた。彼はインターネット・フィルタ・ソフトウエアでブロックされたサイトのリストに関する研究を自由に発表したいと望んでいる。
オンライン音楽/メディア配布に関する別の面白い記事interesting articleは、Janis Ianの 「インターネットの崩壊−別の観点」(The Internet Debacle - An Alternative View )だ。今の間違った状況を明らかにし、それを変える方法を示している。記事の副産物と追記もまた出版された been published。
三つ目はO'Reillyオープンソース会議からの、Lawrence Lessig's keynote speech だ。htmlで読むことが出来る。我慢強ければmp3のオーディオをダウンロードすることも出来る。
最後に、ボストンレビューには、オープンソース社会に大いに関係する「共有に対する返還請求」Reclaiming the Commons と題する記事がある。オンラインの意見と回答もまた得られるalso available。
これは、州のクローズドソース・ソフトウエア購入を禁止するカリフォルニアのデジタル・ソフトウエア・セキュリティ法D(igital Software Security Act)提案などの進展に対する反動である。しかしLWNが報じるように as LWN reports この法律は極めて極端で、通過の可能性は低い。それでも、こうした考えが主流になりつつあるのは良いことだ。同様に、スペイン行政府はLinuxの経験に満足している has been pleased 。Advogatoに完全な経過が載っている have the full story.
The Samba Team は数多くの費用を抱えており、samba.org の運営とSamba開発の費用を賄うためSambaのユーザーから寄付を募る寄付システムを作ることを決定した。
at The Register とat Slashdotに攻撃され易さに関するニュースがある。
MTU Aero Engines は、エンジン開発にLinuxクラスタを使うことを決めた use a Linux cluster for its engine development。 Linux クラスタは、それぞれ1.13 GHz Intel Pentium IIIを持つDell PowerEdge 1550標準ラックサーバー64台と全部で144 GB SDRAMを含み、追加計算能力を実行する。SuSE Linux 企業向けサーバー7が、OSとして用いられる。コンピュータはFast Ethernet と 2 GBit/s Myrinetを使ってネットワークされる。
United Linux 参加者 Caldera (今はSCO グループ), Conectiva、 SuSE Linux、Turbolinux は、四つの出資会社の参加者に対しUnitedLinux が8月末にはクローズド・ベータ製品として渡されると発表した。2002年第三四半期末にはオープンベータとして、一般に入手出来ると期待される。
UnitedLinux クローズドベータに参加するには http://www.unitedlinux.com/ を訪ねるか又は四出資社のいずれかに連絡されたい。
Kevin Scannell は、自分のパケージispell-gaeilge (インターナショナルIspellに対するアイルランド語サポート)の新バージョンと、同じ単語リストを使ってアイルランド語発音の記述を加え綴り間違い単語に出会ったときの助言を改良した完全に新らしいパケージaspell-gaeilge のリリースを発表した。この第二バージョンはKevin Atkinsonの"aspell"プログラムと共に働く。
詳細(英語)情報は、http://borel.slu.edu/ispell/index-en.html
NSAのセキュリティ強化Linux NSA's Security-Enhanced Linux の新バージョンが8月23日にリリースされたbeen released。2.4.19-ベースのkernelを含む。
GMx Solutions は、iシリーズ上のLinuxのサポートと災害復旧機能の付いたCM_SAFE バージョン1.5 のリリースを発表した。CM_SAFEは、オープンシステムサーバ上でコンフィギュレーションファイルのためのコンフィギュレーション管理とバージョン管理を提供する。システム管理者は、コンフィギュレーションをコンフィギュレーション・レポジトリにセーブすることが出来る。コンフィギュレーション問題が起こったとき、単一のコマンドで既知の働くコンフィギュレーションに戻すことが出来る。
CM_SAFEサーバーは、iシリーズとzシリーズ上のLinuxパーティション用に利用することが出来、主要UNIXディストリビューション及びプラットホームのため利用出来るエージェントサポートが付いている。
SableVM は、Cで書かれた移植可能バイトコード・インタプリータで、Java仮想マシン仕様二版を実行する。この目標は、小型で高速で効率が良いと同時に、研究遂行のための設計が良く頑丈なプラットホームを提供することにある。
SableVM は、数多くの革新的技術(双方向オブジェクトレイアウト、スピンロックの無い弱ロック、弱相互作用vtableなど))を駆使しており、GNUレッサ一般公開ライセンス(GNU Lesser General Public License)の条項の下でライセンスされる。
Manning'sの拡張埋込Perl I (Extending and Embedding Perl) は、Perl Iプログラム言語の機能と有用性の拡張方法、及びCプログラムからPerl を使用する方法を説明することを狙いとする。このブックは、Cライブラリ(と同時にC++及びフォートラン・ライブラリ)へのインターフェース方法の説明に多くの時間を割く。Cライブラリのためperl呼び戻しを実行する方法、Perl とCの間でPerlハッシュとアレーを受け渡す方法、及びPerlデータ言語構造をアレーオペレーションの速度改善に使う方法を示す。
このブックは、384頁の紙表紙($44.95)及び2MbのPDFフォーマット($13.50)の双方で www.manning.com/jennessの発行元から入手することが出来る。
Linda Richard は、その Christian Publications website を、内容が宗教的/霊感的なLinux互換ソフトウエアを求める人のため情報源に拡張することを計画している。現在のところ、このサイトは、比較的Linuxに親しみ易いフォーマット(PDF)の文書の集積を特徴としているが、追加情報源と情報源へのリンクを含む計画である。
フィラデルフィア郊外のPDF関連のソフトウエア開発者兼プロバイダであるAppligentは、セキュリティに関する高容量のオンデマンドアプリケーション及びPDF文書に対するデジタル署名が出来るサーバーベースのソリューションSecurSign 2.0を紹介している。SecurSign 2.0はまた、テキストとグラフィックのプリント、修正、コピイのため、並びにノートとフォームのフィールドの追加変更に関するユーザー及びオーナーのパスワード及び制限を提供する。を
SecurSign 2.0 は、Acrobat 4.0 と5.0にあるAdobe Acrobat デジタル署名機構と互換性があるので、SecurSign 2.0を用いた署名はAdobe Acrobat を用いて検証することが出来る。SecurSign 2.0 は、Windows、Linux 7、AIX、Mac OS X、Solaris、HP-UX.で利用することが出来る。
RoadRunner がバージョン0.9.に達した。RoadRunner は、BEEP(Blocks Extensible Exchange Protocol)を実行するツールキット・ライブラリである。
このシリーズのパート I (4月号 #77)と II(6月号 #79)では、Linuxで利用出来るツールを用いて、簡単なブートセクタを構築しシステムBIOSにアクセスする手続きを説明した。ままごとOSは「歴史的な」Linux kernelを厳密に真似ているので、実際に近いプロテクトモードに切り替えなければならない。このパートでは、その方法を述べる。
1.プロテクトモードとは?
80386+には数多くの新機能があり、メモリ保護、仮想メモリ、多重処理、640k以上のメモリに関するサポートのなかった8086の難点を克服した上で−尚、8086ファミリとの互換性を維持した。386は、8086と286の特徴すべてを持って、それを強化した。早期のプロセッサのようにリアルモードがある。286のように、386はプロテクトモードで働くことが出来るが、386のプロテクトモードは、内部的には大いに異なる。386のプロテクトモードは、286より保護が良くメモりも多い。プロテクトモードの目的は、プログラムの保護ではない。その目的は他の人を君のプログラムから護ることにある。
1.1 プロテクトモードとリアルモード
一見したところ、プロテクトモードとリアルモードとは余り違っていない。両方ともメモリ分割、割り込み、及びデバイスドライバを使ってハードウエアを扱う。だが、二つのモードの存在を正当化する相違がある。リアルモードでは、メモリを最低16バイト離れた64kセグメントとして見る。分割を扱うには、セグメントレジスタとの関連で内部機構を用いる。これらセグメントレジスタの内容(CS,DS,SS...)は、CPUがアドレスバスに置く物理アドレスの一部を形成する。物理アドレスは、セグメントレジスタに16を掛け、16ビットだけオフセットして得られる。64kセグメントに制限するのは、この16ビット・オフセットである。
図 1 : リアルモード・アドレシング
プロテクトモードでは、分割をデスクリプタ・テーブルと言うテーブルの組を通じておこなう。セグメント・レジスタには、これらテーブルに対するポインタが含まれる。メモリ分割に使用されるテーブルにはグローバル・デスクリプタ・テーブル(GDT)とローカル・デスクリプタ・テーブル(LDT)の二つの型がある。GDTには、すべてのアプリケーションがアクセスすることの出来る基本デスクリプタが含まれる。リアルモードでは一つのセグメントの大きさは64kで16バイトの距離を置いて次に続く。プロテクトモードでは、セグメントを4Gbまでの大きさにしてどこにでも置くことが出来る。LDTには、タスク又はプログラムに特有の分割情報が含まれる。例えばあるOSは、そのシステムデスクリプタを用いてGDTを設定し、各タスクについて適切なデスクリプタを用いてLDTを設定することが出来る。各デスクリプタの長さは8バイトである。フォーマットを下に示す(図3)。セグメントレジスタに登録する毎に、該当するテーブル登録からベースアドレスを取って来る。デスクリプタの内容は、シャドーレジスタと言うプログラマには見えないレジスタに記憶され、同じセグメントに対する将来の参照は、毎回テーブルを参照する代わりにこの情報を利用出来るようにする。物理アドレスは、シャドーレジスタ内のベースアドレスに16又は32ビットのオフセットを加えて形成される。これらの相違を図1と図2で明らかにした。
図 2 : プロテクトモード・アドレシング
図 3 : セグメント デスクリプタ フォーマット
この他に、割り込みデスクリプタ(IDT)と言う別のテーブルがある。IDTには、割り込みデスクリプタが含まれる。これらは、割り込みハンドラの見つかる場所をプロセッサに告げる。これは、リアルモードのように、割り込み毎に一つの登録を含むが、これら登録のフォーマットは全く異なる。我々のコードでは、プロテクトモードへの切り替えにIDTを用いないので、これ以上の詳細は示さない。
2.プロテクトモードに入る
386にはCR0, CR1, CR2, CR3と言う32ビットコントロール・レジスタ4個がある。CR1は、将来の目的用に保留されており、386では定義されていない。CR0は、ページングとプロテクションを有効、無効にすることの出来るビットと、浮動小数点コプロセッサの作動を制御するビットを含む。CR2とCR3はページング機構が使う。我々に関心があるのは、CR0のビット0つまりPEビット、プロテクション有効ビットである。PE=1であるとき、プロセッサは前に述べた分割機構を用いてプロテクトモードで働くと言う。PE=0であると、プロセッサはリアルモードで働く。386はまた、GDTR, LDTR, IDTRなどの分割テーブルベースレジスタを有する。これらは、デスクリプタテーブルを含むアドレスセグメントを登録する。GDTRがGDTを指す。48ビットGDTRが、32ビット線型アドレスと16ビット限界を用いてGDTディレクトリのベースと限界を定義する。
プロテクトモードへの切り替えは実質的に、PEビットの設定を意味する。だが他にも、したいことがある。プログラムはシステムセグメントとコントロールレジスタを初期化しなければならない。PEビットを1にした直後に、ジャンプ命令を実行して、リアルモードで取り出された命令すべての実行パイプラインをフラッシュしなければならない。このジャンプが一般的に次の命令になる。プロテクトモードに切り替えるステップは、こうして次のようになる:
ここで、この切り替えを行うコードを示す。
3.必要なもの
print_mesg: このルーチンはBIOS割込10番の13番サブファンクションを使って、文字列を画面に描く。属性は、各種レジスタに適切な値を入れて規定する。割込10番は、各種文字列の取り扱いのため用いる。13番サブファンクションを、文字列のプリントをしたいことを規定するahに記憶する。alレジスタのビット0が、次のカーソル位置を決める。これが0であると、ファンクション呼出の後、次行の始めに戻る。1であると、カーソルは最後にプリントした文字の直後に続く位置に置かれる。
ビデオメモリは、ビデオ表示ペイジと言う幾つかのペイジに分割される。一時に一ペイジだけが表示される(ビデオメモリの詳細はパート1を参照)。bhの内容は、ペイジ番号を示し、b1がプリントされる文字の色を規定する。cxは、プリントされる文字の長さを保持する。レジスタdxは、カーソル位置を規定する。すべての属性が初期化されたら、BIOS割込10番を呼び出す。
get_key: BIOS割込16番を使用する、そのサブファンクション00番が画面から次の文字を得るため使われる。レジスタahがそのサブファンクションの番号を保持する。
clrscr: このファンクションは、割込10番の別のサブファンクションつまり06番を使って、文字列プリントの前に画面をクリアする。これを命じるためalを0に初期化する。レジスタcxとdxがクリアするウインドウのサイズ、この場合は全画面、を規定する。レジスタbhは画面を満たす色、この場合は黒、を示す。
すべてが始まる場所!!
最初のアセンブリ言語ステートメントは、begin_bootコードへのshort jumpだ。我々は、リアルモードで茶色の'A'をプリントし、GDTを設定し、プロテクトモードに切り替えて白色の'A'をプリントする。これら両モードは、それ自体のアドレス方法を用いる。
リアルモードで:
セグメントレジスタgsを使ってビデオメモリをポイントする。CGAアダプタ(ベースアドレス規定値は0xb8000)を用いる。だが、コードで0を落としてしまった。構わない、リアルモード分割装置が追加の0を作ってくれる。これは便利だ。8086はアドレスを通常20ビットで扱うからだ。これは386のリアルモードアドレス指定にも引き継がれた。AのASCII値は0x41;0x06は茶色の文字を必要とすることを規定する。表示はキイを押すまで変わらない。次に、プロテクトモードの世界に入ると告げるメッセージを画面に表示する。そこで、bp(プリントすべきメッセージへのベースポインタ・レジスタ)をポイントする。
プロテクトモードへの発射台:
プロテクトモード中には、面倒な割込は不要だろうから、割込を無効にする。cliの仕事だ。後で有効にするので、GDTの設定から始める。我々の試みでは、4個のデスクリプタを初期化してプロテクトモードに切り替える。これらのデスクリプタは、ビデオメモリにアクセスするため、コードセグメント(code_gdt)、データ及びスタックセグメント(data_gdt)、ビデオセグメントを初期化する。使うことはないがダミイデスクリプタも初期化する。これは無意味なデスクリプタだ。セグメント・デスクリプタ・フィールドの幾つかに入って見よう。
GDTベースアドレスは、GDTRシステム・レジスタにロードしなければならない。gdtrセグメントには、第一語にGDTのサイズ、次の語にベースアドレスをロードする。このときlgdt命令がgdtセグメントをGDTRレジスタにロードする。これで実際にプロテクトモードに切り替える準備が出来た。CR0の最小有意ビット(即ちPEビット)を1に設定することから出発する。未だ完全なプロテクトモードではない!
インテル80386 プログラマ参考手引き書1986年版(INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986)の10.3章の記述によれば、PEフラッグを設定した直後に、初期化コードはJMP命令を実行して、プロセッサの命令先行呼出待ち行列を洗い流さなければならない。80386は、使用する前に命令とアドレスを呼び出して解読するが、プロテクトモードに変更した後は、(リアルアドレスモードで有効な)先行呼出命令情報は最早有効ではない。JMPがプロセッサに無効な情報を捨てさせる。
これでプロテクトモードに入った。点検しようか?Aを白色でプリントさせよう。このため、データセグメントセレクタ(datasel)を使ってデータセグメントとエキストラセグメントを初期化する。ビデオセグメントセレクタ(videosel)を使ってgsを初期化する。白色の'A'を表示するには、ASCII値と属性を含む語を位置[gs:0000] 即ち b8000 : 0000に移動する。システムがブートし直さられるまでスピンループがテキストを画面上に保持する。
セクターの残りの未使用バイトを0で埋めるにはtimes命令を用いる。これがブートすることに出来るセクターであることを示すにはバイト511,512にAA55を書く。これでほとんど全部だ。
緒言
最初のコンピュータ・ネットワークは、研究者間及び企業職員間でe-メールの送付及びファイルとプリンタの共有のため用いられた。このような場面ではセキュリティは余り問題にならなかった。今やコンピュータ・ネットワークは、銀行業務、販売業務、税金還付申告などに万人が使っており、セキュリティが重要な問題となった。ネットワークセキュリティは四つの分野に分けることが出来る。
認証の必要性
認証サービスは何故必要だろうか?認証サービスは、通信相手の身分を検証する。認証は安全なネットワーク環境の基礎的要素である。サーバーが確実にクライアントの身分を知っていると、特定のサービス(印刷施設など)を提供するか否か、ユーザ特有の特権を与えるか否かなどを決めることが出来る。認証(authentication)と認可(authorization) とは異なる。Fooが「ファイルバーを削除せよ」と言ったとき、コマンドがFooから来たか否かを検証するのが認証(authentication)で、Fooにバーを削除する許可を持っているか否かを検証するのが認可(authorization)である。
アリスが取引銀行ボブと取引したいとする。実際のボブとアリスは顔を合わるか、声か筆跡で互いに相手を認証することが出来る。だが、ネットワークで取引しようとすると、これらはどれも役に立たない。アリスの全財産をスイスの秘密口座に移せとの要求がイブからでなくアリスからであると、ボブはどうやって確信するだろうか?
ここに認証サービスが入る。アリスはボブにメッセージを送ることから出発する。これらのメッセージが送られるとき、侵入者イブがいて、メッセージを変更したり勝手に返答したりして、アリスとボブを騙したり作業を邪魔しようとすることがある。認証さえ完全であれば、アイスもボブも互いに正しい相手と話しているとの確信が持てる。
Kerberosに入ろう
Kerberosは、ネットワークセキュリティ問題の対策としてMITが作った。先祖は1983年に始まったプロジェクトAthenaである。プロジェクトAthenaの目的は、高性能グラフィックワークステーション、高速ネットワーク、及び各種形式のサーバーを巡って構築された境域コンピュータ環境を作ることであった。プロジェクトAthenaは、その認証しすてむとしてKerberosを用いた。Kerberosの名は、ギリシャ神話に由来する。頭が三つの犬で冥界への門を護っている。Kerberosプロトコルは、強力な暗号を使ってクライアントがその身分をサーバーに(逆も真)不安全なネットワーク接続を通じて明かせるようにしている。Kerberosを使ってクライアントとサーバーが身分を証明した後、その通信全部を暗号化して、プライバシイと仕事を進める完全性を保証することが出来る。
http://web.mit.edu/Kerberos/www/から
Kerberosバージョン1から4の元の設計と実行は、プロジェクトAthenaの技術主任、Jerome Saltzer、MIT構内ネットワークマネージャJeffrey Schillerのほか、以前のプロジェクトAthenaの二人のメンバー、DEC社のSteve MillerとClifford Neuman (現在、南カリフォルニア大学情報科学研究所)の仕事であった。プロジェクトAthenaの他の多くのメンバーもKerberosの仕事に貢献した。MITからの最新版Kerberos 4は、パッチレベル10である。これは公式にはMITが引導をわたして、今の開発はKerberos 5に集中されている。Kerberos 5 の最新版は1.2.1.である。
先ずキイワードを幾つか
各種暗号技術はcryptography(暗号法)として知られ、これら破ることをcryptanalysis(暗号解読法)と言う。まとめてcryptology(暗号作成術)と言う。暗号化されるメッセージはplaintext 又はcleartext(平文)である。平文は関数を使って暗号化し、これは、key(キイ)をパラメータとして採用する。暗号化処理の出力をciphertext(暗号文)と言う。暗号文をにdecryption function(解読関数)に通すと平文が得られる。アリスとボブの話に戻ると、二人はprincipals(本人)、物語の主人公、と呼ばれることがある。
伝統的に、暗号化キイは解読キイと同じである。キイは、本人だけが知っている。このようなキイをshared secret key(共有秘密キイ)と言う。しかし、Diffie と Hellman (スタンフォード大学の研究者) が1976年に提案した暗号システムでは、暗号化と解読のキイは異なる。暗号化に使うキイは公開して、そのユーザーに送られるメッセージは、公開で入手出来るキイを用いて暗号化することが出来るようにしてある。このキイはpublic key(公開キイ)と呼ばれる。このシステムは、共有キイ暗号作成術に対しpublic-key cryptography(公開キイ暗号作成術)と呼ばれる。公開キイ暗号作成術の例はRSAアルゴリズムである。
さらに幾つか…
認証過程を説明する前に、使用する用語の曖昧さをなくすることが重要である。
ネットワーク・アプリケーションは二つの部分から作られることが多い。
Kerberos は信用のおける第三者認証システムである。これは、そのクライアントの各々が相手側クライアントの身分についてKerberosの判定を信じる点で信頼される。KerberosクライアントがKerberosサーバーに信用されたこと、アプリケーションサーバーに証明するためには、チケット(ticket)を用いる。Kerberosクライアントが何かアプリケーションサーバーを使うためには、チケットが必要である。サーバーはチケットを検査してユーザーの身分を検証する。検査がおわるとクライアントは受け入れられる。チケットと一緒にKerberosクライアントはまたauthenticator(認証符号)を使用して身分を証明する。認証符号には、追加情報がふくまれており、これが、チケットと比較されて、チケットを示したクライアントがチケットを支給されたものと同一人であることを証明する。
Kerberosは、そのクライアントと彼らの認証用秘密キイに関するデータベースを維持している。Kerberosがこれら秘密キイを知っているので、一人のクライアントに相手方がまさしく必要とするものであることを信じさせるメッセージを作ることが出来る。設計者は全世界が単一のデータベースを信じるとは期待していないので、各種のrealms(領域)を有する準備を整えている。この領域は、認証データを維持する管理実体である。Kerberosサーバーを走らせたたい各組織は自分自身の「領域」を確立する。
そこでやっと詳細を
Kerberosは、Kerberosクライアントが信用に値せず、誰か別のKerberosクライアントからサービスを要求される度に自分の身分証明を要求されると推定する。Kerberosが使用する技術は目立たない。Kerberosは次の指針にしたがう:
クライアントとアプリケーション・サーバーの双方は、認証サーバー(AS)に登録されたキイを有する。クライアントがユーザーであるときは、そのキイが自分の選んだパスワードから導き出されり。サービス(プリントデモンなど)用のそのキイは、無作為に選ばれたキイである。これらのキイはクライアント登録中に取り決められる。
認証過程は次のように進む:
チケットを授与するチケット
Kerberosシステムの目的の一つは、出来るだけ人目に付かないことである。上の交信において、Kerberosクライアントは、ASが渡した信任状を解読するため、毎回パスワードを入力しなければならない。Kerberosクライアントがユーザーであると、ファイルをプリントしたりネットワーク上でファイルを修正したりする度にパスワードを入れるのは面倒かも知れない(キイはユーザーのパスワードから作られる)。これを回避する明らかな方法はパスワードか導出されたキイを隠すことである。だがキイを隠すのは危険だ。このキイのコピイを使って攻撃者は任意の時期に(次にパスワードが変更されるまで)ユーザーの振りをすることが出来る。
Kerberosはこの問題を、チケット需要サーバー(TGS)と言う新しい因子の導入により解決する。TGSは、同じ物理的マシン上に常駐するけれども、論理的にASと異なる。(これらは、集合的にKDC−Key Distribution Center−と呼ばれる)。TGSの機能は次の通りである。任意の定期的サービスにアクセスする前に、ユーザーは、別のサービスの場合と全く同様に、TGSに連絡するためのチケットを要求する。これはユーザが最初にシステムにログインするとき起こる。このチケットを、チケットを授与するチケット(TGT)と呼ぶ。TGTと受け取った後、ユーザーがサービスに連絡したいときは何時でも、チケットをASではなくTGTに要求する。さらに、回答は、ユーザーの秘密キイを使って暗号化するのではなく、ASがTGSを使って使用のため作ったセッションキイを用いて暗号化される。この回答の中には、定期的サービスに使うための新しいセッションキイがある。ここで、残りの交信は、上述のように進む。TGTは、ほんの短期間、普通は8時間だけ有効である。
領域横断認証
Kerberosプロトコルは、組織の境界をまたいで働く設計となっている。一つの組織内のクライアントを、別の中のサーバーが認証することが出来る。Kerberosサーバーを走らせたい各組織は自分の「領域」を構築する。クライアントが登録されている領域名は、クライアント名の一部なので、アプリケーション・サーバーが要求を引き受けるか否かの判定に用いることが出来る。
「領域間」キイを確定することにより、二つの領域の管理者は、ローカル領域内で認証されたクライアントにその認証を遠隔で使うことを許すことが出来る。領域間キイの交信は、各領域のチケット授与サービスを、別の領域内の本人として登録する。そこでクライアントは、そのローカル領域から別の領域のチケット授与サービスのためのチケット授与チケットを入手することが出来る。チケット授与チケットを使うとき、別のチケット授与サービスは領域間キイ(これは通常自分自身の正常TGSキイとは異なる)を使ってチケット授与チケットを解読し、クライアント自身のTGSが発行した物であることを確認する。遠隔チケット授与サービスが発行したチケットは、エンドサービスに、クライアントは別の領域で認証されたことを示す。
まとめ
Kerberosは、ネットワーク・セキュリティ問題に対する単発的解決策ではない。システムを通じて信頼が本質的である:クライアントに暗号化キイを正しく与えれば、クライアントはKerberosを信頼する。クライアントが、サーバーのキイを使って暗号化したチケットを正しく与えれば、アプリケーションはクライアントを信頼する。この信頼の中に、システムの弱さがある。
具体的に言うと、秘密キイは、全く秘密に保管しなければならない。侵入者がどうかして本人のキイを盗むと、本人を装うことが出来る。「パスワード推定」攻撃は、Kerberosでは解決されない。ユーザーが貧弱なパスワードを選ぶと、攻撃者が辞書攻撃をうまく仕掛けることが出来る。Kerberosは、クライアントのセキュリティには何の備えもしない。これは、信頼されないネットワークを使う信頼されたクライアントの上で働くことを想定している。クライアントのセキュリティが揺るがされると、Kerberosのセキュリティも揺るがされる。しかし、Kerberosが揺るがされる程度は、揺るがされたホストに左右される。攻撃者が多ユーザーマシンに侵入し、そのマシンに記憶されたチケット全部を盗むと、そのマシンに記憶されたチケットを有するユーザーの振りをすることが出来る。これらのチケットの期限が来るまでだけだが・・・。
この記事は、最後の項目、デジタル写真に重点をおいて、Linuxをデジタル写真の記憶、操作、共有に使う方法を説明する。
私は写真を、短時間記憶用にハードディスク、永久記憶用にCD-ROM、の二つの段階で記憶する。過去数ヶ月の写真をマシン上に保存するので、迅速に呼び出すことが出来る。古いものはCD-ROMに移してディスクの空間を開ける。
カメラからコンピュータに写真をダウンロードするにはUSB Mass Storage Driverを使う。このドライバは、Linux kernelの一部なので、カメラをSCSI 装置として取り付ける。次いで、mv コマンドを使って写真をハードディスクに転送する。作業は通常次のようになる:
プロンプト$ mount -n /dev/sdb1 /mnt/camera プロンプト$ mv /mnt/camera/dcim/100msdcf/* /home/robt/docs/photographs/ プロンプト$ umount -n /mnt/camera
極めて簡単だ。カメラを取り付け、写真をハードディスクのディレクトリに転送して、カメラを取り外す。
(USB Mass Storage Driverで働くカメラモデルは少ない。私のはSony DSC-F707だ。Canon PowerShot シリーズなど他の多くのカメラは Gphoto2 プログラムで認識する。未だLinuxで働かないカメラもある。ドライバを書くことが出来るのは全部、カメラ製造者がくれるもの、無料ソフトウエア社会、充分な技術仕様に左右される)
ハードディスクが一杯になると、古い写真をCD-ROMに転送する。ブランクCD-ROMをCDライターに入れてコマンドプロンプトから次をタイプする(CDライターの使い方の情報は、 CD Writing HOWTO を参照):
プロンプト$ mkisofs -t iso9660 -o ro,loop=/dev/loop0 cd_image /home/robt/docs/photographs プロンプト$ cdrecord -v speed=4 dev=0,0,0 -data cd_image
これが、写真を含むcd画像を作り、その画像を新しいCD-ROMに焼き付ける。
写真では、組立(composition)で対象物を写真の枠内に収める。写真家は写真の組立にあたり、多くの重要な決定を下す:
新米写真家として、私には組立技術がない。いつも背景を沢山入れ過ぎる。カメラの数多くの特徴を忘れてしまう。
私の哀れな写真の救済にはGIMP を使う。GIMP とはGNU Image Manipulation Programの略で、AdobeのPhotoshopと同じような、全機能を備えた画像操作アプリケーションである。これを次のことに使う:
これらはGIMPの機能の一部にすぎないが、それでも写真の品質を大いに良くする。GIMPをもっと使いこなしたいと思う。
私はデジタル写真を友人や家族と共有する。そのため写真を、一般がアクセス出来るウエブサイトに置く。しかしその前に、次のことをおこなう:
この作用を自動的に行うため、二つの Python スクリプトを用いる。一つを、 generate_photographs と名付ける。これはconvertコマンドを使って写真とサムネイルの大きさを変える(convertはツールの ImageMagickスーツの一つである)。完全なスクリプトを以下に示す。
#!/usr/bin/env python
import os
#
# stdoutへの呼出をプリントし、
# それをOSに送る。
#
def system_call(s):
print s
os.system(s)
#
# ディレクトリを空にする。
# "small" はサムネイルを、
# "medium" はウエブサイズ写真を含む。
#
for d in ("small", "medium"):
system_call("rm -rf " + d)
system_call("mkdir " + d)
files = os.listdir("photographs")
for file in files:
if file != ".directory":
system_call("convert -resize 640x480 photographs/" + file + " medium/" + file)
system_call("convert -resize 160x120 medium/" + file + " small/" + file)
二つ目のスクリプトはgenerate_html と名付ける。写真全体をループし、それをウエブペイジに表示するため必要なHTML を作る。以下がスクリプトで、Pytonコードだけを示すため縮めてある:
#!/usr/bin/env python
import os
#
# HTML-関連の中身は削除....
#
html = ""
files = os.listdir("photographs")
br = 0
for file in files:
html += '<a href="medium/' + file + '">'
html += '<img src="small/' + file + '"></img>\n'
html += '</a>'
if br:
html += '<br>\n'
br = 0
else:
br = 1
#
# HTML-関連の中身は削除....
#
f = open("index.php","w+b")
f.write(html)
f.close()
これら二つのスクリプトを走らせた後、ファイルを私のウエブサイトにおいて、皆にe-メールアドレスを送った。
この記事では、Linuxを使ってデジタル写真を記憶し、操作し、共有する私の方法を説明した。説明が明確で、皆様のデジタル写真取り扱いに役立つことを望む。
.
自動ファイヤウォール強化は、保護されたネットワークに無効パケットが到着するのを防ぐため、多くの商業ファイヤウォールが採用する技術である。この文書の目的は、リアルタイムでiptableを強化する方法を示すことである。
規定値で、iptableはメッセージをLinux のシステムに記録されたデーモンを経由して記録することが出来る。記録自体は基本的セキュリティの点で優れているが、最新セキュリティ問題には対処していない。最新セキュリティについては、ファイアウォールが不正な作動を記録したら即座に、システムが特注スクリプトを走らせる必要がある。侵害の激しさにより、これらのスクリプトをプログラムして、攻撃IPアドレスをブロックするなど各種の行動を起こすことが出来る。ここで概説した技術は、iptableに限られず、SNORTなどの侵入検出スキャナなどsyslogを経由して記録する任意のアプリケーションからの出力を処理するよう変更することも出来る。
この文書の内容は、Red Hat 7.2/7.3 だけに対して試験したが、そのとき文化から隔絶したモーリシャス島に住んでおり、私たち全員がズールー戦士の貧しい装いをしたいた。スキューバダイビングの詳しいことは、www.islandsoft.netへ。
Linuxファイアウォールの能力に関する優れた文書は、Oskar Andrewsson著Iptables Turorialである。http://iptables-tutorial.haringstad.com/で見つかる。
Linux 参考書
興味のありそうなLinux参考書を示す。リンク毎に新ウインドウを開くこと。
Advanced Linux Networking
Hack Attacks Revealed: A Complete Reference
Hacking Linux Exposed
Linux Firewalls (2nd Edition)
Linux Routers
Network Intrusion Detection (An Analysts Handbook, 2nd Edition)
PHP and PostgreSQL Advanced Web Programming
Real World Linux Security: Intrusion Prevention, Detection and Recovery
Red Hat Linux 7.3 Bible
理論
Linuxのシステムに記録されたプログラムには面白い特徴が組み込まれており、その出力をログファイルでなくユーザー定義パイプに向け直すことが出来る。私は、Perl スクリプトを使って、システムに記録されたプログラムから来るメッセージを処理し、iptableを動的にコンフィギュアし直す。
必要なもの
この文書の例はPostgresql サーバーを用いる。ほとんどの人がMySQLに慣れているので、移植は問題でない筈だ。私は、Postgresqlが好きだ。商業データベースにある多くの特徴を備えているからだ。Postgresqlについて詳しいことはhttp://www.postgresql.org/へ。Postgresql-perl、Perl、及びiptableパケージをファイアウォール・マシンにインストールしておく必要もある。
Postgresqlサーバー上に「adaptibe」と言うデータベースと「iptables」と言うテーブルを作る。次のフィールドを追加する。
基本セキュリティ
なすべきこと:MACアドレスとARP中毒の詳細。
私の意見では、ファイアウォール上で働くべき唯一のサービスは、syslogとcronである。何でもsyslogに送るにはプリンタ記録を持たなければならない。プリンタを持つ理由は、マシンが乗っ取られ、クラッカが記録を上書きしたとき、探検がおこなわれた方法を見ることが出来るようにするためである。ファイアウォールはまた、CD-ROMから読み出してその結果を書き込み保護フロッピイディスクからロードするのが望ましい。
MACがネットワークに存在することを知るのは極めて重要である。ファイアウォールは、不法にネットワークに導入されたマシンから発する悪党アドレスはすべて知っていなければならない。
ブート処理の間ファイアウォールをロックする。
最初に取る手続きはブートの間にファイアウォールを確保することである。規定値でiptableは、INPUT、OUTPUT及びFORWARDチェイン上でパケットが無制限に動くのを許す。これはマシンのブートの間にセキュリティを脅かし、ネットワークを各種の型の攻撃に対して開放する。これを避けるには、ネットワーク・インターフェイスを設定する前にすべてのパケット転送を阻止するようiptablesに命令しなければならない。
最近のディストリビューションでは、"/etc/re.d/rc3.d" にある "S10network" がネットワーク開始を担当する。"/etc/re.d/rc3.d" には、"S08iptables" もある。このリンクはファイアウォール・ルーチンの初期化を担当する。規定値の "S08iptables" リンクを削除し、"S08" で始まる自分のリンクを作るのが好ましい。"S08" で始まるリンクは、"S10"で始まるものの前に実行されるので、パケージが通過しないことを保証する。
セキュリティを強化するため設定することの出来る色々なkernelオプションがある。その幾つかを下記の例で設定する。
ブートの間にファイアウォールを確保するため、次のことをおこなう。
| rc.autofwinit スクリプト |
| #!/bin/sh # # rc.autofwinit - ファイアウォールをブートで初期化する # # Copyright (C) 2001,2002 Vasoo Veerapen (dive_mauritius@killspamforever.hotmail.com); # http://www.islandsoft.net/veerapen.html # # このプログラムはフリーソフトウエアであって、 # Free Software Foundationが公表した GNU General Public License ; version 2 # のライセンスの条項に従って頒布し又は修正することが出来る. # # このプログラムは、有用であることを望んで頒布するが、その保証はない; # 市場性又は特定目的への適応性に関する目次の保証もない。詳細は # GNU General Public License を参照のこと。 # # このプログラムと一緒に、又はダウンロードしたサイトから # GNU General Public License のコピイを受け取る筈だが、そうでなければ、 # the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USAに連絡のこと # # # スキューバダイビング、海に関する話題、私の基地、モーリシャスの # パラダイス島に興味があれば # http://www.islandsoft.net/へ # # ---------------------------------------------------------------------- echo "Initialising firewalling...Dropping all packets" IPT=/sbin/iptables # ICMP redirectsをブロック for CONF in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $CONF done # IP Source Routingをブロック for CONF in /proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $CONF done # IP spoofingをブロック for CONF in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $CONF done # tablesをクリア for TABLE in filter nat; do $IPT -t $TABLE –F $IPT -t $TABLE –X done # パケット全部を落とす $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP echo "Done initialising." sleep 2 |
Iptables スクリプトの定義
ファイアウォール・ブート処理が確保されたら、無効パケットをsyslogに記録するファイアウォール・スクリプトを作る。下に示すiptablesは基本的なものである。もっと進んだものにしたいときは、http://iptables-tutorial.haringstad.com/ にある"Iptables Tutorial"からDMZスクリプトを使って強化することが出来る。
| rc.autofwrules スクリプト |
| #!/bin/sh # # rc.autofwrules - 自動ファイアウォール強化用ファイアウォール・スクリプト # # Copyright (C) 2001,2002 Vasoo Veerapen (dive_mauritius@killspamforever.hotmail.com) # http://www.islandsoft.net/veerapen.html # # このプログラムはフリーソフトウエアであって、 # Free Software Foundationが公表した GNU General Public License ; version 2 # のライセンスの条項に従って頒布し又は修正することが出来る. # # このプログラムは、有用であることを望んで頒布するが、その保証はない; # 市場性又は特定目的への適応性に関する目次の保証もない。詳細は # GNU General Public License を参照のこと。 # # このプログラムと一緒に、又はダウンロードしたサイトから # GNU General Public License のコピイを受け取る筈だが、そうでなければ、 # the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USAに連絡のこと # # # スキューバダイビング、海に関する話題、私の基地、モーリシャスの # パラダイス島に興味があれば # http://www.islandsoft.net/へ # # ---------------------------------------------------------------------- IPT="/sbin/iptables" INT_IF="eth0" EXT_IF="ppp0" LOG_LEVEL="notice" # $IPT -P INPUT ACCEPT $IPT -P OUTPUT ACCEPT $IPT -P FORWARD ACCEPT #******************************************************************************* # フィルタ_フラッグ #******************************************************************************* echo Entering FILTER_FLAGS $IPT -N FILTER_FLAGS $IPT -F FILTER_FLAGS ##----------------------------------------------------------------------------## $IPT -A FILTER_FLAGS -p tcp --tcp-flags ALL FIN -m limit \ --limit 5/minute -j LOG --log-level $LOG_LEVEL \ --log-prefix "iptables:SCAN:" $IPT -A FILTER_FLAGS -p tcp --tcp-flags ALL FIN -j DROP ##----------------------------------------------------------------------------## echo Leaving FILTER_FLAGS #******************************************************************************* # 禁止 #******************************************************************************* echo Entering BANNED $IPT -N BANNED $IPT -F BANNED ##----------------------------------------------------------------------------## # 空白を残す ##----------------------------------------------------------------------------## echo Leaving BANNED $IPT -A INPUT -j BANNED $IPT -A INPUT -j FILTER_FLAGS $IPT -A OUTPUT -j BANNED $IPT -A OUTPUT -j FILTER_FLAGS #------------- ファイアウォール・スクリプト終わり |
Named Pipeの作成
named pipe は、syslog とブロック・スクリプトの間のインターフェイスである。
詳細は"man mknod" を参照。
ブロック・スクリプトの設定
iptables と the named pipe を設定したら、syslogデーモンから来るメッセージを扱うスクリプトを作る。このスクリプトは、自動強化処理の核である。下記の例はマシンを自動的にロックアウトし、PostgreSQLを走らせるデータベース・サーバーと交信する方法を示す。
| rc.autofwharden スクリプト |
| #!/usr/bin/perl –w # # rc.autofwharden - syslogd からのプロセス・メッセージ # # Copyright (C) 2001,2002 Vasoo Veerapen (dive_mauritius@killspamforever.hotmail.com); # http://www.islandsoft.net/veerapen.html # # このプログラムはフリーソフトウエアであって、 # Free Software Foundationが公表した GNU General Public License ; version 2 # のライセンスの条項に従って頒布し又は修正することが出来る. # # このプログラムは、有用であることを望んで頒布するが、その保証はない; # 市場性又は特定目的への適応性に関する目次の保証もない。詳細は # GNU General Public License を参照のこと。 # # このプログラムと一緒に、又はダウンロードしたサイトから # GNU General Public License のコピイを受け取る筈だが、そうでなければ、 # the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USAに連絡のこと # # # スキューバダイビング、海に関する話題、私の基地、モーリシャスの # パラダイス島に興味があれば # http://www.islandsoft.net/へ # # ---------------------------------------------------------------------- use Pg; use strict; my $log_datetime=""; my $log_address=""; my @parms = (); my $msgSource = ""; my $sourceIP = ""; my $sourcefile = "dump"; my $tmprec = ""; my $conn=""; my $result=""; my $temp=""; #先ずデータベースを開く $conn=Pg::connectdb("dbname=adaptive user=postgres password=password"); ( PGRES_CONNECTION_OK eq $conn->status ) and print "Pg::connectdb ok:\n" or die "Pg::connectdb failed: ", $conn->errorMessage, "\n"; # named pipe を開く #(FIFO, "< /etc/rc.d/syslog_auth") 又は die $!を開く; #printf "Pipe opened. \n"; #while(<FIFO>) { # 又は、パイプの代わりに test file を開いても良い open(SOURCE, "< $sourcefile") or die $!; printf "File opened. \n"; while (<SOURCE>) { @parms = split(/ /, $_); $msgSource = $parms[5]; if ($msgSource eq "iptables:SCAN:") { #Set date and time $log_datetime="$parms[1]-$parms[0]-2002 $parms[2]"; #Set source address $temp = $parms[9]; $log_address = substr($temp, 4, length($temp) -4); printf "Adding address %s to database. \n", $log_address; $result = $conn->exec("INSERT INTO iptables (ipaddress, severity, time) VALUES ('$log_address', '1','$log_datetime')"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; $temp = "/sbin/iptables -A BANNED -s $log_address -j DROP"; printf "%s \n", $temp; system($temp); } } # (FIFO)を閉じる; #代わりに test file を閉じる close(SOURCE); $result=$conn->exec("DROP DATABASE adaptive"); die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus; #--------------- rc.autofwharden PERL スクリプト終わり; |
Syslogのコンフィギュア
最後のステップは、syslogデモンのコンフィギュアだ。通常syslogはメッセージをtty とファイル"/var/log/messages" にエコーする。ここではその代わりsyslogにメッセージをnamed pipeにエコーするよう命じる。
次のように出発するエントリを探す
*.info;mail.none;authpriv.none
この行が見つからなければ、次のような行を追加、見つかれば次のように変更する。
*.info;mail.none;authpriv.none |/etc/rc.d/syslog_auth
結果を見る
http://www.insecure.org/nmap からFin scanオプションとともに入手出来るnmapを、遠隔システムから走らせる。
ファイアウォール・マシン上で、コマンド"/sbin/iptables -L" を走らせて"Banned"の中の変化に注目する。
ファイアウォール・データベースを見るため、postgresqlユーザーとしてログインし、次のようにタイプする
これで、データベースに加えられた禁止アドレス全部のリストが示される筈。
順応性のあるファイアウォールの FAQ.
問. この文書の中のファイアウォール・コードはどの位安全ですか?
答. この指導書の強化スクリプトは基本的なものです。スクリプトは自動的にマシンを差し止めるので、誰かがソースアドレスに細工をすると何が起こるかを想像することが出来ます。この場合、正規のIPアドレスはブロックされます。しかし、筋の通った攻撃の間、どのドメインが最も攻撃的か識別して、そこから連絡しようとするすべてのマシンを禁止することが出来ます。
問.私のファイアウォールが、絶え間なくACK, FIN, URGP=0 をログするのは何故ですか?
答. 99.99% の場合、これは正常な行動です。これは、規定値で各接続を60秒間追跡するIptablesの中の接続状態整合コードによるものです。接続が60秒間働いていないと、Iptablesは追跡テーブルから一掃しますが、他端のサーバーは、それを知りません。サーバーが接続をその側から閉じようとすると、このTCPフラッグシーケンスの付いたパケットを送り、これがファイアウォールにより途中で抑えられます。
謝辞
この記事にお力添え下さった下記の方に感謝したい。
Oskar Andreasson
Win/Lin ボックス上に数個の画面を設定
必読欄
この記事は、Linuxジャーナルの"Multihead systems"(マルチヘッドシステム)と題するBrian Gollsneider とArthur M. Messengerが書いた論文に触発された(私は"Sistemas multihead"と言うスペイン語訳で読んだ) 。これに負うところが大きい。
"X --help" page ... は見る価値がある。
マルチヘッド化に付いて
ご存知の通り、マルチヘッド化はすべて多数の画面を一つのコンピュータにぶら下げることに関する。同じデスクトップ又は別のデスクトップの各種の部分を表示するのに別々の画面を使うことが出来る。これは極めて早期−Xウインドウシステムを発明した頃−からUinixシステムを使っておこなわれた。これは沢山のデータが欲しいとき有用である−典型的な例は工学(製図及び3次元モデル)及びシステム又はネットワークの監視。
一般化はやや最近のことでWindowsの下であったが、幾つかのビデオカード・メーカーが二重ヘッドカードでこの考えを推進した。だが、これは無用だった。三重で働くビデオカードが有ったからだ。
事実、ISA、PCI、AGPカードの多数の異なるカードを混ぜて使うことが出来る。
この記事では、Windows(98版−他も同じ筈)及びLinux+XFree86バージョン4の下での働き方を説明する。
ハードウエアに関する考察
BIOSは一つの画面を主画面として選ぶ。ここにブートメッセージが現れ、初期コンソールを入手する。BIOSは、次のバスを順に主画面を探す。
ISA カード:未だ使っている人がいれば、他のすべてに優先されることに注意されたい。テキストコーンソール用に有用である。
PCI カード:PCI バスは、オンボードデバイスとPCIカード双方を一緒に入手する混合物である。ほとんどのマザーボードでは、番号0の単一バスで、番号0:0(ホストコントローラ)、0:1、0:2、などのデバイスを有する。0:9:1、0:9:2などのサブデバイスがある。
オンボードPCI装置は、普通0:7迄の低い番号を与えられる。その後、デバイス0:8乃至1:12がPCIスロットにある筈で、マザーボードの「底」からAGPスロットの方向に番号が付けられる。
ほとんど全部のマザーボードのAGPスロットは一つだけだが、その理由はない。これはバス1の上のPCIデバイスとして、1:0と指定される。
例えば、オンボードPCIビデオカード一つと、着脱可能PCI一つと、AGP一つがあると、デバイス順は次のようになる:
第一 (主) デバイス: PCI 0:6 (オンボード) 第二デバイス: PCI 0:10 (着脱可能) 第三デバイス: PCI 1:0 (AGP)
別のマザーボード・メーカーは、オンボード・ビデオデバイスをスロットより高い番頭に設定する。こうして、オンボードビデオが焼けたとき(又は更新するとき)新しいビデオカードを挿入すると、低い番号がブートで優先権を与えられる。
これに関する詳細情報、このシステムは単一AGPカードを有するなど、をLinux上でえることが出来る:
cat /proc/pci
PCI devices found:
(((snip)))
Bus 1, device 0, function 0:
VGA compatible controller: Intel Unknown device (rev 33).
Vendor id=8086. Device id=7800.
Medium devsel. Fast back-to-back capable. IRQ 11. Master Capable. No bursts.
Prefetchable 32 bit memory at 0xce000000 [0xce000008].
Non-prefetchable 32 bit memory at 0xcfe80000 [0xcfe80000].
別の方法は(ルート優先権あり):
scanpci
カードの順序はBIOS内容なので−WindowsにもLinuxにも通用することに注意。
Windowsの下でのコンフィギュレーション
これは、ドライバトラブルに見舞われない限り−大変容易だ。コンピュータのビデオカード「一つ」に貼り付いて出発し、必要なドライバがあるのを確認することを勧める。続いて次のカードだけに進むなどである。こうすれば全部を一度にでなく、扱うことの出来る小さな部品で苦労することになる。
CD又はハードディスク上に必要なドライバ全部を持っており、それが手持ちのカードで働く確信があるなら、ビデオカードすべてをまとめて貼り付け、ブートでそれに画面をぶら下げる。
続いてもう一度ドライバを、一個宛、コンフィギュアし直す。コンピュータをブートし直すが、多分慣れておられるだろう
この時、有用なWindowsデスクトップが第一(主)画面に出て、Windowsがドライバを正しく認識下とのテキストメッセージがその他全部に出るだろう。そうならなければ、元に戻って。ビデオカードを正しくコンフィギュアする。
画面プロパティを見ると、次のようになっている筈だ:
ここで二番画面をクリックし、有効にして、コンフィギュアし、次に進む。他の全部もそうする。画面は同一の解像度や色深度である必要はない:
これで働く筈で、ウインドウを一つの画面から別の画面にドラッグすることが出来る。
XFree86を用いるコンフィギュレーション
XFree86 バージョン4は、前のバージョン3から色々な点で異なっている。始めるにはコンフィギュレーション・ファイルが次のようになる
/etc/X11/XF86Config-4
終わりの -4 注意。
古い画面毎に別々のサーバーバイナリファイルを離れて扱う。ここに、ビデオカードの各ファミリのため、単一メインサーバー・ファイルとモジュール(ドライバ)を用いる新しいモジュラー構想がある。これらは、ほとんどのディストリビューションにある:
/usr/X11R6/lib/modules/drivers
これは、Linux Kernelで起こったのと同じである:ドライバ全部を含んだモノリシックkernelから、最新kernelは、幸いロード可能モジュラー構想に進歩した。
多く使用されるドライバのリストを示す:
| ドライバ | サポートするカード |
| ati | most early ATI cards |
| r128 | ATI Rage-128 and 128-based cards |
| cirrus | Cirrus Logic GD54?? |
| cyrix | Cyrix Media GX CPU |
| i740 | Intel 740-based cards |
| i810 | Intel 810-based cards |
| mga | Matrox 100, 200, 400 |
| nv | N-vidia Riva 128, TNT GeForce, etc. |
| s3 | S3 non-Virge early PCI chipsets |
| s3virge | S3 Virge later PCI chipsets |
| vga | generic; replaces XFree86-SVGA |
| fbdev | generic; "flat" video memory mode |
このシステムはまた、新しいカードをサポートするためメーカーが自分自身のモジュラードライバを作るのが比較的容易であることをも意味する。そうなると良いと思う。
コンフィギュレーションは複雑ではない。XF86Config-4ファイルの最初の部分は、ほとんど自明なので、好みのディストリビューション設定プログラムに従って設定するのが良い。
モニタ・セクションでは、各モニタにそのセクションタグを与える。次のようにする:
Section "Monitor"
Identifier "monitor 1"
VendorName "Philips"
ModelName "Unknown"
HorizSync 30.0-64.0
VertRefresh 50.0-110.0
EndSection
望むだけの数のモニタを置いて名を付けることが出来る。私は、同じ型と構造のことが多いので、「モニタ1」などと呼んでいるが、最も便利な方法にすれば良い。
注意 垂直及び水平周波数に注意しないとブラウン管を文字通り爆発させることがある。正しい周波数をモニタのガイドから学ぶか、ウエブ上のメーカーサイトで見る。疑わしいときは、低い値にするとうまく働いた。つまりブラウン管が破裂しなかった:
水平同期 31.5-35.5 垂直更新 50.0-70.0
最新の多重同期モニタについてはいずれもこれらを扱うことが出来るが−極めて保守的で8ビット色(256色)で640x480を余り越えることは出来ない。概念を明らかにするだけだ。
これで各ビデーカード用にドライバを設定した。上述のディレクトリをリストにする。カード毎に1セクションとする:
Section "Device"
Identifier "device 1"
Driver "s3virge"
BusID "PCI:0:11:0"
EndSection
Section "Device"
Identifier "device 2"
VendorName "Unknown"
BoardName "Unknown"
Driver "i740"
VideoRam 8192
BusID "PCI:1:0:0"
EndSection
この場合、PCIスロットに挿入したS3カード一枚と、Intel 740-based AGP カードがあった。一枚のカードでは、バスIDを(/proc/pciから)探して規定する必要なない。だが、我々の場合、これらを、同一型の数枚のカードの間などで、区別する必要がある。
上の例では、二番目のS3 Virge をPCI スロット0:12に入れると、"s3virge" ドライバ行を繰り返す三番目のデバイスセクションを付け加えて、"PCI:0:12:0"と規定する。サーバーは洗練されているので、メモリにドライバのインスタンス二つは作らないで、同じドライバに対する二つリファレンスを作る。
モニタと同様に、設定プログラムが設定したアイデンティファイア・タグは、通常カードのチップセット商業用アイデンティファイアを含むが、勝手に変えることも出来る。
次いで、各モニタを適切なデバイスにリンクする画面セクションを設定する。これを本質的部分に解体した:
Section "Screen"
Identifier "screen 1"
Device "device 1"
Monitor "monitor 1"
DefaultColorDepth 16
Subsection "Display"
Depth 16
Modes "1024x768"
ViewPort 0 0
EndSubsection
EndSection
Section "Screen"
Identifier "screen 2"
Device "device 2"
Monitor "monitor 2"
DefaultColorDepth 24
Subsection "Display"
Depth 24
Modes "800x600"
ViewPort 0 0
EndSubsection
EndSection
最後に、全体システムを設定する:
Section "ServerLayout"
Identifier "layout 1"
Screen "screen 1"
Screen "screen 2" RightOf "screen 1"
Option "Xinerama" "on"
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
ここでは、画面2を画面1の右においた。任意の既存画面の左、上、下などに規定することも出来る。
Xinerama オプションもまた重要である。これはXサーバーの拡張で、画面1と画面2をリンクして、ウインドウとアイコンをドラッグすることが出来る単一デスクトップを形成する。
これはWindowsと同様に働くが、両(又は全)画面が同一色深度、通常8、16、24ビット、を有する必要がある。これは、上の例が働かないことを意味する(もう一度読んで、その理由を理解しているかを、読み進む前に、確かめられたい)
しかし、別々のデスクトップを用いて二つの画面を持つ方が良いだろう。例えば、自分用に一つの画面を持ち、他の人に自分のローカル・ネットワークを使わせることが出来る。又は一つの画面にKDEを持たせ、他にはウインドウマネージャを持たせない。自分の選択だ。これは、単にXineramaを切っておこなうことが出来る。
Option "Xinerama" "off"
最後に、画面をテキスト・コンソールに保ち対ことがあるだろう:そのときは、ServerLayout セクションで、"screen 1"(普通は、ここからブートしシステムエラーメッセージを受けるコンソール)を省いて、"screen 2", "screen 3"などを含む。
XFreeを試す
Windowsと同様に、各ビデオカードを個別に試験して出発するのが最良だ。テキストコンソール(ランレベル3)で始める。行頭の # でコメントアウトして、ServerLayoutに一画面だけを保つ。これで X serverをスタートすることが出来る(未だデスクトップは要らない):
X
X型のマウスカーソルが中央にある、白黒の十字模様画面が出る。次の命令で、Xを閉じてテキストコンソールに戻る
Ctrl + Alt + Backspace
そこで、別のカードにつき同じことをおこなう。全部を設定し終えたら、ServerLayoutの画面登録全部を案コメントして、もう一度Xを試す。今回は、すべての画面に十字模様が出て、Xineramaを起動すると、マウスが画面の間に移動する。
<smirk>And you didn't need to reboot, did you?</smirk>
ここで、startxを用いて直接グラフィック・デスクトップに入るか、又はrunlevel 5を用いてグラフィック・ログインに切り替えることが出来る:
init 5
Windows とLinuxとの比較
いつもの通り、両者のやり方には相違があり、結果も異なる。客観的に:
- Windows では、同一デスクトップの一部として、各種の色レベルと解像度でデバイスを使うことが出来る。しかし、一つ以上のデスクトップを使うことも、テキストコンソールをグラフィックに混ぜることも出来ない
- Windows は、再ブートが多くコンフィギュアが面倒である。
- 対照的に、Linuxはテキスト画面にグラフィックを混ぜることが出来る−これはキイボードで訓練された管理者に好都合−、一つ以上のデスクトップ又は単一のデスクトップのため全画面(又は画面の組合せ)を使うことが出来る。KDEとGnomeを同時に欲しいとき、それが出来る。単一の大きい WindowMakerが要るとき、それが出来る。2x2又は3x3ビデオウォールを設定したいとき、必要なのは充分なカードとそれを入れる充分なスロットだけだ。
- XFree86 バージョン 4 を持つLinuxは、私の説明が偏っていたかもしれないが−コンフィギュアが遙かに楽だ。
本当のところ、最近Mandrake 8.2を搭載したとき、ビデオカード全部を検出して自分でマルチヘッドになった。良い例だ。
読者への注意として、これはプログラムマシンでなくバックアップのあるコンピュータでおこなうこと。ビデオカードは、油断のならぬ品で噛みつくこともある。
追伸:この記事を翻訳するときは、GPLソフトウエアライセンスの精神で書いている、つまりコピイ、掲載、翻訳は自由(実は奨励)だが、どうかe-メールで通知されたい。翻訳を追跡したい−カリキュラムに役立つ。