diff --git a/documentation/content/ja/books/handbook/cutting-edge/_index.adoc b/documentation/content/ja/books/handbook/cutting-edge/_index.adoc index b4b366b197..0ecc55b09a 100644 --- a/documentation/content/ja/books/handbook/cutting-edge/_index.adoc +++ b/documentation/content/ja/books/handbook/cutting-edge/_index.adoc @@ -1,920 +1,920 @@ --- title: 第17章 FreeBSD のアップデートとアップグレード part: パートIII. システム管理 prev: books/handbook/l10n next: books/handbook/partiv --- [[updating-upgrading]] = FreeBSD のアップデートとアップグレード :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :skip-front-matter: :toc-title: 目次 :table-caption: 表 :figure-caption: 図 :example-caption: 例 :xrefstyle: basic :relfileprefix: ../ :outfilesuffix: :sectnumoffset: 17 ifeval::["{backend}" == "html5"] :imagesdir: ../../../images/books/handbook/cutting-edge/ endif::[] ifeval::["{backend}" == "pdf"] :imagesdir: ../../../../static/images/books/handbook/cutting-edge/ endif::[] ifeval::["{backend}" == "epub3"] :imagesdir: ../../../../static/images/books/handbook/cutting-edge/ endif::[] include::shared/authors.adoc[] include::shared/releases.adoc[] include::shared/ja/mailing-lists.adoc[] include::shared/ja/teams.adoc[] include::shared/ja/urls.adoc[] toc::[] [[updating-upgrading-synopsis]] == この章では あるリリースから次のリリースまでの期間にも、 FreeBSD の開発は休みなく続けられています。 最新の開発ツリーと同期することを好む人がいれば、 公式のリリース版を好んで使う方もいるでしょう。 しかしながら、公式のリリースといえども、 セキュリティや他の重要な修正のため、時にはアップデートを行う必要があります。 使用しているバージョンに関わらず、FreeBSD は手元のシステムを最新の開発ツリーと同期するために必要なツールをすべて用意しているので、 これらのツールを使ってバージョンのアップグレードを簡単に行うことができます。 この章では、開発ブランチを追いかける方法、および、FreeBSD システムをアップデートする基本的なツールについて解説します。 この章を読んで分かるのは: * freebsd-update もしくは Subversion を使った FreeBSD システムの更新方法 * インストールされているシステムと、変更が行われていない状態との比較方法。 * Subversion またはドキュメント用の ports を使って、 インストールされているドキュメントを最新版にアップデートする方法。 * 2 つの開発ブランチ、FreeBSD-STABLE と FreeBSD-CURRENT の違い * ベースシステム全体を再構築しインストールする方法 この章を読む前に、以下の準備をしましょう。 * ネットワーク接続の適切な設定 (crossref:advanced-networking[advanced-networking,高度なネットワーク]) * サードパーティ製のソフトウェアのインストール方法の習得 (crossref:ports[ports,アプリケーションのインストール - packages と ports]) [NOTE] ==== この章を通じて、 FreeBSD のソースコードをダウンロードしたりアップデートするのに `svnlite` が用いられます。 必要に応じて package:devel/subversion[] port または package が使われることもあります。 ==== [[updating-upgrading-freebsdupdate]] == FreeBSD Update -すみやかにセキュリティパッチを適用し、 オペレーティングシステムを新しいリリースにアップグレードすることは、 システム管理における重要な側面です。 FreeBSD には、これらの処理を行うために `freebsd-update` と呼ばれるユーティリティが用意されています。 +すみやかにセキュリティパッチを適用し、 オペレーティングシステムをアップグレードして、 最新のリリースに保つことは、システム管理における重要な側面です。 これらの処理を行うために FreeBSD には `freebsd-update` と呼ばれるユーティリティが用意されています。 このユーティリティを用いると、FreeBSD のセキュリティおよび eratta アップデートをバイナリによって行うことができます。 手動でパッチもしくは新しいカーネルをコンパイルし、 インストールする必要はありません。 バイナリアップデートは、 セキュリティチームがサポートしているすべてのアーキテクチャとリリースで利用できます。 https://www.FreeBSD.org/ja/security/[https://www.FreeBSD.org/ja/security/] には、 サポートが行われているリリースや保守終了予定日の一覧があります。 このユーティリティは、マイナーリリースであったり、 他のリリースブランチへのアップグレードにも対応しています。 新しいリリースにアップデートする前に、 アップデートしようとしているリリースのアナウンスに目を通し、 重要な情報がないかどうかを確認してください。 リリースのアナウンスは https://www.FreeBSD.org/ja/releases/[https://www.FreeBSD.org/ja/releases/] で確認できます。 [NOTE] ==== もし `crontab` の中に man:freebsd-update[8] の機能が含まれていたら、 オペレーティングシステムのアップグレード作業を終えるまでは無効にしてください。 ==== この節では、`freebsd-update` で使われる設定ファイルの説明、 セキュリティパッチの適応方法のデモンストレーション、 オペレーティングシステムをアップグレードする際に考慮すべき点について説明します。 [[freebsdupdate-config-file]] === 設定ファイル `freebsd-update` のデフォルトの設定ファイルは、 そのままでも用いることができます。 [.filename]#/etc/freebsd-update.conf# の設定をデフォルトからきめ細かく調整して、 アップデートプロセスを制御するユーザもいます。 利用可能なオプションについてはこのファイルのコメントで説明されていますが、 以下の項目については補足が必要でしょう。 [.programlisting] .... # Components of the base system which should be kept updated. Components world kernel .... このパラメータは、FreeBSD のどの部分を最新に維持するかを設定します。 デフォルトでは、ベースシステム全体、 そしてカーネルをアップデートします。 `src/base` や `src/sys` のように、個々の項目を指定することもできます。 この部分についてはデフォルトのままにしておき、 アップデートする項目をユーザがリストに加える形にするのがベストでしょう。 ソースコードとバイナリが同期していないと、 長い年月の間に悲惨な結果がもたらされる可能性があります。 [.programlisting] .... # Paths which start with anything matching an entry in an IgnorePaths # statement will be ignored. IgnorePaths /boot/kernel/linker.hints .... [.filename]#/bin# や [.filename]#/sbin# 等の特定のディレクトリをアップデートで変更しないように、 これらのパスを追加してください。 このオプションは、ローカルの変更点を `freebsd-update` が上書きすることを防ぐ目的にも利用できます。 [.programlisting] .... # Paths which start with anything matching an entry in an UpdateIfUnmodified # statement will only be updated if the contents of the file have not been # modified by the user (unless changes are merged; see below). UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile .... このオプションは、指定したディレクトリにある設定ファイルを、 ローカルで変更されていない場合のみアップデートします。 ユーザがこれらのファイルを変更していると、 変更されたファイルの自動アップデートは行われません。 他に、`KeepModifiedMetadata` という別のオプションが存在します。 このオプションは、`freebsd-update` がマージ中に変更点を保存するようにします。 [.programlisting] .... # When upgrading to a new FreeBSD release, files which match MergeChanges # will have any local changes merged into the version from the new release. MergeChanges /etc/ /var/named/etc/ /boot/device.hints .... `freebsd-update` がマージすべきファイルが存在するディレクトリの一覧です。 ファイルのマージのプロセスは、 man:mergemaster[8] と同様 man:diff[1] パッチの連続ですが、 選択肢は少なく、マージを承認するか、エディタを起動するか、 `freebsd-update` を中断するかどうかを選んでください。 もし、心配な点があれば、 [.filename]#/etc# をバックアップしてからマージを承認してください。 `mergemaster` の詳細な情報については、 man:mergemaster[8] で確認してください。 [.programlisting] .... # Directory in which to store downloaded updates and temporary # files used by FreeBSD Update. # WorkDir /var/db/freebsd-update .... ここではすべてのパッチや一次ファイルを置くディレクトリを指定しています。 バージョンをアップグレードするのであれば、 この場所には少なくともギガバイトの空き容量が必要です。 [.programlisting] .... # When upgrading between releases, should the list of Components be # read strictly (StrictComponents yes) or merely as a list of components # which *might* be installed of which FreeBSD Update should figure out # which actually are installed and upgrade those (StrictComponents no)? # StrictComponents no .... このオプションを `yes` に設定すると、 `freebsd-update` は `Components` のリストが完全に正しいと判断し、 このリスト以外の変更点については取り扱いません。 `freebsd-update` は、効率的に `Components` リストに属するファイルをアップデートします。 [[freebsdupdate-security-patches]] === セキュリティパッチの適用 FreeBSD のセキュリティパッチを適用する過程は簡単になりました。 管理者は `freebsd-update` を使うことで、 システムを完全にパッチがあたった状態に保つ事ができます。 FreeBSD セキュリティ勧告の詳細については、 crossref:security[security-advisories,FreeBSD セキュリティ勧告] の節で説明されています。 以下のコマンドを実行すると、FreeBSD のセキュリティパッチがダウンロードされ、インストールされます。 最初のコマンドは、未対応のパッチがあるかどうかを調べます。 もし未対応のパッチがある場合には、 パッチが当てられた際に変更されるファイルのリストが作成されます。 2 番目のコマンドはパッチを適用します。 [source,bash] .... # freebsd-update fetch # freebsd-update install .... アップデートによってカーネルにパッチが当たった場合には、 パッチが当たったカーネルで起動するように、 システムを再起動する必要があります。 もし、実行中のバイナリにパッチが当てられた場合には、 パッチの当てられたバージョンのバイナリが使われるように、 影響のあるアプリケーションを再起動する必要があります。 [NOTE] ==== 通常、ユーザはシステムを再起動する必要があります。 カーネルアップデートで再起動が必要かどうかを知るには、 `freebsd-version -k` と `uname -r` を実行してください。 これら 2 つのコマンドの結果が異なる場合には、 再起動が必要です。 ==== 毎日一度アップデートがないかどうかを自動的に確認するように設定するには、 以下のエントリを [.filename]#/etc/crontab# に追加してください。 [.programlisting] .... @daily root freebsd-update cron .... パッチが存在すると、 自動的にダウンロードされますが、適用はされません。 ``root``宛てにメールで、 ダウンロードされたパッチを確認し、 `freebsd-update install` とともに手動でインストールする必要のあることが通知されます。 うまく行かなかった場合には、`freebsd-update` を以下のように実行すると、最後の変更までロールバックできます。 [source,bash] .... # freebsd-update rollback Uninstalling updates... done. .... カーネルまたはカーネルモジュールがアップデートされた場合には、 完了後にもう一度システムを再起動して、 影響のあったバイナリを再起動してください。 `freebsd-update` ユーティリティが自動的にアップデートするカーネルは [.filename]#GENERIC# のみです。 カスタムカーネルをインストールしている場合には、 `freebsd-update` によりインストールした後、 カーネルを再構築し、もう一度インストールする必要があります。 デフォルトのカーネルの名前は _GENERIC_ です。 man:uname[1] コマンドを使ってインストールされているかどうかを確認できます。 [NOTE] ==== [.filename]#GENERIC# カーネルを、 常に [.filename]#/boot/GENERIC# に置いておいてください。 さまざまな問題を解決する際や、 バージョンをアップグレードする際に助けとなります。 [.filename]#GENERIC# カーネルを用意する方法については、 <> を参照してください。 ==== [.filename]#/etc/freebsd-update.conf# のデフォルトの設定を変更しない限り、 `freebsd-update` は、 他の更新と共にカーネルソースをアップデートします。 新しいカスタムカーネルの再構築と再インストールは、 通常通り行うことができます。 `freebsd-update` は、 常にカーネルをアップデートするとは限りません。 `freebsd-update install` によってカーネルソースが変更されなかった場合には、 カスタムカーネルを再構築する必要はありません。 しかしながら `freebsd-update` は、 [.filename]#/usr/src/sys/conf/newvers.sh# を常にアップデートします。 これは、現在のシステムのパッチレベルを `uname -r` が `-p` で表示する時にこのファイルが参照されます。 そのため、何も変更されていない場合でも、 カスタムカーネルを再構築することにより、 `uname` がシステムの正確なパッチレベルを報告するようになります。 各システムにインストールされているアップデートをすばやく把握できるようになるので、 特に複数のシステムを管理するときに助けとなります。 [[freebsdupdate-upgrade]] === メジャーおよびマイナーバージョンのアップグレードを行う -FreeBSD のマイナーバージョン間のアップグレード、 たとえば、FreeBSD 9.0 から FreeBSD 9.1 へのアップグレードは、 _マイナーバージョン_ アップグレードと呼ばれます。 _メジャーバージョン_ アップグレードは、 FreeBSD 9.X から FreeBSD 10.X へのアップグレードといった、 FreeBSD のメジャーバージョンが変わるようなアップグレードのことです。 どちらのアップグレードもリリース番号のターゲットを指定する事で、 `freebsd-update` によって行う事ができます。 +FreeBSD のマイナーバージョン間のアップグレード、 たとえば、FreeBSD 9.0 から FreeBSD 9.1 へのアップグレードは、 _マイナーバージョン_ アップグレードと呼ばれます。 _メジャーバージョン_ アップグレードは、 FreeBSD 9.X から FreeBSD 10.X へのアップグレードといった、 FreeBSD のメジャーバージョンが変わるようなアップグレードのことです。 どちらもアップグレードも、`freebsd-update` にリリース番号のターゲットを指定する事で実行できます。 [NOTE] ==== カスタムカーネルを使っているシステムでは、 アップグレードを行う前に [.filename]#GENERIC# カーネルが、 [.filename]#/boot/GENERIC# に置かれている事を確認してください。 [.filename]#GENERIC# カーネルを用意する方法については、 <> を参照してください。 ==== 以下のコマンドを実行すると、FreeBSD 9.0 のシステムを FreeBSD 9.1 にアップグレードします。 [source,bash] .... # freebsd-update -r 9.1-RELEASE upgrade .... コマンドを実行すると、`freebsd-update` は設定ファイルと現在のシステムを評価し、 アップデートするために必要な情報を収集します。 画面には、どのコンポーネントが認識され、 どのコンポーネントが認識されていないといったリストが表示されます。 たとえば以下のように表示されます。 [source,bash] .... Looking up update.FreeBSD.org mirrors... 1 mirrors found. Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done. Fetching metadata index... done. Inspecting system... done. The following components of FreeBSD seem to be installed: kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin world/base world/info world/lib32 world/manpages The following components of FreeBSD do not seem to be installed: kernel/generic world/catpages world/dict world/doc world/games world/proflibs Does this look reasonable (y/n)? y .... ここで、`freebsd-update` はアップグレードに必要なすべてのファイルをダウンロードします。 何をインストールし、どのように進むかといった質問をされることもあります。 カスタムカーネルを使っていると、 上記のステップで以下のような警告が表示されます。 [source,bash] .... WARNING: This system is running a "MYKERNEL" kernel, which is not a kernel configuration distributed as part of FreeBSD 9.0-RELEASE. This kernel will not be updated: you MUST update the kernel manually before running "/usr/sbin/freebsd-update install" .... この時点ではこの警告を無視してもかまいません。 アップデートされた [.filename]#GENERIC# カーネルは、 アップグレードプロセスの途中で利用されます。 すべてのパッチがローカルシステムへダウンロードされたら、 次にパッチが適用されます。 このプロセスには時間がかかります。 この時間はコンピュータの性能とワークロードに依存します。 その後、設定ファイルがマージされます。 このプロセスでは、ユーザはファイルをマージするか、 画面上にエディタを立ち上げて手動でマージするかを尋ねられます。 プロセスが進むごとに、成功したマージのすべての結果の情報がユーザに示されます。 マージに失敗したり、無視した場合には、プロセスが中断します。 ユーザによっては [.filename]#/etc# のバックアップを取り、 [.filename]#master.passwd# や [.filename]#group# のような重要なファイルを後で手動でマージする方もいます。 [NOTE] ==== すべてのパッチは別のディレクトリでマージされており、 まだ、システムには反映されていません。 すべてのパッチが正しく適用され、 すべての設定ファイルがマージされてプロセスがスムーズに進んだら、 ユーザは以下のコマンドを用いて、 変更点をディスクに反映してください。 [source,bash] .... # freebsd-update install .... ==== パッチは最初にカーネルとカーネルモジュールに対して当てられます。 システムがカスタムカーネルを実行している場合には、 man:nextboot[8] を使って次回の再起動時のカーネルを、 アップデートされた [.filename]#/boot/GENERIC# に設定してください。 [source,bash] .... # nextboot -k GENERIC .... [WARNING] ==== - [.filename]#GENERIC# カーネルで再起動する前に、 カーネルにシステムが適切に起動するために必要なすべてのドライバが含まれていること、 もしアップデートしているコンピュータがリモートでアクセスしているのであれば、 ネットワーク接続に必要なすべてのドライバも含まれていることを確認してください。 特に、これまで実行しているカスタムカーネルが、 カーネルモジュールとして提供されているビルドインの機能を含んでいるのであれば、 これらのモジュールを一時的に [.filename]#/boot/loader.conf# の機能を用いて、 [.filename]#GENERIC# に読み込んでください。 アップグレードプロセスが終わるまでは、 重要ではないサービスを無効にするとともに、 必要のないディスクやネットワークのマウントなども避けることが推奨されています。 ==== アップデートされたカーネルでコンピュータを再起動してください。 [source,bash] .... # shutdown -r now .... システムがオンラインに戻ったら、以下のコマンドを使って `freebsd-update` を再び実行してください。 アップデートプロセスの状態は保存されているので、 `freebsd-update` を実行すると、 最初からではなく、次のステップに進み、 古い共有ライブラリとオブジェクトファイルを削除します。 [source,bash] .... # freebsd-update install .... [NOTE] ==== 使用しているライブラリのバージョン番号の付けられ方によって、 3 つのインストールフェーズが 2 つになる場合もあります。 ==== アップグレードはこれで終了です。 もしメジャーアップグレードを行った場合には、 <> で説明されているようにすべての ports および package を再構築してください。 [[freebsd-update-custom-kernel-9x]] ==== FreeBSD 9.X 以降のシステムにおけるカスタムカーネル -`freebsd-update` を使う前に、 [.filename]#GENERIC# カーネルが [.filename]#/boot/GENERIC# に置かれていることを確認してください。 ただ一度だけカスタムカーネルを構築したのであれば、 [.filename]#/boot/kernel.old# は [.filename]#GENERIC# カーネルそのものです。 このディレクトリの名前を [.filename]#/boot/kernel# へと変更してください。 +`freebsd-update` を使う前に、 [.filename]#GENERIC# カーネルが [.filename]#/boot/GENERIC# に置かれていることを確認してください。 ただ一度だけカスタムカーネルを構築したのであれば、 [.filename]#/boot/kernel.old# は [.filename]#GENERIC# カーネルそのものです。 このディレクトリの名前を [.filename]#/boot/GENERIC# へと変更してください。 もし、2 回以上カスタムカーネルを構築した後であったり、 カスタムカーネルを構築した回数がわからなければ、 現在のオペレーティングシステムのバージョンの [.filename]#GENERIC# カーネルを入手してください。 コンピュータへの物理的なアクセスが可能であれば、 インストールメディアから [.filename]#GENERIC# カーネルをインストールできます。 [source,bash] .... # mount /cdrom # cd /cdrom/usr/freebsd-dist # tar -C/ -xvf kernel.txz boot/kernel/kernel .... 別な方法としては、 [.filename]#GENERIC# カーネルをソースから再構築して、 インストールしてください。 [source,bash] .... # cd /usr/src # make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null .... `freebsd-update` がこのカーネルを [.filename]#GENERIC# カーネルとして認識するために、 [.filename]#GENERIC# コンフィグレーションファイルは、 とにかく変更してはいけません。 また、特別なオプションを指定しないで構築してください。 `freebsd-update` は、 [.filename]#/boot/GENERIC# が存在する事だけを必要とするので、 [.filename]#GENERIC# カーネルで再起動する必要はありません。 [[freebsdupdate-portsrebuild]] ==== メジャーバージョンアップグレード後の package のアップグレード 一般的に、マイナーバージョンアップグレードの後では、 インストールされているアプリケーションは、問題なく動作するでしょう。 メジャーバージョンが異なるとアプリケーションバイナリーインタフェース (ABI) が異なるため、 サードパーティ製のアプリケーションの多くは動作しなくなるでしょう。 メジャーバージョンアップグレード後には、 インストールされているすべての packages, ports をアップグレードする必要があります。 package は、`pkg upgrade` を使ってアップグレードできます。 インストールされている ports をアップグレードする場合には、 package:ports-mgmt/portmaster[] といったユーティリティを使ってください。 すべての package の強制的なアップグレードでは、 バージョン番号が上がらない package に対しても、 リポジトリから最新のバージョンで、インストールされている package を置き換えます。 FreeBSD のメージャーバージョンが変わるようなアップグレードでは、 ABI のバージョンも変わるため、 このようなアップグレードが必要になります。 強制的なアップグレードを行うには、以下のように実行してください。 [source,bash] .... # pkg-static upgrade -f .... インストールされているすべてのアプリケーションを再構築するには、 以下のコマンドを実行してください。 [source,bash] .... # portmaster -af .... このコマンドを実行すると、 設定を変更するオプションを持つアプリケーションは、 設定変更のスクリーンを表示し、 ユーザからの指示待ちの状態で停止します。 この振る舞いをやめ、デフォルトのオプションを使用するには、 上記のコマンドに `-G` を含めてください。 ソフトウェアのアップグレードが終わったら、最後にもう一度 `freebsd-update` を実行して、 すべてのアップグレードプロセスのやり残し作業を行い、 アップグレードのプロセスを完了してください。 [source,bash] .... # freebsd-update install .... [.filename]#GENERIC# カーネルを一時的に読み込んでいたのであれば、crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] に書かれている手順に従って、 新しいカスタムを構築し、インストールしてください。 コンピュータを再起動し、新しい FreeBSD を立ち上げてください。 これでアップグレードのプロセスは完了です。 [[freebsdupdate-system-comparison]] === システムの状態の比較 `freebsd-update` を用いて、 インストールされている FreeBSD の状態と、 正しく動作することが分かっている状態とを比較できます。 このコマンドは、現在のシステムのユーティリティ、ライブラリ、 設定ファイルを評価するので、 組み込みの侵入検知システム (IDS) として使うことができます。 [WARNING] ==== - このコマンドは、package:security/snort[] のような本当の IDS の置き換えになるものではありません。 `freebsd-update` はデータをディスクに保存するので、 不正な変更が行われる可能性があります。 `kern.securelevel` と、 `freebsd-update` のデータを使用しないときに、 読み取りのみの許可属性に設定されているファイルシステムに置くことで、 不正な変更の可能性を低くできますが、 よりよい解決方法は、 DVD または安全に保存されている外部 USB ディスクのような安全なディスクとシステムを比較することです。 組み込まれているユーティリティを用いた、別の方法による IDS 機能については、 crossref:security[security-ids,FreeBSD バイナリによる検出] の節をご覧ください。 ==== 比較を行うには、 結果の出力先のファイル名を指定してください。 [source,bash] .... # freebsd-update IDS >> outfile.ids .... システムは検査され、リリースファイルの SHA256 ハッシュ値と現在インストールされているファイルのハッシュ値がファイルの一覧と共に、 指定した出力先のファイルに送られます。 これらの行は極めて長いのですが、出力形式は簡単にすぐに解析できます。 たとえば、これらのリリースで異なっているすべてのファイルを知りたいのであれば、 以下のコマンドを実行してください。 [source,bash] .... # cat outfile.ids | awk '{ print $1 }' | more /etc/master.passwd /etc/motd /etc/passwd /etc/pf.conf .... 上の表示例では出力は切り捨てられており、 実際にはもっと多くのファイルが存在します。 これらのファイルには、運用中に変更されるファイルがあります。 たとえば、[.filename]#/etc/passwd# はユーザがシステムに追加されると変更されます。 また、カーネルモジュールは、 `freebsd-update` によりアップデートされるため、変更されます。 このような特別なファイルやディレクトリを除外するには、 それらを [.filename]#/etc/freebsd-update.conf# の `IDSIgnorePaths` オプションに追加してください。 [[updating-upgrading-documentation]] == ドキュメントのアップデート ドキュメントは、FreeBSD オペレーティングシステムの必須要素です。 FreeBSD ドキュメントの最新バージョンは、FreeBSD ウェブサイト (link:https://www.FreeBSD.org/doc/[https://www.freebsd.org/doc/]) から入手できますが、 FreeBSD ウェブサイト、ハンドブック、FAQ および文書の最新版をローカルに用意しておくと便利です。 この章では、ソースまたは Ports Collection を使って、 ローカルの FreeBSD ドキュメントを最新に保つ方法を説明します。 ドキュメントを編集したり、 ドキュメントの誤りを報告する方法については、 新しい貢献者のための FreeBSD ドキュメンテーションプロジェクト入門 (link:{fdp-primer}[FreeBSD Documentation Project Primer]) をご覧ください。 [[updating-installed-documentation]] === ソースから FreeBSD ドキュメントをインストールする ソースから FreeBSD ドキュメントを構築するのに必要なツールは、 FreeBSD のベースシステムには含まれていません。 必要なツールは、FreeBSD ドキュメンテーションプロジェクトが開発している package:textproc/docproj[] package または port からインストールできます。 インストールしたら、svnlite を使って、ドキュメントのソースをダウンロードしてください。 [source,bash] .... # svnlite checkout https://svn.FreeBSD.org/doc/head /usr/doc .... 最初にドキュメントのソースをダウンロードするには少し時間がかかります。 ダウンロードが終わるまでお待ちください。 ダウンロードしたドキュメントのソースをアップデートするには、 以下のコマンドを実行してください。 [source,bash] .... # svnlite update /usr/doc .... 最新のドキュメントのソースのスナップショットを [.filename]#/usr/doc# に用意できたら、 インストールされているドキュメントをアップデートする準備はすべて整いました。 利用可能なすべての言語のドキュメントをアップデートするには、 以下のように入力してください。 [source,bash] .... # cd /usr/doc # make install clean .... もし、ある特定の言語のみをアップデートしたいのであれば、 [.filename]#/usr/doc# の下にある各言語のサブディレクトリで `make` を実行してください。 [source,bash] .... # cd /usr/doc/en_US.ISO8859-1 # make install clean .... ドキュメントをアップデートする別の方法は、 [.filename]#/usr/doc# または各言語のサブディレクトリで以下のコマンドを実行してください。 [source,bash] .... # make update .... `FORMATS` を設定して、 以下のようにインストールする出力形式を指定できます。 [source,bash] .... # cd /usr/doc # make FORMATS='html html-split' install clean .... ドキュメンテーションの一部のアップデートを簡単にするオプションや、 特定の翻訳のビルドを行うためのオプションが用意されています。 これらのオプションは、システム全般のオプションである [.filename]#/etc/make.conf# や、`make` に与えるコマンドラインオプションで設定できます。 オプションには以下のようなものがあります。 `DOC_LANG`:: ビルドおよびインストールの言語およびエンコーディングの一覧。 たとえば、英語のドキュメントを指定するには `en_US.ISO8859-1` を設定します。 `FORMATS`:: ビルドを行うフォーマット、または出力フォーマットの一覧。 現在は `html`, `html-split`, `txt`, `ps` そして `pdf` に対応しています。 `DOCDIR`:: -ドキュメントをインストールする場所。デフォルトは [.filename]#/usr/shared/doc# です。 +ドキュメントをインストールする場所。デフォルトは [.filename]#/usr/share/doc# です。 FreeBSD のシステム全般のオプションに関連するもっと多くの `make` 変数については、 man:make.conf[5] をご覧ください。 [[doc-ports-install-package]] === ports を用いたドキュメンテーションのアップデート これまでのセクションでは、ソースコードを用いた FreeBSD ドキュメントのアップデート方法について説明してきました。 この節では、インストールされている FreeBSD のドキュメントをアップデートするもう一つの方法である、 Ports Collection を用いた方法について説明し、 以下について説明します。 * 構築済のドキュメントの packages をインストールする方法。 ローカルでの構築作業やドキュメンテーションツールチェインをインストールする必要はありません。 * ports フレームワークを使ったドキュメントのソースの構築方法。 チェックアウトおよび構築作業が簡単になります。 FreeBSD のドキュメントをアップデートするこれらの方法は、 {doceng} が毎月アップデートしている ドキュメンテーション ports および packages によりサポートされています。 これらの ports は、FreeBSD Ports Collection の docs カテゴリ (http://www.freshports.org/docs/[http://www.freshports.org/docs/]) にまとめられています。 ドキュメンテーション ports の構成は以下の通りです。 * package:misc/freebsd-doc-en[] package または portは、 すべての英語文書をインストールします。 * package:misc/freebsd-doc-all[] メタ package もしくは port は、 すべての利用可能な言語のすべてのドキュメントを構築します。 * 各言語のために package または port が用意されています。たとえば、 package:misc/freebsd-doc-hu[] はハンガリー語のドキュメンテーション port です。 バイナリ package を使うと、 インストールする言語に用意されているすべての形式の FreeBSD ドキュメントがインストールされます。 たとえば、以下のコマンドを実行すると、 ハンガリー語のドキュメントの最新 package がインストールされます。 [source,bash] .... # pkg install hu-freebsd-doc .... [NOTE] ==== ドキュメントの package は、対応する port 名とは異なり、 `_lang_-freebsd-doc` の形式で名前がつけられています。 ここで、_lang_ は言語コードの短縮形です。 ハンガリー語の場合は `hu`、簡体字の場合には `zh_cn` です。 ==== ドキュメントのフォーマットを指定する場合には、package ではなく port から構築してください。たとえば、 英語のドキュメントを構築してインストールするには以下のようにして下さい。 [source,bash] .... # cd /usr/ports/misc/freebsd-doc-en # make install clean .... この port には、 構築およびインストールするフォーマットを設定するメニューがあります。 デフォルトでは、link:http://www.FreeBSD.org[http://www.FreeBSD.org] と同じ形式である分割版の HTML 形式、 PDF が選択されています。 以下のように、ドキュメンテーション ports を構築する際の `make` オプションが用意されています。 `WITH_HTML`:: HTML 形式を構築します。 各ドキュメントに対し、単一版の HTML ファイルが構築されます。 整形されたドキュメントは、 [.filename]#article.html# や [.filename]#book.html# といった名前でインストールされます。 `WITH_PDF`:: 整形されたドキュメントは、 [.filename]#article.pdf# や [.filename]#book.pdf# といった名前でインストールされます。 `DOCBASE`:: -ドキュメントのインストール先を設定します。 デフォルトのインストール先は [.filename]#/usr/local/shared/doc/freebsd# です。 +ドキュメントのインストール先を設定します。 デフォルトのインストール先は [.filename]#/usr/local/share/doc/freebsd# です。 以下は、上記の変数を用いてハンガリー語のドキュメントを PDF 形式でインストールする方法です。 [source,bash] .... # cd /usr/ports/misc/freebsd-doc-hu # make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean .... crossref:ports[ports,アプリケーションのインストール - packages と ports] に書かれている手順を使って、 ドキュメンテーション package または port をアップデートできます。 たとえば、以下のコマンドを実行すると、 package:ports-mgmt/portupgrade[] から、package だけを使ってインストールされているハンガリー語のドキュメントをアップデートします。 [source,bash] .... # portmaster -PP hu-freebsd-doc .... [[current-stable]] == 開発ブランチを追いかける FreeBSD には二つの開発ブランチがあります。 それは FreeBSD-CURRENT と FreeBSD-STABLE です。 この節ではそれぞれのブランチと対象としている読者についての説明と、 どのようにしてシステムの対応するブランチを最新の状態に保つかについて説明します。 +_訳: 、1996 年 11 月 6 日_ + [[current]] === FreeBSD-CURRENT を使う FreeBSD-CURRENT とは FreeBSD の開発の "最前線" なので、 FreeBSD-CURRENT のユーザは高い技術力を持つことが要求されます。 そこまでの技術力を持っていないが、 開発ブランチを追いかけたいと考えているユーザは、 かわりに FreeBSD-STABLE を追いかけると良いでしょう。 FreeBSD-CURRENT は FreeBSD の最新のソースコードであり、 中には現在開発途上のソフトウェア、 実験的な変更、あるいは過渡的な機能などが含まれています。 また、この中に入っている機能がすべて、 次の公式リリースに入るとは限りません。FreeBSD-CURRENT をソースからほぼ毎日コンパイルしている人はたくさんいますが、 短い期間ではコンパイルさえできない状態になっている時期もあります。 これらの問題は可能な限り迅速に解決されますが、 FreeBSD-CURRENT が不幸をもたらすか、 それとも新しい機能をもたらすかは、 まさにソースコードを同期した瞬間によるのです! FreeBSD-CURRENT は、 次の 3 つの重要なグループを対象としています。 . ソースツリーのある部分に関して活発に作業している FreeBSD コミュニティのメンバ。 . 活発にテストしている FreeBSD コミュニティのメンバ。 彼らは、種々の問題を解決するのに時間を惜しまない人々であり、 さまざまな変更に関する提案や FreeBSD の大まかな方向付けを行ないたいと思っている人々でもあり、 パッチも提出します。 . さまざまな事に目を向け、 参考のために最新のソースを使いたいと思っていたり、 時々コメントやコードを寄稿したいと考えているユーザ。 FreeBSD-CURRENT は、次のリリースの前に、 最も早く新しい機能を入手する手段として、 期待しては__いけません__。 リリース前の機能は十分にテストされていないため、 バグを含んでいる可能性が大いにあるためです。 また、バグを修正するための素早い方法でもありません。 いかなるコミットは、元からあるバグを修正するのと同じく、 新しいバグを生み出すおそれがあります。 FreeBSD-CURRENT には "公式のサポート" はありません。 FreeBSD-CURRENT を追いかけるには . {freebsd-current} と {svn-src-head} メーリングリストに加わってください。 さまざまな人がシステムの現在の状態について述べているコメントを見たり、 FreeBSD-CURRENT の現在の状態に関する重要な情報を見逃さないために、 _必須の_ ことです。 + {svn-src-head} メーリングリストでは、 それぞれの変更についての commit ログが記録されています。 また、それに関して起こり得る副作用の情報を得ることができますので、 参加する価値のあるメーリングリストです。 + これらのメーリングリストに入るには、 {mailman-lists-url} をたどって参加したいメーリングリストをクリックし、 手順の説明にしたがってください。 FreeBSD-CURRENT だけでなく、 ソースツリー全体の変更点を追いかけるのであれば、 {svn-src-all} メーリングリストを購読してください。 . FreeBSD-CURRENT のソースを同期してください。 特に crossref:mirrors[svn,svnlite] を使って crossref:mirrors[svn-mirrors,「Subversion ミラーサイト」] の一覧にある Subversion ミラーサイトのひとつの `head` ブランチから -CURRENT コードをチェックアウトしてください。 . リポジトリのサイズが大きいため、興味のある部分や、 パッチを当てる部分のソースのみを同期するユーザもいます。 しかしながら、 ソースからオペレーティングシステムをコンパイルしようと思っているユーザは、 一部分だけではなく、FreeBSD-CURRENT の _すべて_ をダウンロードする必要があります。 + FreeBSD-CURRENT をコンパイル する前に [.filename]#/usr/src/Makefile# を注意深く読み、 <> に書かれている手順に従ってください。 {freebsd-current} と [.filename]#/usr/src/UPDATING# を読めば、 次のリリースへ向けて移ってゆくに当たって、 ときどき必要となる既存システムからの新システムの構築手順についての最新情報が得られるでしょう。 . アクティブになってください! FreeBSD-CURRENT のユーザには、 拡張やバグ潰しに関して提案することが勧められています。 コードを伴う提案はいつでも歓迎されます! [[stable]] === FreeBSD-STABLE を使う +__訳: __ + FreeBSD-STABLE とは定期的に公開されるリリースを作成するための開発ブランチです。 このブランチに加えられる変更は FreeBSD-CURRENT よりゆっくりで、 原則として、事前に FreeBSD-CURRENT で試験ずみであるという特徴があります。 ただ__そうであっても__、 これは開発用ブランチの一つであり、ある時点における FreeBSD-STABLE のソースがどんな場合にも使えるものであるとは限りません。 このブランチはもう一つの開発の流れというだけであって、 エンドユーザ向けのものではありません。 もし試験をする資源的な余裕がない場合は、代わりに最新の FreeBSD リリースを使ってください。 FreeBSD の開発プロセスに興味があったり、 それに対する貢献を考えていて、特にそれが次回の FreeBSD のリリースに関係するものであるなら FreeBSD-STABLE を追うことを考えると良いでしょう。 FreeBSD-STABLE ブランチはいつもコンパイルができ、 安定に動作すべきですが、 それが保証されているというわけではありません。 FreeBSD-STABLE のユーザは FreeBSD-CURRENT よりも多いため、FreeBSD-CURRENT で発見されなかったバグが FreeBSD-STABLE で発見され、 ときどきそれが問題となることがあるのは避けることができません。 このような理由から、盲目的に FreeBSD-STABLE を追いかけるべきではありません。 特に、開発環境もしくはテスト環境でコードを十分に試験せずに、 プロダクション品質が要求されるサーバを FreeBSD-STABLE にアップグレードしては__いけません__。 FreeBSD-STABLE を追いかけるには . FreeBSD-STABLE の構築に関連する事柄や、 その他の注意すべき点 に関する情報を得るために、 {freebsd-stable} メーリングリストに加わってください。 また開発者は議論の余地がある修正や変更を考えている場合に、 このメーリングリストで公表し、 提案された変更に関して問題が生じるかどうかを返答する機会をユーザに与えます。 + 追いかけているブランチに関連する svn メーリングリストに参加してください。 たとえば、9-STABLE ブランチを追いかけているユーザは {svn-src-stable-9} メーリングリストに参加してください。 このリストでは、変更がなされるごとに作成される commit log やそれに伴う起こりうる副作用についての情報が記録されています。 + これらのメーリングリストに入るには、{mailman-lists-url} をたどって参加したいメーリングリストをクリックし、 手順の説明にしたがってください。 ソースツリー全体の変更点を追いかけるには、 {svn-src-all} メーリングリストを購読してください。 . 新しい FreeBSD-STABLE システムをインストールするには、 crossref:mirrors[mirrors,ミラーサイト] から最近の FreeBSD-STABLE リリースをインストールするか、 毎月公開されている FreeBSD-STABLE からビルドされたスナップショットを使ってください。 スナップショットの詳細については、link:https://www.FreeBSD.org/ja/snapshots/[www.freebsd.org/ja/snapshots] をご覧ください。 + 既に FreeBSD が動いているシステムを FreeBSD-STABLE にアップグレードするには、 crossref:mirrors[svn,svn] を使って、 希望する開発ブランチのソースをチェックアウしてください。 `stable/9` といったブランチ名は、 link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng] で説明されています。 . FreeBSD-STABLE をコンパイルしたり FreeBSD-STABLE へとアップグレード する前に、 [.filename]#/usr/src/Makefile# を注意深く読み、 <> に書かれている手順に従ってください。 {freebsd-stable} と [.filename]#/usr/src/UPDATING# を読んで、 次のリリースへ向けて移ってゆくに当たって、 ときどき必要となる既存システムからの新システムの構築手順についての最新情報を得てください。 [[makeworld]] == ソースを用いた FreeBSD のアップデート ソースをコンパイルしてFreeBSD をアップデートする方法は、 バイナリを用いたアップデートに比べ、いくつもの利点があります。 特定のハードウェアをうまく利用するためのオプションを設定してコードを構築できます。 ベースシステムの特定の箇所の設定をデフォルトの設定から変更したり、 必要がない部分を完全に削除して構築することもできます。 システムを構築することによるアップデートは、 バイナリアップデートをインストールするだけのアップデートに比べ時間がかかりますが、 利用環境に合わせた FreeBSD を作成するような完全なカスタマイズが可能です。 [[updating-src-quick-start]] === クィックスタート 以下は FreeBSD をソースから構築してアップデートする典型的な方法についてのクイックリファレンスです。 その後の節では、各プロセスをより詳細に説明します。 [.procedure] ==== . アップデートおよびビルド + [source,bash] .... # svnlite update /usr/src <.> check /usr/src/UPDATING <.> # cd /usr/src <.> # make -j4 buildworld <.> # make -j4 kernel <.> # shutdown -r now <.> # cd /usr/src <.> # make installworld <.> # mergemaster -Ui <.> -# shutdown -r now 1<.> +# shutdown -r now <.> .... <.> +最新版のソースを入手してください。 ソースの入手およびアップデートに関する情報については <> をご覧ください。 <.> ソースの構築の前後で必要となる手動の作業について、 [.filename]#/usr/src/UPDATING# を確認してください。 <.> ソースが置かれているディレクトリに移動してください。 <.> world (カーネルを除くすべて) をコンパイルしてください。 <.> カーネルをコンパイルしてインストールしてください。 ここに書かれているコマンドは、`make buildkernel installkernel` と同じです。 <.> 新しいカーネルを使うため、 システムを再起動してください。 <.> ソースが置かれているディレクトリに移動してください。 <.> world をインストールしてください。 <.> [.filename]#/etc/# に置かれている設定ファイルをアップデートしたりマージしてください。 <.> 新しく構築された world およびカーネルを利用するため、 システムを再起動してください。 ==== [[updating-src-preparing]] === ソースを用いたアップデートのための準備 [.filename]#/usr/src/UPDATING# を読んでください。 このファイルには、 アップデートの前後で必要となる手動の作業について書かれています。 [[updating-src-obtaining-src]] === ソースコードのアップデート FreeBSD のソースコードは [.filename]#/usr/src/# に置かれています。 このソースコードのアップデートには、 Subversion バージョン管理システムを利用する方法が推奨されています。まず、 ソースコードがバージョン管理下にあることを確認してください。 [source,bash] .... # svnlite info /usr/src Path: /usr/src Working Copy Root Path: /usr/src ... .... この結果は、[.filename]#/usr/src/# がバージョン管理下にあり、man:svnlite[1] を使ってアップデートできることを示しています。 [source,bash] .... # svnlite update /usr/src .... このディレクトリをアップデートしていない期間が長いと、 アップデートのプロセスには時間がかかります。 このプロセスが終わると、ソースコードは最新となり、 次節以降で説明する構築のプロセスを実行できます。 .ソースコードの入手 [NOTE] ==== `'/usr/src' is not a working copy` という出力が出た場合には、 ファイルがなかったり、別な方法によりインストールされているので、 新しくソースコードをチェックアウトする必要があります。 [[updating-src-obtaining-src-repopath]] .FreeBSD のバージョンおよびリポジトリパス [cols="1,1,1", options="header"] |=== | uname -r の出力 | リポジトリパス | 説明 |`_X.Y_-RELEASE` |``base/releng/``_X.Y_ |このリリースバージョンに対する重大なセキュルティへの対応およびバグの修正パッチのみが適用されています。 このブランチは、ほとんどのユーザに推奨されます。 |`_X.Y_-STABLE` |``base/stable/``_X_ | リリースバージョンに対し、 そのブランチにおけるすべての開発の成果が反映されたものです。 _STABLE_ は、 Applications Binary Interface (ABI) が変更されないことを意味しており、 このブランチの以前のバージョンでコンパイルされたソフトウェアは、 このバージョンでも実行できることを意味しています。 たとえば、FreeBSD 10.1 で実行するようにコンパイルされたソフトウェアは、 FreeBSD 10-STABLE においても実行できます。 STABLE ブランチは、 時期によってはユーザに影響するようなバグや非互換性を持つことがあります。 これらは通常すぐに修正されます。 |`_X_-CURRENT` |`base/head/` |リリースが行われていない最新の FreeBSD の開発バージョンです。 CURRENT ブランチは大きなバグや非互換があることもあるので、 高度な知識を持ったユーザのみ使用が推奨されます。 |=== man:uname[1] を使って FreeBSD のバージョンを確認してください。 [source,bash] .... # uname -r 10.3-RELEASE .... <> から分かるように、`10.3-RELEASE` のアップデートのためのソースコードのパスは、 `base/releng/10.3` です。 このパスは、ソースコードをチェックアウトする時に使います。 [source,bash] .... # mv /usr/src /usr/src.bak <.> # svnlite checkout https://svn.freebsd.org/base/releng/10.3 /usr/src <.> .... <.> この古いディレクトリを、 邪魔にならないように移動してください。 このディレクトリ以下に対して変更を行ってなければ、 削除しても構わないでしょう。 - <.> リポジトリの URL に <> に記載されているパスを追加します。 3 番目のパラメータには、 ローカルシステム上でソースコードが置かれるディレクトリを指定します。 ==== [[updating-src-building]] === ソースからの構築 まず最初に _world_ (カーネルを除くオペレーティングシステムのすべて) をコンパイルします。 このステップを最初に実行するのは、 カーネルの構築を最新のツールを使って行うようにするためです。 このステップが終わったら、カーネルそのものを構築します。 [source,bash] .... # cd /usr/src # make buildworld # make buildkernel .... コンパイルされたコードは [.filename]#/usr/obj# に書き出されます。 これは基本のステップです。 構築をコントロールする追加のオプションについては、 以下で説明します。 [[updating-src-building-clean-build]] ==== クリーンビルドの実行 FreeBSD ビルドシステムのいくつかのバージョンは、 オブジェクトが一時的に置かれるディレクトリ [.filename]#/usr/obj# に前回のコンパイルされたコードを残します。 これにより、変更されていないコードを再コンパイルせずにすむので、 その後の構築時間を短縮できます。 すべてを再構築するには、構築を開始する前に、 `cleanworld` を実行してください。 [source,bash] .... # make cleanworld .... [[updating-src-building-jobs]] ==== ジョブの数の設定 マルチコアプロセッサを搭載するシステムでは、 構築のためのジョブの数を増やすことで、 構築にかかる時間を短縮できます。 `sysctl hw.ncpu` を使って、 コアの数を確認してください。 ジョブの数がどのように構築の速さに影響するかを確実に知るには、 プロセッサにより異なりますし、FreeBSD のバージョンにより使用されるビルドシステムも変わるため、 実際に試してみるしか方法はありません。 試してみる最初のジョブの数の候補としては、 コアの数の半分から倍の数の間で検討してみてください。 ジョブの数は、`-j` を使って指定します。 [[updating-src-building-jobs-example]] .構築のジョブの数を増やす [example] ==== 以下は 4 つのジョブで world とカーネルを構築する例です。 [source,bash] .... # make -j4 buildworld buildkernel .... ==== [[updating-src-building-only-kernel]] ==== カーネルのみを構築する ソースコードが変更された場合には、 `buildworld` を完了しなければいけません。 その後、いつでも `buildkernel` でカーネルを構築できます。 カーネルだけを構築するには、以下のように実行してください。 [source,bash] .... # cd /usr/src # make buildkernel .... [[updating-src-building-custom-kernel]] ==== カスタムカーネルの構築 FreeBSD 標準のカーネルは、 [.filename]#GENERIC# と呼ばれる _カーネルコンフィグレーションファイル_ に基づいています。 [.filename]#GENERIC# カーネルには、 最も良く使われるデバイスドライバやオプションが含まれています。 しかしながら、 特定の目的に合わせてデバイスドライバやオプションを削除したり追加するためには、 カスタムカーネルを構築することが有用であったり、 必要となることがあります。 たとえば、極端に RAM が制限されているような小さな組み込みのコンピュータを開発しているユーザであれば、 必要のないデバイスドライバやオプションを削除することで、 カーネルを少しでも小さくできるでしょう。 カーネルのコンフィグレーションファイルは、 [.filename]#/usr/src/sys/arch/conf/# に置かれています。ここで、 _arch_ は `uname -m` の出力です。 ほとんどのコンピュータは `amd64` であり、 コンフィグレーションファイルが置かれているディレクトリは [.filename]#/usr/src/sys/amd64/conf/# です。 [TIP] ==== - [.filename]#/usr/src# は、 削除されたり作り直されたりする可能性があるため、 カスタムカーネルのコンフィグレーションファイルは、 [.filename]#/root# のような別のディレクトリで管理することが好ましいです。 カーネルコンフィグレーションファイルは、 [.filename]#conf# ディレクトリにリンクします。 このディレクトリが削除されたり、上書きされた場合には、 カーネルコンフィグレーションファイルを新しいディレクトリにもう一度リンクしてください。 ==== カスタムコンフィグレーションファイルは、 [.filename]#GENERIC# コンフィグレーションファイルをコピーして作成できます。 たとえば、 ストレージサーバ用の [.filename]#STORAGESERVER# という名前の新しいカスタムカーネルは、 以下のようにして作成できます。 [source,bash] .... # cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER # cd /usr/src/sys/amd64/conf # ln -s /root/STORAGESERVER . .... その後 [.filename]#/root/STORAGESERVER# を編集し、 man:config[5] で示されるデバイスやオプションを追加したり削除してください。 コマンドラインからカーネルコンフィグレーションファイルを `KERNCONF` に指定することで、 カスタムカーネルを構築できます。 [source,bash] .... # make buildkernel KERNCONF=STORAGESERVER .... [[updating-src-installing]] === コンパイルされたコードのインストール `buildworld` および `buildkernel` が完了したら、 新しいカーネルと world をインストールしてください。 [source,bash] .... # cd /usr/src # make installkernel # shutdown -r now # cd /usr/src # make installworld # shutdown -r now .... カスタムカーネルを構築した場合は、 新しいカスタムカーネルを `KERNCONF` に設定して実行してください。 [source,bash] .... # cd /usr/src # make installkernel KERNCONF=STORAGESERVER # shutdown -r now # cd /usr/src # make installworld # shutdown -r now .... [[updating-src-completing]] === アップデートの完了 アップデートの完了までに、いくつかの最終作業が残されています。 デフォルトから変更した設定ファイルを新しいバージョンのファイルにマージし、 古くなったライブラリを見つけて削除した後に、 システムを再起動します。 [[updating-src-completing-merge-mergemaster]] ==== man:mergemaster[8] を用いた設定ファイルのマージ man:mergemaster[8] を用いることで、 システムの設定ファイルに行われている変更を、 簡単にこれらのファイルの新しいバージョンにマージできます。 `-Ui` オプションを使って man:mergemaster[8] を実行すると、 ユーザが手を加えていないファイルのアップデートおよび新しく追加されたファイルのインストールを自動的に行います。 [source,bash] .... # mergemaster -Ui .... ファイルのマージを手動で行う必要がある時は、 ファイルの中で残す箇所の選択を対話的におこなうようなインタフェースが表示さます。 詳細については、man:mergemaster[8] をご覧ください。 [[updating-src-completing-check-old]] ==== 使われなくなったファイルやライブラリの確認 アップデート後に、 使われなくなったファイルやディレクトリが残ることがあります。 これらのファイルは、 [source,bash] .... # make check-old .... で確認でき、以下のようにして削除できます。 [source,bash] .... # make delete-old .... 同様に使われなくなったライブラリが残ることもあります。 これらのライブラリは、 [source,bash] .... # make check-old-libs .... で確認でき、以下のようにして削除できます。 [source,bash] .... # make delete-old-libs .... これらの古いライブラリを利用しているプログラムは、 ライブラリが削除されると動かなくなります。 これらのプログラムは、古いライブラリを削除した後に、 再構築もしくは置き換える必要があります。 [TIP] ==== 古いファイルとディレクトリのすべてを削除しても問題ないことを確認したら、 コマンドに `BATCH_DELETE_OLD_FILES` を設定することで、各ファイルを削除する際に kbd:[y] および kbd:[Enter] を押さなくても済むようにできます。以下はその例です。 [source,bash] .... # make BATCH_DELETE_OLD_FILES=yes delete-old-libs .... ==== [[updating-src-completing-restart]] ==== アップデート後の再起動 コンピュータを再起動して、すべての変更を反映させることが、 アップデートの最後におこなう作業です。 [source,bash] .... # shutdown -r now .... [[small-lan]] == 複数のマシンで追いかける 複数のコンピュータで同じソースツリーを追いかけていて、 全部のマシンにソースをダウンロードして全部を再構築するのは、 ディスクスペース、ネットワーク帯域、 そして CPU サイクルの無駄使いです。 解決策は 1 つのマシンに仕事のほとんどをさせ、 残りのマシンは NFS 経由でそれをマウントする、というものです。 このセクションではそのやり方を概観します。 NFS の使い方の詳細については、crossref:advanced-networking[network-nfs,「NFS」] をご覧下さい。 まず初めに、同じバイナリで動かそうとするマシンたちを決めます。 このマシンたちのことを__ビルドセット__と呼びます。 それぞれのマシンはカスタムカーネルを持っているかもしれませんが、 同じユーザランドバイナリを動かそうというのです。 このビルドセットから、 __ビルドマシン__となるマシンを 1 台選びます。 ベースシステムとカーネルを構築するのはこのマシンになります。 理想的には、このマシンは `make buildworld` と `make buildkernel` を実行するのに十分な CPU を持った速いマシンであるべきです。 _テストマシン_ となるべきマシンも選んでください。 更新されたソフトウェアを使う前にそのマシンでテストするのです。 テストマシンはかなり長い時間落ちていても だいじょうぶなマシン__であったほうがいいでしょう__。 ビルドマシンでもかまいませんが、 ビルドマシンである必要はありません。 このビルドセットのマシンはすべて [.filename]#/usr/obj# と [.filename]#/usr/src# をビルドマシンから FTP 経由でマウントする必要があります。 ビルドセット自体が複数ある場合は、 [.filename]#/usr/src# はひとつのビルドマシン上にあるべきです。 他のマシンからはそれを NFS マウントするようにしましょう。 ビルドセットのすべてのマシン上の [.filename]#/etc/make.conf# と [.filename]#/etc/src.conf# がビルドマシンと一致していることを確認してください。つまり、 ビルドマシンはビルドセットのどのマシンもインストールしようとしている ベースシステムを全部ビルドしなければならないということです。 また、各ビルドマシンは [.filename]#/etc/make.conf# にそれぞれのビルドマシンのカーネル名を `KERNCONF` で指定し、 ビルドマシンは自分自身のカーネルから順に全部のカーネル名を `KERNCONF` にリストアップしてください。 ビルドマシンは各マシンのカーネル設定ファイルを [.filename]#/usr/src/sys/arch/conf# に持っていなければなりません。 ビルドマシンにて、 <> に書いてあるようにカーネルとベースシステムを構築してください。 でも、まだビルドマシンにはインストールしないでください。 そのかわり、 ビルドしたカーネルをテストマシンにインストールしてください。 FTP 経由で [.filename]#/usr/src# および [.filename]#/usr/obj# をテストマシンにマウントしてください。 その後、`shutdown now` を実行してシングルユーザモードに移行し、 新しいカーネルとベースシステムをインストールし、 いつもするように `mergemaster` を実行してください。 終わったら、再起動して通常のマルチユーザ動作に戻します。 テストマシンにあるものすべてがちゃんと動いている確信が得られたら、 同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします。 ports ツリーにも同じ方法が使えます。 最初のステップは、 ビルドセットのすべてのマシンが NFS 経由で [.filename]#/usr/ports# をマウントすることです。 そして、distfiles を共有するように [.filename]#/etc/make.conf# を設定します。 NFS マウントによってマップされる `root` ユーザが何であれ、`DISTDIR` はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります。 ports をローカルでビルドする場合には、 各マシンは `WRKDIRPREFIX` を自分のマシンのビルドディレクトリに設定しなければなりません。 また、ビルドシステムが packages をビルドしてビルドセットのコンピュータに配布するのであれば、 `DISTDIR` と同じようにビルドシステム上の `PACKAGES` ディレクトリも設定してください。 diff --git a/documentation/content/ja/books/handbook/l10n/_index.adoc b/documentation/content/ja/books/handbook/l10n/_index.adoc index 090941d805..b468ed258e 100644 --- a/documentation/content/ja/books/handbook/l10n/_index.adoc +++ b/documentation/content/ja/books/handbook/l10n/_index.adoc @@ -1,587 +1,585 @@ --- title: 第16章 地域化 (localization) - i18n/L10n の利用と設定 part: パートIII. システム管理 prev: books/handbook/disks next: books/handbook/cutting-edge --- [[l10n]] = 地域化 (localization) - i18n/L10n の利用と設定 :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :skip-front-matter: :toc-title: 目次 :table-caption: 表 :figure-caption: 図 :example-caption: 例 :xrefstyle: basic :relfileprefix: ../ :outfilesuffix: :sectnumoffset: 16 ifeval::["{backend}" == "html5"] :imagesdir: ../../../images/books/handbook/l10n/ endif::[] ifeval::["{backend}" == "pdf"] :imagesdir: ../../../../static/images/books/handbook/l10n/ endif::[] ifeval::["{backend}" == "epub3"] :imagesdir: ../../../../static/images/books/handbook/l10n/ endif::[] include::shared/authors.adoc[] include::shared/releases.adoc[] include::shared/ja/mailing-lists.adoc[] include::shared/ja/teams.adoc[] include::shared/ja/urls.adoc[] toc::[] [[l10n-synopsis]] == この章では FreeBSD は、 ユーザーおよび貢献者が世界中に分散したプロジェクトです。 そのため、FreeBSD は多くの言語への地域化に対応しており、 ユーザは、英語以外の言語を見たり、入力したり、処理したりできます。 中国語、ドイツ語、日本語、韓国語、フランス語、ロシア語、 ベトナム語など、主要な言語のほとんどから選ぶことができますが、 これらに限定されるわけではありません。 internationalization は、i18n と短縮して表記されます。 これは `internationalization` の最初と最後の間の文字数に由来します。 L10n も同じ命名法を用いて `localization` を縮めたものです。 i18n/L10n された (すなわち国際化/地域化された) 手法、プロトコル、アプリケーションは、 自分達の好みの言語を使うことを可能にしてくれます。 この章では、FreeBSD の国際化 (internationalization) と地域化 (localization) 機能について解説します。 この章では、以下の分野について説明します。 * ロケール名がどのように定義されるか。 * ログインシェルでロケールを設定するにはどうするか。 * コンソールを英語以外の言語用に設定するにはどうするか。 * 様々な言語で Xorg を設定するにはどうすればよいか。 * 国際化 (i18n) されたアプリケーションの見つけ方。 * 特定の言語に設定するための情報はどこにあるか。 この章を読む前に、以下のことを理解しておく必要があります。 * crossref:ports[ports,サードパーティ製アプリケーションのインストール方法] [[using-localization]] == 地域化の利用 地域化の設定は、言語コード、 国コード、エンコーディングという三つの要素を基本とします。 ロケール名はこれらから以下のように構成されます。 [.programlisting] .... 言語コード_国コード.エンコーディング .... -__言語コード__ および __国コード__ は、 国と言語を特定するために用いられます。 <> では、 __言語コード_国コード__ の例を示します +_言語コード_ および _国コード_ は、 国と言語を特定するために用いられます。 <> では、 _言語コード___国コード_ の例を示します [[locale-lang-country]] .言語および国コード [cols="1,1", frame="none", options="header"] |=== | 言語_国コード | 説明 |en_US |英語、合衆国 |ru_RU |ロシア語、ロシア |zh_TW |繁体字中国語、台湾 |=== 利用可能なすべてのロケールを調べるには、 以下のように実行してください。 [source,bash] .... % locale -a | more .... 現在のロケールの設定を調べるには、 以下のコマンドを実行してください。 [source,bash] .... % locale .... 言語固有の、C 言語の char で表現できる ISO8859-1, ISO8859-15, KOI8-R, CP437 といったシングルバイトの文字セットについては、 man:multibyte[3] を参照してください。 現在有効な文字セットのリストは、link:http://www.iana.org/assignments/character-sets[IANA Registry] で確認できます。 いくつかの言語 (例えば中国語や日本語) は、 ASCII 文字では表すことができないので、 ワイド文字や多バイト文字を用いた拡張された言語のエンコードが必要となります。 ワイド/多バイトのエンコーディングの例は、EUC および Big5 です。 古いアプリケーションの中には、 これらのエンコードを誤ってコントロール文字として認識するものがありますが、 最近のアプリケーションは、大抵これらの文字を認識します。 実装方法にも依りますが、アプリケーションのコンパイル時もしくは configure 時に、ワイド/多バイト文字のサポートを指定する必要があるかも知れません。 [NOTE] ==== FreeBSD では、Xorg 互換のロケール符号を用いています。 ==== 以下では、FreeBSD システムにおいてロケールを設定する方法について説明します。 次の節では、i18n に対応するアプリケーションの見つけ方およびコンパイル方法について説明します。 [[setting-locale]] === ログインシェルでロケールを設定する ロケールの設定は、ユーザの [.filename]#~/.login_conf#、 またはユーザのシェルの初期設定ファイルである [.filename]#~/.profile#, [.filename]#~/.bashrc# または [.filename]#~/.cshrc# で行います。 以下の二つの環境変数を設定する必要があります。 * `LANG`: ロケールを設定します。 -* -+ -`MM_CHARSET`: アプリケーションで使用される MIME 文字セットを指定します。 +* `MM_CHARSET`: アプリケーションで使用される MIME 文字セットを指定します。 これらの変数は、ユーザのシェルの設定ファイルに加え、 アプリケーション固有の設定ファイル、 および Xorg の設定ファイルにおいても指定される必要があります。 必要な変数を割り当てるには、二つの方法があります。 <> において割り当てる方法 (推奨される方法です)、および <> で指定する方法です。 次の 2 つの節では、この両方の方法について説明します。 [[login-class]] ==== ログインクラスを用いる方法 最初に説明する方法は、 すべてのシェルにおいて必要なロケール名と MIME 文字セットを環境変数に割り当てます。 これは推奨される方法です。 この割り当て方法としては、各ユーザが行う方法と、 スーパーユーザがすべてのユーザに対して設定する 2 つの方法があります。 以下の簡単な例では、 各ユーザのホームディレクトリの [.filename]#.login_conf# で、両方の変数に Latin-1 エンコーディングを設定します。 [.programlisting] .... me:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1: .... これは、BIG-5 エンコーディングされた繁体字中国語用の環境変数を設定するユーザの [.filename]#~/.login_conf# の一例です。 中国語、日本語、 韓国語用のロケール変数を正しく認識しないソフトウェアに対応するため、 より多くの変数に対する設定が行われています。 [.programlisting] .... #Users who do not wish to use monetary units or time formats #of Taiwan can manually change each variable me:\ :lang=zh_TW.Big5:\ :setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=zh_TW.Big5:\ :charset=big5:\ :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server .... もう一つの方法では、 スーパーユーザがシステム上のすべてのユーザに対する地域化を設定します。 [.filename]#/etc/login.conf# の以下の変数により、ロケールおよび MIME 文字セットを設定します。 [.programlisting] .... language_name|Account Type Description:\ :charset=MIME_charset:\ :lang=locale_name:\ :tc=default: .... よって、先ほどの例における Latin-1 に対する設定は、 以下のようになります。 [.programlisting] .... german|German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:\ :tc=default: .... 詳細に関しては man:login.conf[5] を参照してください。 なお、_russian_ クラスはあらかじめ定義されています。 [.filename]#/etc/login.conf# を編集したら、 忘れずに以下のコマンドを実行してケイパビリティデータベースをアップデートしてください。 [source,bash] .... # cap_mkdb /etc/login.conf .... [NOTE] ==== エンドユーザは、変更を反映させるために、各自の [.filename]#~/.login_conf# に対して `cap_mkdb` コマンドを実行する必要があります。 ==== ===== ログインクラスを変更するユーティリティ [.filename]#/etc/login.conf# を手動により編集する方法に加え、 新たに作成するユーザのロケールを設定するためのユーティリティがあります。 `vipw` を使って新しいユーザを追加する際には、使用する言語を _language_ に指定してください。 [.programlisting] .... user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh .... `adduser` を使って新しいユーザを追加する場合に、 すべてのユーザに対するデフォルトの言語は事前に設定でき、 個々のユーザに対する言語を指定できます。 新しく追加するすべてのユーザが同じ言語を使う場合には、 [.filename]#/etc/adduser.conf# で `defaultclass=_language_` と設定してください。 新しいユーザを作成するときに、この設定を変更するには、 以下のプロンプトにおいて希望するロケールを指定してください。 [source,bash] .... -Enter login class: default []: +Enter login class: default []: .... もしくは、`adduser` を実行する際にロケールを指定してください。 [source,bash] .... # adduser -class language .... `pw` を使って新しいユーザを追加する場合には、 以下のようにしてロケールを指定してください。 [source,bash] .... # pw useradd user_name -L language .... すでに存在するユーザのログインクラスを変更するには、 `chpass` を使用してください。 引数として変更するユーザ名を与えて、 スーパーユーザの権限で実行してください。 [source,bash] .... # chpass user_name .... [[startup-file]] ==== シェルの初期化ファイルによる方法 -この 2 番目の方法は、 使用するシェルごとに手動での設定が必要なため、推奨されません。 シェル毎に設定ファイルが存在し、その構文はシェルに依存します。 たとえば、`sh` シェルに対するドイツ語の設定では、 そのユーザのシェルを設定するためだけに、 [.filename]#~/.profile# に以下の行を追加ます。 これらの行を [.filename]#/etc/profile# または、 [.filename]#/usr/shared/skel/dot.profile# に追加すると、 すべてのユーザのシェルを設定することが可能です。 +この 2 番目の方法は、 使用するシェルごとに手動での設定が必要なため、推奨されません。 シェル毎に設定ファイルが存在し、その構文はシェルに依存します。 たとえば、`sh` シェルに対するドイツ語の設定では、 そのユーザのシェルを設定するためだけに、 [.filename]#~/.profile# に以下の行を追加ます。 これらの行を [.filename]#/etc/profile# または、 [.filename]#/usr/share/skel/dot.profile# に追加すると、 すべてのユーザのシェルを設定することが可能です。 [.programlisting] .... LANG=de_DE.ISO8859-1; export LANG MM_CHARSET=ISO-8859-1; export MM_CHARSET .... -しかしながら、`csh` シェルでは、 設定ファイルの名前や構文は異なります。 [.filename]#~/.csh.login#, [.filename]#/etc/csh.login# または [.filename]#/usr/shared/skel/dot.login# では同じ設定です。 +しかしながら、`csh` シェルでは、 設定ファイルの名前や構文は異なります。 [.filename]#~/.csh.login#, [.filename]#/etc/csh.login# または [.filename]#/usr/share/skel/dot.login# では同じ設定です。 [.programlisting] .... setenv LANG de_DE.ISO8859-1 setenv MM_CHARSET ISO-8859-1 .... さらに面倒なことに、 Xorg を設定するための [.filename]#~/.xinitrc# における構文は、 使用しているシェルに依存します。 以下の例において、最初は `sh` シェルに対するもので、2 番目が `csh` シェルに対するものです。 [.programlisting] .... LANG=de_DE.ISO8859-1; export LANG .... [.programlisting] .... setenv LANG de_DE.ISO8859-1 .... [[setting-console]] === コンソールの設定 -コンソールで利用可能な地域化されたフォントがあります。 利用できるフォントの一覧を調べるには、 `ls /usr/shared/syscons/fonts` と入力してください。 コンソールのフォントを設定するには、 [.filename]#.fnt# という拡張子を除いた _フォント名_ を、 [.filename]#/etc/rc.conf# に設定してください。 +コンソールで利用可能な地域化されたフォントがあります。 利用できるフォントの一覧を調べるには、 `ls /usr/share/syscons/fonts` と入力してください。 コンソールのフォントを設定するには、 [.filename]#.fnt# という拡張子を除いた _フォント名_ を、 [.filename]#/etc/rc.conf# に設定してください。 [.programlisting] .... font8x16=フォント名 font8x14=フォント名 font8x8=フォント名 .... 以下を [.filename]#/etc/rc.conf# に追加することで、 キーマップおよびスクリーンマップを指定できます。 [.programlisting] .... scrnmap=スクリーンマップ名 keymap=キーマップ名 keychange="ファンクションキー番号の並び" .... -利用可能なスクリーンマップの一覧を調べるには、 `ls /usr/shared/syscons/scrnmaps` と入力してください。 [.filename]#/etc/rc.conf# で _スクリーンマップ名_ を指定する時は、 [.filename]#.csm# という拡張子を除いてください。 スクリーンフォントが bit 8 列を使っている時に文字を疑似グラフィクス領域から外に移動するように、 VGA アダプタがフォント文字マトリクスで bit 8 を bit 9 に拡張することに対処するため、 フォントに適切にマップされたスクリーンマップが必要となります。 +利用可能なスクリーンマップの一覧を調べるには、 `ls /usr/share/syscons/scrnmaps` と入力してください。 [.filename]#/etc/rc.conf# で _スクリーンマップ名_ を指定する時は、 [.filename]#.csm# という拡張子を除いてください。 スクリーンフォントが bit 8 列を使っている時に文字を疑似グラフィクス領域から外に移動するように、 VGA アダプタがフォント文字マトリクスで bit 8 を bit 9 に拡張することに対処するため、 フォントに適切にマップされたスクリーンマップが必要となります。 -利用可能なキーマップの一覧を調べるには、 `ls /usr/shared/syscons/keymaps` と入力してください。 [.filename]#/etc/rc.conf# で _キーマップ名_ を指定する時には、 [.filename]#.kbd# という拡張子を除いてください。 再起動せずにキーマップを試すには、 man:kbdmap[1] を使ってください。 +利用可能なキーマップの一覧を調べるには、 `ls /usr/share/syscons/keymaps` と入力してください。 [.filename]#/etc/rc.conf# で _キーマップ名_ を指定する時には、 [.filename]#.kbd# という拡張子を除いてください。 再起動せずにキーマップを試すには、 man:kbdmap[1] を使ってください。 ファンクションキーの並びはキーマップで定義されていないので、 端末タイプに合わせたファンクションキーを設定するために `keychange` のエントリが必要となります。 次に [.filename]#/etc/ttys# の中のすべての仮想端末のエントリに対して、 正しいコンソール端末タイプを設定してください。<> は、 利用可能な端末タイプの一覧です。 [[locale-charset]] .文字セットに対する定義済みの端末タイプ [cols="1,1", frame="none", options="header"] |=== | 文字セット | 端末タイプ |ISO8859-1 もしくは ISO8859-15 |`cons25l1` |ISO8859-2 |`cons25l2` |ISO8859-7 |`cons25l7` |KOI8-R |`cons25r` |KOI8-U |`cons25u` |CP437 (VGA のデフォルト) |`cons25` |US-ASCII |`cons25w` |=== ワイド/多バイト文字の言語については、 その言語に対するコンソールを FreeBSD Ports Collection からインストールしてください。 利用可能な ports は、<> にまとめてあります。 インストール後、各 port の [.filename]#pkg-message# または、マニュアルページを参照して、 設定や使用方法を調べてください。 [[locale-console]] .Ports Collection で利用可能なコンソール [cols="1,1", frame="none", options="header"] |=== | 言語 | port の位置 |繁体字中国語 (BIG-5) |package:chinese/big5con[] |中国語/日本語/韓国語 |package:chinese/cce[] |中国語/日本語/韓国語 |package:chinese/zhcon[] |日本語 |package:chinese/kon2[] |日本語 |package:japanese/kon2-14dot[] |日本語 |package:japanese/kon2-16dot[] |=== [.filename]#/etc/rc.conf# において moused を有効にしている場合には、 追加の設定が必要となるでしょう。 デフォルトでは、man:syscons[4] ドライバのマウスカーソルはキャラクタセット中の `0xd0`-`0xd3` の範囲を占めています。そのため、 利用している言語がこの範囲のキャラクタセットを使っている場合、 次の行を [.filename]#/etc/rc.conf# に追加して カーソルの占める範囲を移動してください。 [.programlisting] .... mousechar_start=3 .... === Xorg の設定 Xorg のインストールおよび設定方法は、 crossref:x11[x11,X Window System] で説明されています。 Xorg を地域化するための追加のフォントおよび入力方法は、 FreeBSD Ports Collection から利用できます。 フォント、メニューなどのアプリケーション固有の国際化 (i18n) の設定は、 [.filename]#~/.Xresources# において指定でき、 グラフィカルアプリケーションのメニューが選んだ言語で表示されます。 X Input Method (XIM) プロトコルは、Xorg で非英字文字を入力するための標準規格です。 FreeBSD Ports Collection から利用可能なインプットメソッドについては、 <> にまとめられています。 追加の Fcitx および Uim アプリケーションも利用できます。 [[locale-xim]] .利用可能なインプットメソッド [cols="1,1", frame="none", options="header"] |=== | 言語 | インプットメソッド |中国語 |package:chinese/gcin[] |中国語 |package:chinese/ibus-chewing[] |中国語 |package:chinese/ibus-pinyin[] |中国語 |package:chinese/oxim[] |中国語 |package:chinese/scim-fcitx[] |中国語 |package:chinese/scim-pinyin[] |中国語 |package:chinese/scim-tables[] |日本語 |package:japanese/ibus-anthy[] |日本語 |package:japanese/ibus-mozc[] |日本語 |package:japanese/ibus-skk[] |日本語 |package:japanese/im-ja[] |日本語 |package:japanese/kinput2[] |日本語 |package:japanese/scim-anthy[] |日本語 |package:japanese/scim-canna[] |日本語 |package:japanese/scim-honoka[] |日本語 |package:japanese/scim-honoka-plugin-romkan[] |日本語 |package:japanese/scim-honoka-plugin-wnn[] |日本語 |package:japanese/scim-prime[] |日本語 |package:japanese/scim-skk[] |日本語 |package:japanese/scim-tables[] |日本語 |package:japanese/scim-tomoe[] |日本語 |package:japanese/scim-uim[] |日本語 |package:japanese/skkinput[] |日本語 |package:japanese/skkinput3[] |日本語 |package:japanese/uim-anthy[] |韓国語 |package:korean/ibus-hangul[] |韓国語 |package:korean/imhangul[] |韓国語 |package:korean/nabi[] |韓国語 |package:korean/scim-hangul[] |韓国語 |package:korean/scim-tables[] |ベトナム語 |package:vietnamese/xvnkb[] |ベトナム語 |package:vietnamese/x-unikey[] |=== [[l10n-compiling]] == 国際化 (i18n) に対応したアプリケーションを見つける 国際化 (i18n) されたアプリケーションは、ライブラリとして i18n 化キットを用いてプログラミングされます。 これは開発者が単純なファイルを書いて、 表示されるメニューやテキストを各国語に翻訳できるようにしてくれます。 link:https://www.FreeBSD.org/ja/ports/[FreeBSD Ports Collection ] の多くのアプリケーションは、 いくつかの言語向けのワイド/多バイト文字への対応を組み込んでいます。 そのようなアプリケーションの名前には、 容易に認識できるように、`-i18n` と付いています。しかしながら、 それらのアプリケーションが必要とする言語に対応しているとは限りません。 いくつかのアプリケーションでは、 特定の文字セットを使うようにコンパイルできます。 これは大抵 [.filename]#Makefile# の中で 対処されているか、configure に値を渡すことで対応しています。 必要な configure の値や port の構築時に使用するコンパイルオプションを決めるための port の [.filename]#Makefile# に関するより詳細な情報については、 各 FreeBSD port のソースにある i18n 文書を参照してください。 [[lang-setup]] == 特定の言語にロケールを設定する この節では、FreeBSD システムをロシア語へ地域化するための設定例を示します。 後半では、他の言語への地域化に関する情報を提供します。 [[ru-localize]] === ロシア語 (KOI8-R エンコーディング) この節では、FreeBSD システムをロシア語へ地域化するための設定例を示します。 各設定に関するより詳しい説明については、 <> を参照してください。 このロケールをログインシェルに設定するには、 以下の行を各ユーザの [.filename]#~/.login_conf# に追加してください。 [.programlisting] .... me:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R: .... コンソールを設定するには、 [.filename]#/etc/rc.conf# に以下の行を追加してください。 [.programlisting] .... keymap="ru.utf-8" scrnmap="utf-82cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8" mousechar_start=3 .... [.filename]#/etc/ttys# の各 `ttyv` エントリにおいて、 端末タイプとして `cons25r` を指定してください。 プリンタの設定を行うには、 ロシア語用の文字を搭載したほとんどのプリンタはハードウェアコードページ CP866 を使っているため、KOI8-R を CP866 に変換する専用の出力フィルタが必要となります。 この目的のため、FreeBSD はデフォルトフィルタを [.filename]#/usr/libexec/lpr/ru/koi2alt# にインストールします。 このフィルタを使うには、[.filename]#/etc/printcap# に以下のエントリを追加してください。 [.programlisting] .... lp|Russian local line printer:\ :sh:of=/usr/libexec/lpr/ru/koi2alt:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: .... より詳細な説明については man:printcap[5] を参照してください。 マウントされた MS-DOS(R) ファイルシステムにおいてロシア語ファイル名を使えるように設定するには、 [.filename]#/etc/fstab# にエントリを追加するときに、 以下のように `-L` とロケール名を含めてください。 [.programlisting] .... /dev/ad0s2 /dos/c msdos rw,-Lru_RU.KOI8-R 0 0 .... 詳しくは、man:mount_msdosfs[8] を参照してください。 -Xorg にロシア語のフォントを設定するには、 package:x11-fonts/xorg-fonts-cyrillic[] パッケージをインストールしてください。 その後、[.filename]#/etc/X11/xorg.conf# の `"Files"` セクションを確認してください。 既存の `FontPath` エントリの__前に__以下の行を追加しなければなりません。 +Xorg にロシア語のフォントを設定するには、 package:x11-fonts/xorg-fonts-cyrillic[] パッケージをインストールしてください。 その後、[.filename]#/etc/X11/xorg.conf# の `"Files"` セクションを確認してください。 既存の `FontPath` エントリの_前に_以下の行を追加しなければなりません。 [.programlisting] .... FontPath "/usr/local/lib/X11/fonts/cyrillic" .... 他の Cyrillic フォントは、 Ports Collection から利用できます。 ロシア語のキーボードを使えるようにするには、 以下の行を [.filename]#xorg.conf# の `"Keyboard"` セクションに追加します。 [.programlisting] .... Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:toggle" .... このファイルの中で `XkbDisable` がコメントアウトされていることを確認してください。 `grp:toggle` では kbd:[Right Alt] を使い、 `grp:ctrl_shift_toggle` では kbd:[Ctrl+Shift] を使います。 `grp:caps_toggle` では、 kbd:[CapsLock] を使います。 従来の kbd:[CapsLock] の機能は、 ラテン文字モードの時のみ kbd:[Shift+CapsLock] で使うことができます。 Xorg では、理由は不明ですが `grp:caps_toggle` は動作しません。 キーボードに "Windows(R)" キーがあり、 そのキーにいくつかの非英字キーが割り当てられているようなら、 [.filename]#xorg.conf# に以下の行を追加してください。 [.programlisting] .... Option "XkbVariant" ",winkeys" .... [NOTE] ==== ロシア語の XKB キーボードは、 地域化されていないアプリケーションではうまく動かないかも知れません。 地域化されたアプリケーションは少なくともプログラムの最初の方で `XtSetLanguageProc (NULL, NULL, NULL);` を呼び出すべきです。 ==== Xorg アプリケーションを地域化する方法については、link:http://koi8.pp.ru/xwin.html[http://koi8.pp.ru/xwin.html] を参照してください。 KOI8-R エンコーディングの詳細については、link:http://koi8.pp.ru/[http://koi8.pp.ru/] を参照してください。 === 言語固有のリソース この節では、 他言語へのロケールの設定に関するリソースの一覧を示します。 台湾向けの繁体字中国語への地域化:: -FreeBSD-Taiwan プロジェクトは、 FreeBSD を中国語化するための手引き http://netlab.cse.yzu.edu.tw/\~statue/freebsd/zh-tut/[http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/] を提供しています。 +FreeBSD-Taiwan プロジェクトは、 FreeBSD を中国語化するための手引き link:http://netlab.cse.yzu.edu.tw/\~statue/freebsd/zh-tut/[http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/] を提供しています。 ギリシャ語への地域化:: -FreeBSD におけるギリシャ語のサポートについての記事は、 公式の FreeBSD ギリシャ語ドキュメンテーションの一部として https://www.FreeBSD.org/doc/el/articles/greek-language-support/[ここ] で読むことができます。 この文書は、ギリシャ語で書かれています。 +FreeBSD におけるギリシャ語のサポートについての記事は、 公式の FreeBSD ギリシャ語ドキュメンテーションの一部として link:https://docs.FreeBSD.org/el/articles/greek-language-support/[ここ] で読むことができます。 この文書は、ギリシャ語で書かれています。 日本語/韓国語への地域化:: -日本語に関しては http://www.jp.FreeBSD.org/[http://www.jp.FreeBSD.org/] を、韓国語に関しては http://www.kr.FreeBSD.org/[http://www.kr.FreeBSD.org/] を参照してください。 +日本語に関しては link:http://www.jp.FreeBSD.org/[http://www.jp.FreeBSD.org/] を、韓国語に関しては link:http://www.kr.FreeBSD.org/[http://www.kr.FreeBSD.org/] を参照してください。 英語以外の FreeBSD ドキュメント:: -FreeBSD の文書の一部を他の言語に翻訳してくれている貢献者たちがいます。 これらは link:https://www.FreeBSD.org/ja/[FreeBSD ウェブサイト] のリンクを辿るか [.filename]#/usr/shared/doc# から入手できます。 +FreeBSD の文書の一部を他の言語に翻訳してくれている貢献者たちがいます。 これらは link:https://www.FreeBSD.org/ja/[FreeBSD ウェブサイト] のリンクを辿るか [.filename]#/usr/share/doc# から入手できます。 diff --git a/documentation/content/ja/books/handbook/multimedia/_index.adoc b/documentation/content/ja/books/handbook/multimedia/_index.adoc index 895d171bda..497311eea8 100644 --- a/documentation/content/ja/books/handbook/multimedia/_index.adoc +++ b/documentation/content/ja/books/handbook/multimedia/_index.adoc @@ -1,1050 +1,1075 @@ --- title: 第7章 マルチメディア part: パートII. 日々の生活 prev: books/handbook/desktop next: books/handbook/kernelconfig --- [[multimedia]] = マルチメディア :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :skip-front-matter: :toc-title: 目次 :table-caption: 表 :figure-caption: 図 :example-caption: 例 :xrefstyle: basic :relfileprefix: ../ :outfilesuffix: :sectnumoffset: 7 ifeval::["{backend}" == "html5"] :imagesdir: ../../../images/books/handbook/multimedia/ endif::[] ifeval::["{backend}" == "pdf"] :imagesdir: ../../../../static/images/books/handbook/multimedia/ endif::[] ifeval::["{backend}" == "epub3"] :imagesdir: ../../../../static/images/books/handbook/multimedia/ endif::[] include::shared/authors.adoc[] include::shared/releases.adoc[] include::shared/ja/mailing-lists.adoc[] include::shared/ja/teams.adoc[] include::shared/ja/urls.adoc[] toc::[] [[multimedia-synopsis]] == この章では FreeBSD は数多くの種類のサウンドカードに対応しており、 FreeBSD システムで原音に忠実な出力を楽しむことができます。 これには録音機能と、MPEG Audio Layer 3 (MP3) や Waveform Audio File (WAV), Ogg Vorbis などをはじめとした多くの形式の音楽の再生機能が含まれます。 加えて FreeBSD の Ports Collection には、 録音した音楽を編集したり、音響効果を加えたり、接続された MIDI 機器を制御するためのアプリケーションが用意されています。 FreeBSD ではビデオファイルおよび DVD の再生もできます。 FreeBSD の Ports Collection には、さまざまなビデオメディアをエンコード、 変換、再生するアプリケーションが用意されています。 この章では FreeBSD 上でサウンドカード、ビデオの再生、TV チューナカード、 スキャナを設定する方法について説明します。 また、これらのデバイスを使うためのアプリケーションについても説明します。 この章を読むと、以下のことがわかります。 * FreeBSD でのサウンドカードの設定方法 * サウンドの設定に関するトラブルシューティング * MP3 およびその他の形式の音声を再生、エンコードする方法 * FreeBSD システムでのビデオ再生の準備 * DVD, [.filename]#.mpg# および [.filename]#.avi# ファイルを再生する方法 * CD および DVD の情報をファイルに抽出する方法 * TV カードの設定方法 * MythTV を FreeBSD にインストールして設定する方法 * 画像スキャナの設定方法 * Bluetooth ヘッドホンの設定方法 この章を読む前に、以下のことを理解しておく必要があります。 * アプリケーションのインストール方法 (crossref:ports[ports,アプリケーションのインストール - packages と ports]) [[sound-setup]] == サウンドカードの設定 設定をはじめる前に、サウンドカードのモデル、 そのカードが使用しているチップを確認してください。 FreeBSD は サウンドカードに幅広く対応しています。 使用しているカードが対応しているかどうか、 どの FreeBSD ドライバを使うかについて、 link:{u-rel120-hardware}[ハードウェアノート] の対応オーディオデバイスの一覧を確認してください。 サウンドデバイスを使うためには、 デバイスドライバを読み込まなければいけません。 もっとも簡単な方法は man:kldload[8] を使ってサウンドカードのカーネルモジュールを読み込むことです。 次の例は、Intel 仕様のビルトインオーディオチップセットのドライバを読み込む例です。 [source,bash] .... # kldload snd_hda .... このドライバを起動時に読み込むように設定するためには、 [.filename]#/boot/loader.conf# にドライバを追加してください。 このドライバの場合は以下の行になります。 [.programlisting] .... snd_hda_load="YES" .... 他に利用可能な読み込み可能なサウンドモジュールは [.filename]#/boot/defaults/loader.conf# に記載されています。 どのドライバを利用すればいいか確かでなければ、 [.filename]#snd_driver# モジュールを読み込んでください。 [source,bash] .... # kldload snd_driver .... [.filename]#snd_driver# モジュールは、 一般に使用されるカードに対応したドライバをまとめて一度に読み込むメタドライバです。 このドライバを使用すれば、速やかに正しいドライバを探し出すことができます。 [.filename]#/boot/loader.conf# ファイルを使用して、 すべてのサウンドドライバを読み込むこともできます。 [.filename]#snd_driver# メタドライバの読み込み後に、 どのドライバがサウンドカードに選択されたのかを知るには、 `cat /dev/sndstat` と入力してください。 === サウンドに対応したカスタムカーネルを設定する この節は、 サウンドカードのドライバをカーネルへ静的に組み込もうと考えているユーザ向けです。 カーネル再構築の詳細は crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] を参照してください。 サウンドに対応したカスタムカーネルを使うときには、 オーディオフレームワークドライバをカーネルコンフィグレーションファイルに追加してください。 [.programlisting] .... device sound .... 次に、サウンドカードに対応したドライバを追加します。 前節の Intel 仕様のビルトインオーディオチップセットの例では、 カスタムカーネルコンフィグレーションファイルに以下の行を追加してください。 [.programlisting] .... device snd_hda .... ドライバのマニュアルページを読んで、 ドライバが使用するデバイス名を調べてください。 PnP 非対応の ISA サウンドカードでは、 IRQ および I/O ポートの設定を [.filename]#/boot/device.hints#  に指定する必要があるかもしれません。 システムの起動時に、man:loader[8] はこのファイルを読み、設定情報をカーネルに渡します。 たとえば、PnP 非対応の古い Creative SoundBlaster(R) 16 (ISA 接続) には `snd_sb16` とともに man:snd_sbc[4] ドライバを使用します。 このカードを使用する場合には、 カーネルコンフィグレーションファイルに以下の行を追加してください。 [.programlisting] .... device snd_sbc device snd_sb16 .... もしカードが `0x220` I/O port と IRQ `5` を使用している場合には、 [.filename]#/boot/device.hints# に以下の行を追加してください。 [.programlisting] .... hint.sbc.0.at="isa" hint.sbc.0.port="0x220" hint.sbc.0.irq="5" hint.sbc.0.drq="1" hint.sbc.0.flags="0x15" .... [.filename]#/boot/device.hints# に用いるべき構文は、man:sound[4] および、 サウンドカードの各ドライバのマニュアルページに記載されています。 これまでの設定はデフォルトのものです。 カードを使用する状況によっては、 IRQ やその他の設定を変更する必要があるかもしれません。 このカードについての詳細は、 man:snd_sbc[4] をご覧ください。 [[sound-testing]] === サウンドのテスト 必要となるモジュールを読み込むか、カスタムカーネルで再起動すると、 サウンドカードが検出されます。 確認をするには、`dmesg | grep pcm` と実行してください。 この例は、ビルトイン Conexant CX20590 チップセットを搭載したシステムのものです。 [source,bash] .... pcm0: at nid 5 on hdaa0 pcm1: at nid 6 on hdaa0 pcm2: at nid 31,25 and 35,27 on hdaa1 .... サウンドカードの状態は、 以下のコマンドを使用して確認することもできます。 [source,bash] .... # cat /dev/sndstat FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64) Installed devices: pcm0: (play) pcm1: (play) pcm2: (play/rec) default .... この出力は、サウンドカードによって異なります。 [.filename]#pcm# デバイスがなければ、 適切なデバイスドライバが読み込まれているか、 カーネルに追加されてコンパイルされているかどうかを確認してください。 次の節では、良くある問題とその解決方法をリストアップしています。 すべてうまくいけば、サウンドカードが FreeBSD で機能するでしょう。 CD または DVD ドライブのオーディオ出力端子がサウンドカードと適切に接続されていれば、 man:cdcontrol[1] を使ってドライブ内のオーディオ CD を再生できます。 [source,bash] .... % cdcontrol -f /dev/acd0 play 1 .... [WARNING] ==== - オーディオ CD は特別なエンコーディングが行われているため、 man:mount[8] を使ってマウントすべきではありません。 ==== package:audio/workman[] のように、 よりよいインタフェースを提供するさまざまなアプリケーションがあります。 package:audio/mpg123[] port をインストールして MP3 オーディオファイルを聞くことができます。 手っ取り早くカードをテストするには、 [.filename]#/dev/dsp# デバイスにデータを送ってみてください。 [source,bash] .... % cat filename > /dev/dsp .... ここで [.filename]#filename# は、どのような形式のファイルでも構いません。 このコマンドラインを実行すると雑音が発生するはずです。 これにより、サウンドカードが動作していることを確認できます。 [NOTE] ==== [.filename]#/dev/dsp*# デバイスノードは、 必要に応じて自動的に作成されます。 デバイスノードが使用されていない場合には存在せず、 man:ls[1] の出力に表示されません。 ==== [[bluetooth-headset]] === Bluetooth サウンドデバイスの設定 Bluetooth デバイスへの接続についての説明は、この章の範囲外です。 詳細については crossref:advanced-networking[network-bluetooth,Bluetooth] をご覧ください。 FreeBSD のサウンドシステムで Bluetooth サウンドシンクを動かすには、最初に package:audio/virtual_oss[] をインストールしてください。 [source,bash] .... # pkg install virtual_oss .... package:audio/virtual_oss[] を使うには、 カーネルに `cuse` が読み込まれている必要があります。 [source,bash] .... # kldload cuse .... システムのスタートアップ時に `cuse` を読み込むには、以下のコマンドを実行してください。 [source,bash] .... # sysrc -f /boot/loader.conf cuse_load=yes .... package:audio/virtual_oss[] でヘッドホンをサウンドシンクとして使うには、 Blueooth オーディオデバイスに接続後、 仮想デバイスを作成する必要があります。 [source,bash] .... # virtual_oss -C 2 -c 2 -r 48000 -b 16 -s 768 -R /dev/null -P /dev/bluetooth/headphones -d dsp .... [NOTE] ==== この例において、 _headphones_ は、 [.filename]#/etc/bluetooth/hosts# に記載されているホスト名です。 代わりに `BT_ADDR` を使えます。 ==== 詳細については、man:virtual_oss[8] をご覧ください。 [[troubleshooting]] === サウンドカードの問題についてのトラブルシューティング <> は、 良くあるエラーメッセージとその解決法の一覧です。 [[multimedia-sound-common-error-messages]] .良くあるエラーメッセージ [cols="1,1", frame="none", options="header"] |=== | エラー | 解決方法 |`sb_dspwr(XX) timed out` | 使用する I/O ポートが適切に設定されていません。 |`bad irq XX` | 使用する IRQ が正しく設定されていません。 サウンドカードの IRQ と設定した IRQ が同じかどうか確かめてください。 |`xxx: gus pcm not attached, out of memory` | デバイスを使用するのに十分なメモリを確保できません。 |`xxx: can't open /dev/dsp!` | `fstat \| grep dsp` と入力して、 他のアプリケーションがデバイスを使用しているか調べてください。 注目すべきトラブルメーカは esound と KDE のサウンド機能です。 |=== 最近のグラフィックカードの中には、 HDMI を利用するため、 グラフィックカード自身がサウンドカードを持つものがあります。 このようなサウンドデバイスには、 時としてサウンドカードより若い番号が付けられることがあります。 そのような場合には、 サウンドカードをデフォルトプレイバックデバイスとして利用できません。 このことが原因かどうかを確認するには、dmesg を実行して `pcm` を探してください。 以下のような出力を得るかもしれません。 [.programlisting] .... ... hdac0: HDA Driver Revision: 20100226_0142 hdac1: HDA Driver Revision: 20100226_0142 hdac0: HDA Codec #0: NVidia (Unknown) hdac0: HDA Codec #1: NVidia (Unknown) hdac0: HDA Codec #2: NVidia (Unknown) hdac0: HDA Codec #3: NVidia (Unknown) pcm0: at cad 0 nid 1 on hdac0 pcm1: at cad 1 nid 1 on hdac0 pcm2: at cad 2 nid 1 on hdac0 pcm3: at cad 3 nid 1 on hdac0 hdac1: HDA Codec #2: Realtek ALC889 pcm4: at cad 2 nid 1 on hdac1 pcm5: at cad 2 nid 1 on hdac1 pcm6: at cad 2 nid 1 on hdac1 pcm7: at cad 2 nid 1 on hdac1 ... .... この例では、グラフィックカード (`NVidia`) には、サウンドカード (`Realtek ALC889`) より若い番号が付けられています。 サウンドカードをデフォルトのプレイバックデバイスとして利用するには、 `hw.snd.default_unit` をプレイバックで使用するユニット番号に変更してください。 [source,bash] .... # sysctl hw.snd.default_unit=n .... ここで、`n` は使用するサウンドデバイスの番号です。 この例では `4` です。 [.filename]#/etc/sysctl.conf# に以下の行を入れると、 設定の変更が常に反映されるようになります。 [.programlisting] .... hw.snd.default_unit=4 .... [[sound-multiple-sources]] === 複数音源の利用 同時に再生することのできる音源を複数実装していることは、 多くの場合望ましいことです。 FreeBSD では、"仮想サウンドチャネル" を使ってカーネル内でサウンドを合成することにより、 サウンドカードの再生を多重化することができます。 仮想チャネルの数を決めるのに三つの man:sysctl[8] 変数を設定できます。 [source,bash] .... # sysctl dev.pcm.0.play.vchans=4 # sysctl dev.pcm.0.rec.vchans=4 # sysctl hw.snd.maxautovchans=4 .... この例では四つの仮想チャネルを設定しています。 これは通常利用する上で十分実用的な数です。 `dev.pcm.0.play.vchans=4` と `dev.pcm.0.rec.vchans=4` は、 デバイスが取り付けられた後で設定できます。 これらは [.filename]#pcm0# が再生や録音のために持っている仮想チャネルの数です。 `hw.snd.maxautovchans` は、 man:kldload[8] を用いて認識された新しいデバイスの仮想チャネル数です。 [.filename]#pcm# モジュールはハードウェアドライバとは独立して読み込むことができるので、 `hw.snd.maxautovchans` は、オーディオデバイスが取り付けられた時に、 デバイスに与えられる仮想チャネルの数を表しています。 より詳細な情報については man:pcm[4] を参照してください。 [NOTE] ==== デバイスを使用しているときに仮想チャンネルの数を変更することはできません。 まず、ミュージックプレーヤやサウンドデーモンといった デバイスを使用しているすべてのプログラムを終了してください。 ==== [.filename]#/dev/dsp0# を必要とするプログラムが意識しなくても、 適切な [.filename]#pcm# デバイスが自動的に設定されます。 === ミキサチャネルの初期値を設定する 各ミキサチャネルの初期値は man:pcm[4] ドライバのソースコードにハードコーディングされています。 man:mixer[8] および他のサードパーティ製のアプリケーションやデーモンによって、 サウンドカードのミキサレベルを変更できますが、 永続的な解決方法ではありません。 そのかわり以下の例のように、 適切な値を [.filename]#/boot/device.hints# ファイルに記述することによって、 ドライバレベルでミキサの初期値を設定することができます。 [.programlisting] .... hint.pcm.0.vol="50" .... この例では、man:pcm[4] が読み込まれたと同時に、 ボリュームチャネルの初期値を `50` に設定します。 [[sound-mp3]] == MP3 オーディオ この節では、FreeBSD で利用できる MP3 プレイヤや、オーディオ CD トラックを吸い出す方法、 および MP3 のエンコード、 デコードの方法について説明します。 [[mp3-players]] === MP3 プレイヤ Audacious は 人気のあるグラフィカルな MP3 プレイヤです。 Winamp スキンや追加のプラグインに対応しています。 Audacious のプレイリスト、 グラフィックイコライザ等のインタフェースは直感的です。 Winamp を使いなれている人は簡単に Audacious を使えるでしょう。 FreeBSD では、Audacious は package:multimedia/audacious[] の port または package からインストールできます。 Audacious は、XMMS の子孫です。 package:audio/mpg123[] package もしくは port は、 は代替となる コマンドライン上の MP3 プレイヤです。インストールしたら、再生する MP3 ファイルをコマンドラインから指定してください。 もしシステムが、複数のオーディオデバイスを搭載しているのであれば、 サウンドデバイスを同様に指定してください。 [source,bash] .... # mpg123 -a /dev/dsp1.0 Foobar-GreatesHits.mp3 High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3 version 1.18.1; written and copyright by Michael Hipp and others free software (LGPL) without any warranty but with best wishes Playing MPEG stream from Foobar-GreatestHits.mp3 ... MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo .... 他の MP3 プレイヤも Ports Collection から利用できます。 [[rip-cd]] === CD オーディオトラックの抽出 CD 全体または CD トラックを MP3 に変換する前に、CD 上のオーディオデータをハードディスク上に抽出する必要があります。 これは raw CD Digital Audio (CDDA) データを WAV ファイルにコピーすることで行われます。 package:sysutils/cdrtools[] スイートからインストールされる `cdda2wav` ツールを用いて、CD からオーディオデータを抽出できます。 CD をドライブにいれて次のコマンドを `root` 権限で実行すると、 CD 全体をトラックごとに個々の WAV ファイルに抽出できます。 [source,bash] .... # cdda2wav -D 0,1,0 -B .... この例では、`-D _0,1,0_` は SCSI デバイス [.filename]#0,1,0# が抽出する CD を表します。 `cdrecord -scanbus` を使って、 システムの適切なデバイスパラメータを取得してください。 個々のトラックを抽出するには、 次のように `-t` でトラックを指定してください。 [source,bash] .... # cdda2wav -D 0,1,0 -t 7 .... 範囲を指定して、 一番目から七番目のトラックまで抽出したい場合、 次のようにします。 [source,bash] .... # cdda2wav -D 0,1,0 -t 1+7 .... ATAPI (IDE) CDROM ドライブから抽出するには、 SCSI ユニット番号をデバイス名に置き換えて指定します。 たとえば IDE ドライブから七番目のトラックを抽出するには、 次のようにします。 [source,bash] .... # cdda2wav -D /dev/acd0 -t 7 .... または、crossref:disks[duplicating-audiocds,「オーディオ CD の複製」] で説明されているように、`dd` を使って ATAPI ドライブ上のオーディオトラックを展開できます。 [[mp3-encoding]] === MP3 のエンコードとデコード lame は、 ポピュラーな MP3 エンコーダです。 package:audio/lame[] port からインストールできます。 特許の問題から、package は利用できません。 次のコマンドを実行すると、抽出した WAV ファイル [.filename]#audio01.wav# を使って [.filename]#audio01.mp3# に変換します。 [source,bash] .... # lame -h -b 128 --tt "曲名" --ta "アーティスト名" --tl "アルバム名" \ --ty "年" --tc "コメント" --tg "ジャンル" audio01.wav audio01.mp3 .... ここで指定している 128 kbits は、MP3 の標準のビットレートです。 160 kbits または 192 kbits のビットレートは、 さらに高音質を提供します。 ビットレートが高くなるにつれて作成される MP3 ファイルは多くのディスク領域を消費します。 `-h` オプションを指定すると "低速高品質" モードとなります。 `--t` ではじまるオプションは ID3 タグを設定します。 このタグにはたいてい曲の情報が含まれており、 MP3 ファイルに格納されます。 Lame のマニュアルを参照すれば、 他のエンコーディングのオプションが見つかるでしょう。 MP3 からオーディオ CD を作成するには、 まず非圧縮のファイル形式に変換しなければなりません。 XMMS は WAV 形式へ変換できますが、 mpg123 は raw Pulse-Code Modulation (PCM) オーディオデータに変換します。 mpg123 を使って [.filename]#audio01.mp3# を変換するには、PCM ファイルを指定してください。 [source,bash] .... # mpg123 -s audio01.mp3 > audio01.pcm .... XMMS を使って MP3 を WAV 形式に変換するには、 以下の手順に従ってください。 [.procedure] ==== *Procedure: XMMS を使って WAV 形式に変換する* . XMMS を起動します。 . 右クリックで XMMS メニューを表示します。 . `Options` から `Preferences` を選択します。 . Output Plugin を "Disk Writer Plugin" に変更します。 . `Configure` を押します。 . 非圧縮ファイルを書き出すディレクトリを入力、 または選択します。 . 普段通り XMMS へ MP3 ファイルを読み込みます。 音量は 100% でイコライザの設定はオフにします。 . `Play` を押します。 XMMS は MP3 を再生しているかのように表示しますが、 音声はきこえません。 実際には MP3 をファイルに出力しています。 . 終了したら、再び MP3 を聴けるように Output Plugin を以前のように元に戻すのを忘れないでください。 ==== WAV と PCM 形式は、 cdrecord で利用できます。 WAV ファイルを使用する場合、 それぞれのトラックの先頭に小さなノイズが入るのに気づくでしょう。 これは WAV ファイルのヘッダ情報です。 package:audio/sox[] port または package を使うとヘッダ情報を削除できます。 [source,bash] .... % sox -t wav -r 44100 -s -w -c 2 track.wav track.raw .... FreeBSD での CD 作成の詳しい情報は crossref:disks[creating-cds,「光メディア (CD & DVD) の作成と使用」] を参照してください。 [[video-playback]] == ビデオ再生 ビデオ再生のための設定をはじめる前に、 ビデオカードのモデルおよびチップセットを確認する必要があります。 Xorg はさまざまなビデオカードに対応していますが、 すべてのカードがビデオ再生に性能を発揮できるとは限りません。 利用しているビデオカードの Xorg サーバが対応している拡張機能のリストを得るには、 Xorg を実行中に `xdpyinfo` を実行してください。 さまざまなプレイヤやオプションを試すのに、 テストファイルとして小さな MPEG ファイルを用意しておくのはよい考えです。 いくつかの DVD アプリケーションは DVD メディアを [.filename]#/dev/dvd# として初期設定しているか、ハードコーディングしているので、 次のように適切なデバイスにシンボリックリンクを張っておくと便利かもしれません。 [source,bash] .... # ln -sf /dev/cd0 /dev/dvd .... man:devfs[5] の仕様により、 このように手動で作成されたリンクはシステムを再起動すると消えてしまいます。 システムの起動時にこれらのシンボリックリンクを自動的に作成するには、 [.filename]#/etc/devfs.conf# に下記の設定を追加してください。 [.programlisting] .... link cd0 dvd .... 特別な機能を必要とする DVD の抽出には、 DVD デバイスへの書き込み権限が必要です。 Xorg インタフェースの使う共有メモリを拡張するために、 以下の man:sysctl[8] 変数の値を増やすことが推奨されています。 [.programlisting] .... kern.ipc.shmmax=67108864 kern.ipc.shmall=32768 .... [[video-interface]] === ビデオ機能の決定 Xorg においてビデオ表示性能を改善する方法はいくつかあり、 正しく動作するかどうかはハードウェアに大きく依存しています。 下記に説明したどの方法でも、 ハードウェアが変わると品質が変わるでしょう。 よく知られたビデオインタフェースは次の通りです。 . Xorg: 共有メモリを用いた通常の出力 . XVideo: 特別なアクセラレータによって、 drawable オブジェクトに直接ビデオを表示する Xorg インタフェースの拡張機能です。 この拡張を使うことで廉価なコンピュータでも高品質の再生が可能になります。 次の節では、 この拡張が動作していることの確認方法について説明します。 . SDL: Simple Directmedia Layer は、 さまざまなオペレーティングシステムの間でサウンドとグラフィックスを効果的に利用したクロスプラットホームアプリケーションを開発することを目的としたレイヤです。 SDL はハードウェアに対する低レベルの抽象的概念を提供し、 時には Xorg インタフェースを使用するよりも効果的なことがあります。 FreeBSD では、SDL は、 package:devel/sdl20[] package または port によりインストールできます。 . DGA: Direct Graphics Access は、 プログラムが Xorg サーバを介せず直接フレームバッファを変更することを可能にする Xorg の拡張機能です。 低レベルのメモリマッピングが実行できることを期待しているので、 この機能を使うプログラムは `root` 権限で実行されなければなりません。 DGA 機能拡張は man:dga[1] によってテストとベンチマークができます。 `dga` 実行中はキーボードを押せばいつでもディスプレイ色が変更されます。 中止するには kbd:[q] を押します。 . SVGAlib: 低レベルコンソールグラフィックレイヤ [[video-interface-xvideo]] ==== XVideo この拡張機能が動作しているかどうかを調べるには、 `xvinfo` を使います。 [source,bash] .... % xvinfo .... 以下のような結果が得られたならば、カードは XVideo に対応しています。 [source,bash] .... X-Video Extension version 2.2 screen #0 Adaptor #0: "Savage Streams Engine" number of ports: 1 port base: 43 operations supported: PutImage supported visuals: depth 16, visualID 0x22 depth 16, visualID 0x23 number of attributes: 5 "XV_COLORKEY" (range 0 to 16777215) client settable attribute client gettable attribute (current value is 2110) "XV_BRIGHTNESS" (range -128 to 127) client settable attribute client gettable attribute (current value is 0) "XV_CONTRAST" (range 0 to 255) client settable attribute client gettable attribute (current value is 128) "XV_SATURATION" (range 0 to 255) client settable attribute client gettable attribute (current value is 128) "XV_HUE" (range -180 to 180) client settable attribute client gettable attribute (current value is 0) maximum XvImage size: 1024 x 1024 Number of image formats: 7 id: 0x32595559 (YUY2) guid: 59555932-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x32315659 (YV12) guid: 59563132-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x30323449 (I420) guid: 49343230-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x36315652 (RV16) guid: 52563135-0000-0000-0000-000000000000 bits per pixel: 16 number of planes: 1 type: RGB (packed) depth: 0 red, green, blue masks: 0x1f, 0x3e0, 0x7c00 id: 0x35315652 (RV15) guid: 52563136-0000-0000-0000-000000000000 bits per pixel: 16 number of planes: 1 type: RGB (packed) depth: 0 red, green, blue masks: 0x1f, 0x7e0, 0xf800 id: 0x31313259 (Y211) guid: 59323131-0000-0010-8000-00aa00389b71 bits per pixel: 6 number of planes: 3 type: YUV (packed) id: 0x0 guid: 00000000-0000-0000-0000-000000000000 bits per pixel: 0 number of planes: 0 type: RGB (packed) depth: 1 red, green, blue masks: 0x0, 0x0, 0x0 .... リストにある形式、YUV2, YUV12 などが XVideo のすべての実装で存在するとは限りません。 対応している形式が少ないために、 あるプレイヤでは悪影響が出るかもしれないことにも注意してください。 出力が以下のような場合、 [source,bash] .... X-Video Extension version 2.2 screen #0 no adaptors present .... カードはおそらく XVideo に対応していないのでしょう。 このことはディスプレイでビデオを表示するのに、 ビデオカードおよびプロセッサによっては、 計算上の要求を満たすことがより困難になることを意味します。 [[video-ports]] === ビデオを扱う ports および packages この節では Ports Collection で利用可能な、 ビデオの再生に使用できるソフトウェアについて紹介します。 [[video-mplayer]] ==== MPlayer および MEncoder MPlayer はコマンドラインのビデオプレイヤで、 高速性と柔軟性をもたらすグラフィカルなインタフェースも持っています。 MPlayer の他のグラフィカルなフロントエンドも Ports Collection からインストールできます。 MPlayer は package:multimedia/mplayer[] package または port からインストールできます。 いくつかのコンパイル時のオプションを設定することができ、また、 構築の際にさまざまなハードウェアのチェックがおこなわれます。 そのため、package からインストールを行わず、 port から構築することを好むユーザもいます。 port を構築する際に、メニューのオプションは、port にコンパイル時にオプションとしてどの形式に対応するかを決定するため、 見ておく必要があります。 オプションが選択されていなければ、 MPlayer はその形式のビデオ形式を表示することは出来ません。 矢印キーとスペースキーを使って必要な形式を選択してください。 選択が終わったら、kbd:[Enter] を押して、 port の構築とインストールを続けてください。 デフォルトでは、この packege または port は、 `mplayer` コマンドラインユーティリティと `gmplayer` グラフィカルユーティリティを構築します。 ビデオをエンコードする必要があれば、 package:multimedia/mencoder[] port をコンパイルしてください。 ライセンスの制限のため、 MEncoder の package は利用できません。 MPlayer を初めて起動すると、 各自のホームディレクトリ内に [.filename]#~/.mplayer# が作成されます。このサブディレクトリには、 ユーザ固有の設定ファイルのデフォルトバージョンが含まれています。 この節では、一般的な使用法についてのみ説明します。 数多くのオプションの完全な説明については、 mplayer(1) のマニュアルに記載されています。 [.filename]#testfile.avi# というファイルを再生するには、以下の例のように、 `-vo` とともに、 ビデオインタフェースを指定してください。 [source,bash] .... % mplayer -vo xv testfile.avi .... [source,bash] .... % mplayer -vo sdl testfile.avi .... [source,bash] .... % mplayer -vo x11 testfile.avi .... [source,bash] .... # mplayer -vo dga testfile.avi .... [source,bash] .... # mplayer -vo 'sdl:dga' testfile.avi .... ビデオ再生の相対的性能は多くの要因に依存し、 ハードウェアに応じて著しく変わると思われるので、 これらのオプションをすべて試してみる価値はあるでしょう。 DVD を再生するには、 [.filename]#testfile.avi# を `dvd://_N_ -dvd-device _DEVICE_` に置き換えてください。 には再生するタイトル番号を、 _DEVICE_ は DVD のデバイスノードを指定します。 たとえば、[.filename]#/dev/dvd# から 2 番目のタイトルを再生するには以下のようにします。 [source,bash] .... # mplayer -vo xv dvd://3 -dvd-device /dev/dvd .... [NOTE] ==== デフォルトの DVD デバイスは、 MPlayer port の構築時に `WITH_DVD_DEVICE=/path/to/desired/device` を追加することでで定義できます。 デフォルトでは、デバイスは [.filename]#/dev/cd0# です。 詳細はこの port の [.filename]#Makefile.options# をご覧ください。 ==== 停止、休止、 再生などをするにはキーバインディングを使ってください。 キーバインディングの一覧を見るには、`mplayer -h` を実行するか、もしくは、mplayer(1) を読んでください。 再生に関する追加のオプションがあります。 全画面モードにする `-fs -zoom` オプションと、 性能を向上させる `-framedrop` オプションです。 よく使用するオプションについては、各ユーザの [.filename]#.mplayer/config# に以下のように追加してください。 [.programlisting] .... vo=xv fs=yes zoom=yes .... `mplayer` を使って、 DVD タイトルを [.filename]#.vob# に抽出できます。 DVD から 2 番目のタイトルをダンプするには次のようにします。 [source,bash] .... # mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd .... 出力された [.filename]#out.vob# ファイルは MPEG 形式です。 -UNIX(R) ビデオについて、 高レベルのノウハウを得たいと考えている方は http://www.mplayerhq.hu/DOCS/[mplayerhq.hu/DOCS] をご覧ください。技術的な情報があります。 このドキュメントは、 バグを報告する前に、読むべきものです。 +UNIX(R) ビデオについて、 高レベルのノウハウを得たいと考えている方は link:http://www.mplayerhq.hu/DOCS/[mplayerhq.hu/DOCS] をご覧ください。技術的な情報があります。 このドキュメントは、 バグを報告する前に、読むべきものです。 `mencoder` を使う前に、link:http://www.mplayerhq.hu/DOCS/HTML/en/mencoder.html[mplayerhq.hu/DOCS/HTML/en/mencoder.html] を読んでオプションに慣れておくのはよい考えです。 品質向上、低ビットレート、形式変換をする方法が無数にあります。 これらの要素の調節具合で、性能が良かったり悪かったりするなど、 結果に違いが出るかもしれません。 コマンドラインオプションを不適切に組合せると、 `mplayer` でさえ再生できない出力ファイルを作成してしまいます。 -はじめは単純なファイルのコピーです。 + はじめは単純なファイルのコピーです。 [source,bash] .... % mencoder input.avi -oac copy -ovc copy -o output.avi .... したがって、単にファイルを抽出したいときには、 `mplayer` に `-dumpfile` をつけます。 [.filename]#input.avi# を音声に MPEG3 エンコードを使用して MPEG4 コーデックに変換するには、まず最初に package:audio/lame[] port をインストールしてください。 ライセンスの制限により、package は利用できません。 インストールしたら、以下のように入力してください。 [source,bash] .... % mencoder input.avi -oac mp3lame -lameopts br=192 \ -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi .... これは `mplayer` や `xine` といったアプリケーションで再生可能な出力ファイルを作成します。 DVD タイトルを直接再エンコードするためには、 上記のコマンドラインの [.filename]#input.avi# を `dvd://1 -dvd-device /dev/dvd` に置き換えて、 `root` 権限で実行します。 期待する結果を得るには何度か繰り返すことになるので、 かわりにタイトルをファイルにダンプして、 ファイルに対して作業することをおすすめします。 [[video-xine]] ==== xine ビデオプレイヤ xine は、 再利用可能な基本ライブラリと、 プラグインで拡張できる実行可能なモジュールを提供するビデオプレイヤです。 package:multimedia/xine[] package または port からインストールできます。 実用上、xine を使用するには高速なビデオカードとともに高速な CPU があるか、 またはビデオカードが XVideo 拡張に対応している必要があります。 XVideo インタフェースとともに xine ビデオプレイヤを使うのが最良です。 デフォルトでは、xine プレイヤは GUI 付きで起動するでしょう。 メニューを使用して特定のファイルを開くことができます。 xine は、 再生するファイル名を指定することで、 コマンドラインから実行することもできます。 [source,bash] .... % xine -g -p mymovie.avi .... -http://www.xine-project.org/faq[xine-project.org/faq] には、より多くの情報やトラブルシューティングがあります。 +link:http://www.xine-project.org/faq[xine-project.org/faq] には、より多くの情報やトラブルシューティングがあります。 [[video-ports-transcode]] ==== Transcode ユーティリティ Transcode は、 ビデオおよびオーディオファイルを再エンコードするためのツール一式です。 Transcode を使えば、stdin/stdout ストリームインタフェースとともにコマンドラインツールを用いることで、 ビデオファイルの統合や、壊れたファイルの修復ができます。 FreeBSD では、Transcode は、 package:multimedia/transcode[] package もしくは port からインストールできます。 多くのユーザは port からコンパイルすることを好みます。 port では、 コンパイルで有効にするサポートやコーデックを指定するコンパイルオプションのメニューを利用できるためです。 オプションを選択しないと、Transcode は、その形式をエンコード出来ないでしょう。 矢印キーとスペースバーを使って、 必要とするフォーマットを選択してください。 選択が終わったら、 kbd:[Enter] を押して、port のコンパイルとインストールを続けてください。 この例では、DivX ファイルを PAL MPEG-1 (PAL VCD) に変換する使用例を示します。 [source,bash] .... % transcode -i input.avi -V --export_prof vcd-pal -o output_vcd % mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa .... 作成された MPEG ファイル、 [.filename]#output_vcd.mpg# は、 MPlayer を使って再生できます。 また、package:multimedia/vcdimager[] および package:sysutils/cdrdao[] といったユーティリティを使って、 ファイルを CD メディアに書き込むことでビデオ CD も作成できます。 `transcode` のマニュアルページに加え、link:http://www.transcoding.org/cgi-bin/transcode[transcoding.org/cgi-bin/transcode] から、更なる情報や使用例を得てください。 [[tvcard]] == TV カードの設定 TV カードを使用することで、 TV 放送をコンピュータで見ることができます。 これらの多くのカードは RCA または S-video 入力端子を備えており、 FM ラジオチューナを装備したカードもあります。 FreeBSD は、Brooktree Bt848/849/878/879 をビデオキャプチャチップに採用した PCI TV カードに man:bktr[4] ドライバで対応しています。 このドライバは、ほとんどの Pinnacle PCTV ビデオカードに対応しています。 TV カードを購入する前に、対応しているチューナの一覧について、 man:bktr[4] を参照してください。 === ドライバを読み込む カードを使用するには、man:bktr[4] ドライバを読み込む必要があります。 起動時に自動的に読み込むためには、 [.filename]#/boot/loader.conf# に以下の行を追加してください。 [.programlisting] .... bktr_load="YES" .... あるいは、カスタムカーネルに TV ビデオカードへのサポートを静的に組み込むこともできます。 この場合には、 次の行をカーネルコンフィギュレーションファイルに追加してください。 [.programlisting] .... device bktr device iicbus device iicbb device smbus .... カードコンポーネントは I2C バス経由で連結されているため、 man:bktr[4] ドライバに加えてこれらのデバイスが必要になります。 編集したら新しいカーネルを構築し、インストールします。 チューナが適切に検出されたかどうかを確認するため、 システムを再起動してください。 起動時のメッセージに TV カードが以下のように認識されるでしょう。 [.programlisting] .... bktr0: mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0 iicbb0: on bti2c0 iicbus0: on iicbb0 master-only iicbus1: on iicbb0 master-only smbus0: on bti2c0 bktr0: Pinnacle/Miro TV, Philips SECAM tuner. .... これらのメッセージはハードウェアに応じて異なります。 必要であれば、man:sysctl[8] や、 カーネルコンフィギュレーションファイルオプションで、 検知されたいくつかのパラメータを変更できます。 たとえば、チューナを Philips SECAM チューナとして検知されるようにするには、 カーネルコンフィギュレーションファイルに以下の行を追加します。 [.programlisting] .... options OVERRIDE_TUNER=6 .... または、直接 man:sysctl[8] を使用して変更します。 [source,bash] .... # sysctl hw.bt848.tuner=6 .... 利用可能な man:sysctl[8] パラメータおよびカーネルオプションについては man:bktr[4] を参照してください。 === 便利なアプリケーション TV カードを使用するためには、 以下のアプリケーションの一つをインストールする必要があります。 * package:multimedia/fxtv[] はウィンドウ内に TV 映像を映します。 画像/音声/ビデオを取り込むこともできます。 * package:multimedia/xawtv[] も同様の機能を持った TV アプリケーションです。 * package:audio/xmradio[] は TV カードに搭載された FM ラジオチューナを使用するためのアプリケーションです。 他にも多くのアプリケーションが FreeBSD の Ports Collection に収録されています。 === トラブルシューティング TV カードに関する問題が起きたときには、man:bktr[4] が本当にビデオキャプチャチップおよびチューナに対応しているか、 オプションが正しく設定されているかどうかをまず確認してください。 TV カードに関するサポートや質問に関しては、 {freebsd-multimedia} メーリングリストを参照してください。 [[mythtv]] == MythTV MythTV は、広く使われているオープンソースの Personal Video Recorder (PVR) アプリケーションです。 この節では、FreeBSD に MythTV をインストールし、 設定する方法について説明します。 MythTV の使用法に関するより詳細な情報については、link:http://www.mythtv.org/wiki/[mythtv.org/wiki] をご覧ください。 MythTV は、フロントエンドおよびバックエンドを必要とします。 これらは、同じシステム上でも、 異なるコンピュータ上でも動かすことが可能です。 フロントエンドについては、 package:multimedia/mythtv-frontend[] package または port から FreeBSD にインストールできます。 crossref:x11[x11,X Window System] で説明されているように、 Xorg をインストールして設定する必要もあります。 このシステムは X-Video Motion Compensation (XvMC) に対応し、 オプションとして、Linux Infrared Remote Control (LIRC)-互換のリモートに対応したビデオカードを持っていることが理想的です。 FreeBSD にバックエンドとフロントエンドの両方をインストールするには、 package:multimedia/mythtv[] package または port を使ってください。 MySQL(TM) データベースサーバも必要となりますが、 自動的に依存でインストールされます。オプションで、 チューナカードと録音したデータを保存するためのストレージが必要です。 === ハードウェア -MythTV は、 エンコーダやチューナなどのビデオ入力デバイスへのアクセスに Video for Linux (V4L) を用います。 FreeBSD では、USB DVB-S/C/T カードにおいて最もよく動作します。 なぜならば、このカードは、 V4L ユーザランドアプリケーションを提供する package:multimedia/webcamd[] package または port により良くサポートされているためです。 webcamd により対応している Digital Video Broadcasting (DVB) カードは、MythTV で動作するはずです。 動作することが知られているカードの一覧が http://wiki.freebsd.org/WebcamCompat[wiki.freebsd.org/WebcamCompat] にあります。 Hauppauge カードのドライバもまた、 package:multimedia/pvr250[] および package:multimedia/pvrxxx[] port として利用可能ですが、 標準的ではないドライバのインタフェースを提供しており、 0.23 より後の MythTV では動作しません。 ライセンスの制限により、package は利用できません。 そのため、これらの ports はコンパイルをしなければなりません。 +MythTV は、 エンコーダやチューナなどのビデオ入力デバイスへのアクセスに Video for Linux (V4L) を用います。 FreeBSD では、USB DVB-S/C/T カードにおいて最もよく動作します。 なぜならば、このカードは、 V4L ユーザランドアプリケーションを提供する package:multimedia/webcamd[] package または port により良くサポートされているためです。 webcamd により対応している Digital Video Broadcasting (DVB) カードは、MythTV で動作するはずです。 動作することが知られているカードの一覧が link:http://wiki.freebsd.org/WebcamCompat[wiki.freebsd.org/WebcamCompat] にあります。 Hauppauge カードのドライバもまた、 package:multimedia/pvr250[] および package:multimedia/pvrxxx[] port として利用可能ですが、 標準的ではないドライバのインタフェースを提供しており、 0.23 より後の MythTV では動作しません。 ライセンスの制限により、package は利用できません。 そのため、これらの ports はコンパイルをしなければなりません。 -http://wiki.freebsd.org/HTPC[wiki.freebsd.org/HTPC] ページは、DVB ドライバのすべての一覧を提供しています。 +link:http://wiki.freebsd.org/HTPC[wiki.freebsd.org/HTPC] ページは、DVB ドライバのすべての一覧を提供しています。 === MythTV バックエンドの設定 バイナリ package を使って MythTV をインストールしてください。 [source,bash] .... # pkg install mythtv .... あるいは、Ports Collection からインストールするには、 以下のように実行してください。 [source,bash] .... # cd /usr/ports/multimedia/mythtv # make install .... インストールが終わったら、 MythTV データベースを設定してください。 [source,bash] .... -# mysql -uroot -p < /usr/local/shared/mythtv/database/mc.sql +# mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql .... その後、バックエンドを設定してください。 [source,bash] .... # mythtv-setup .... 最後にバックエンドを起動してください。 [source,bash] .... # sysrc mythbackend_enable=yes # service mythbackend start .... [[scanners]] == 画像スキャナ FreeBSD では、画像スキャナに対するアクセスは SANE (Scanner Access Now Easy) によって実現されており、 FreeBSD の Ports Collection で提供されています。 SANE はスキャナのハードウェアにアクセスするために FreeBSD デバイスドライバを使用します。 FreeBSD は SCSI 接続および USB 接続のスキャナのどちらにも対応しています。 スキャナのインタフェースに依存して、異なるドライバが必要となります。 設定を始める前に、 SANE がスキャナに対応していることを確認してください。 対応しているスキャナに関してのより詳細な情報については、link:http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] をご覧ください。 この節では、FreeBSD がどのようにしてスキャナを認識するかについて説明します。 その後、FreeBSD システム上で SANE を設定して使用する方法の概要について説明します。 [[scanners-kernel-usb]] === スキャナの確認 [.filename]#GENERIC# カーネルには USB スキャナに対応するためのデバイスドライバが搭載されています。 カスタムカーネルを使用する際には、 以下の行がカーネルコンフィグレーションファイルにあることを確認してください。 [.programlisting] .... device usb device uhci device ohci device ehci +device xhci .... USB スキャナが認識されたかを確認するには、 スキャナを接続して、`dmesg` を利用し、 システムメッセージバッファで、 スキャナが認識されているかどうかを確認してください。 認識されていたら、以下のようなメッセージが表示されます。 [source,bash] .... ugen0.2: at usbus0 .... この例では、EPSON Perfection(R) 1650 USB スキャナが [.filename]#/dev/ugen0.2# 上で認識されています。 スキャナのインタフェースが SCSI であれば、 どの SCSI コントローラボードを使用するかを知ることが重要です。 使用する SCSI チップセットによって、 カスタムカーネルコンフィグレーションファイルを調整する必要があります。 [.filename]#GENERIC# カーネルは、 一般に使用される SCSI コントローラのほとんどに対応しています。 [.filename]#/usr/src/sys/conf/NOTES# ファイルを読んで、 適切な行をカーネルコンフィグレーションファイルに追加してください。 また、SCSI アダプタドライバに加えて、 以下の行をカスタムカーネルコンフィグレーションファイルに記述する必要があります。 [.programlisting] .... device scbus device pass .... デバイスがメッセージバッファに出力されていることを確認してください。 [source,bash] .... pass2 at aic0 bus 0 target 2 lun 0 pass2: Fixed Scanner SCSI-2 device pass2: 3.300MB/s transfers .... システムを起動する際にスキャナの電源を入れてなければ、 `camcontrol` を使用して SCSI バスをスキャンし、 以下のように手動でデバイスを検出させることもできます。 [source,bash] .... # camcontrol rescan all Re-scan of bus 0 was successful Re-scan of bus 1 was successful Re-scan of bus 2 was successful Re-scan of bus 3 was successful .... すると、スキャナは SCSI デバイスの一覧に現れるでしょう。 [source,bash] .... # camcontrol devlist at scbus0 target 5 lun 0 (pass0,da0) at scbus0 target 6 lun 0 (pass1,da1) at scbus1 target 2 lun 0 (pass3) at scbus2 target 0 lun 0 (pass2,cd0) .... FreeBSD における SCSI デバイスについての詳細は、 man:scsi[4] および man:camcontrol[8] をご覧ください。 === SANE の設定 -SANE システムは、 二つの部分、すなわちバックエンド (package:graphics/sane-backends[]) とフロントエンド (package:graphics/sane-frontends[] もしくは、package:graphics/xsane[]) に分割されています。 バックエンドはスキャナに対するアクセスを提供します。 どのバックエンドが画像スキャナに対応しているかについては、link:http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] を参照してください。 フロントエンドはグラフィカルなスキャニングインタフェースを提供します。 package:graphics/sane-frontends[] は、 xscanimage をインストールし、一方、 package:graphics/xsane[] は、 xsane をインストールします。 +SANE システムは、 バックエンド (package:graphics/sane-backends[]) を経由してスキャナに対するアクセスを提供します。 バックエンドが対応している画像スキャナについては、link:http://www.sane-project.org/sane-supported-devices.html[http://www.sane-project.org/sane-supported-devices.html] を参照してください。 グラフィカルなスキャニングインタフェースは、 Kooka (package:graphics/kooka[]) または XSane (package:graphics/xsane[]) といったサードパーティ製のアプリケーションによって提供されています。 SANE のバックエンドは、 スキャナを試すには十分です。 -バイナリ package から、分割された二つの両方をインストールするには、 以下のように実行してください。 +バイナリ package から、バックエンドをインストールするには、 以下のように実行してください。 [source,bash] .... -# pkg install xsane sane-frontends +# pkg install sane-backends .... あるいは、Ports Collection からインストールするには、 以下のように実行してください。 [source,bash] .... -# cd /usr/ports/graphics/sane-frontends -# make install clean -# cd /usr/ports/graphics/xsane +# cd /usr/ports/graphics/sane-backends # make install clean .... package:graphics/sane-backends[] port または package をインストールしたら、 `sane-find-scanner` コマンドを使用して、 SANE システムで検出されているスキャナを確認してください。 [source,bash] .... # sane-find-scanner -q found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3 .... この出力から、 スキャナインタフェースの種類と システムに接続されているスキャナが使用するデバイスノードがわかります。 ベンダ名や製品のモデル名は表示されないかも知れません。 [NOTE] ==== いくつかの USB スキャナではファームウェアを読み込む必要がある場合があります。 詳細については、sane-find-scanner(1) および sane(7) を参照してください。 ==== 次に、スキャナがフロントエンドで認識されるか調べてください。 SANE のバックエンドには `scanimage` が付属します。 このコマンドを使用すると、 デバイスの一覧を表示したり画像を取得することができます。 スキャナデバイスの一覧を表示するには、 `-L` オプションを使ってください。 以下の最初の例は、SCSI スキャナ用のもので、 次の例は、USB スキャナ用のものです。 [source,bash] .... # scanimage -L device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner # scanimage -L device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner .... -2 番目の出力の中で、 `'epson2:libusb:/dev/usb:/dev/ugen0.2'` がスキャナが使用するバックエンド名 (`epson2`) および `/dev/ugen0.2` は、デバイスノードです。 +2 番目の出力において、 `epson2` がバックエンド名で、 `libusb:000:002` は `/dev/ugen0.2` を意味し、 スキャナが使用するデバイスノードです。 `scanimage` がスキャナの認識に失敗した場合には、 以下のようなメッセージが表示されます。 [source,bash] .... # scanimage -L No scanners were identified. If you were expecting something different, check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages). .... このような場合には、[.filename]#/usr/local/etc/sane.d/# にあるバックエンドの設定ファイルを編集して、 使用するスキャナデバイスを設定してください。 例えば、認識されなかったスキャナのモデルが、 EPSON Perfection(R) 1650 で、`epson2` バックエンドを使っているのであれば、 [.filename]#/usr/local/etc/sane.d/epson2.conf# を編集してください。 編集作業を行う際には、 使用するインタフェースとデバイスノードを指定する行を追加します。 この例では、以下の行を追加します。 [.programlisting] .... usb /dev/ugen0.2 .... 編集を保存し、 適切なバックエンド名とデバイスノードでスキャナが認識されたかどうかを確認してください。 [source,bash] .... # scanimage -L -device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner +device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner .... `scanimage -L` を実行してスキャナが認識されたことがわかれば、設定は終了です。 スキャナを使用する準備ができました。 -`scanimage` を使用してコマンドラインから画像を取得することができますが、 GUI を使用して画像を取得できるとより望ましいでしょう。 package:graphics/sane-frontends[] package および port は、シンプルですが、 効率的なグラフィカルインタフェース xscanimage をインストールします。 - -一方、package:graphics/xsane[] package または port からインストールされる xsane は、 広く使われているもう一つのグラフィカルなスキャニングフロントエンドです。 Xsane には、さまざまなスキャニングモード、 色補正、バッチスキャンなど先進的な機能があります。 これらのアプリケーションの両方とも GIMP のプラグインとして使用することができます。 +`scanimage` を使用してコマンドラインから画像を取得することができますが、 GUI を使用して画像を取得できることが望ましいでしょう。 Kooka や xsane といったアプリケーションは、 広く使われているスキャニングフロントエンドです。 これらには、さまざまなスキャニングモード、 色補正、バッチスキャンなど先進的な機能があります。 XSane は、GIMP のプラグインとして使用することもできます。 === スキャナの許可属性 スキャナにアクセスするには、 ユーザはスキャナが使用するデバイスノードへの読み込み権限と書き込み権限が必要です。 今回の例では、USB スキャナは [.filename]#/dev/ugen0.2# デバイスノードを使用しています。 このデバイスノードは、 [.filename]#/dev/usb/0.2.0# へのシンボリックリンクです シンボリックリンクとデバイスノードは、 それぞれ `wheel` および `operator` グループが所有しています。 ユーザをこれらのグループに加えると、 スキャナを使用できるようになりますが、 ユーザを `wheel` に追加することは、セキュリティの観点からお勧めできません。 良い方法は、 スキャナデバイスにアクセスできるグループを作成することです。 この例では、`_usb_` という名前のグループを作成します。 [source,bash] .... # pw groupadd usb .... その後、シンボリックリンク [.filename]#/dev/ugen0.2# および、[.filename]#/dev/usb/0.2.0# デバイスノードに対して、 `usb` グループが利用できるように書き込みの許可属性 `0660` または `0664` を設定してください。 [.filename]#/etc/devfs.rules# に次の行を追加すれば設定できます。 [.programlisting] .... [system=5] add path ugen0.2 mode 0660 group usb add path usb/0.2.0 mode 0666 group usb .... +[NOTE] +==== +デバイスを追加したり外すことにより、 デバイスノードが変わることがあります。 そのため、すべての USB デバイスにアクセスしたい場合には、 代わりに以下のルールセットを使ってください。 + +[.programlisting] +.... +[system=5] +add path 'ugen*' mode 0660 group usb +add path 'usb/*' mode 0666 group usb +.... + +==== + +このファイルの詳細については、 man:devfs.rules[5] を参照してください。 + +つぎに、/etc/rc.conf でルールセットを有効にしてください。 + +[.programlisting] +.... +devfs_system_ruleset="system" +.... + +そして、man:devfs[8] システムを再起動してください。 + +[source,bash] +.... +# service devfs restart +.... + 最後に、スキャナを利用するユーザを `_usb_` グループに追加してスキャナを利用できるようにしてください。 [source,bash] .... # pw groupmod usb -m joe .... 詳細については、man:pw[8] をご覧ください。 diff --git a/documentation/content/ja/books/handbook/security/_index.adoc b/documentation/content/ja/books/handbook/security/_index.adoc index e5322906ac..7c6972f6c1 100644 --- a/documentation/content/ja/books/handbook/security/_index.adoc +++ b/documentation/content/ja/books/handbook/security/_index.adoc @@ -1,1789 +1,1817 @@ --- title: 第14章 セキュリティ part: パートIII. システム管理 prev: books/handbook/users next: books/handbook/disks --- [[security]] = セキュリティ :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :skip-front-matter: :toc-title: 目次 :table-caption: 表 :figure-caption: 図 :example-caption: 例 :xrefstyle: basic :relfileprefix: ../ :outfilesuffix: :sectnumoffset: 14 ifeval::["{backend}" == "html5"] :imagesdir: ../../../images/books/handbook/security/ endif::[] ifeval::["{backend}" == "pdf"] :imagesdir: ../../../../static/images/books/handbook/security/ endif::[] ifeval::["{backend}" == "epub3"] :imagesdir: ../../../../static/images/books/handbook/security/ endif::[] include::shared/authors.adoc[] include::shared/releases.adoc[] include::shared/ja/mailing-lists.adoc[] include::shared/ja/teams.adoc[] include::shared/ja/urls.adoc[] toc::[] [[security-synopsis]] == この章では -この章では、基本的なシステムセキュリティの考え方、 覚えておくべき一般的なルールを紹介し、 FreeBSD における高度な話題について簡単に説明します。 ここで扱う話題の多くは、 一般的なシステムやインターネットセキュリティにもあてはまります。 システムを安全に保つことは、データ、知的財産、時間、その他を、 ハッカーやその同類から守るためには欠かせません。 +物理的もしくは仮想的に関わらず、 セキュリティは幅広いトピックであり、 業界全体がセキュリティとともに成長しています。 システムおよびネットワークを安全にする標準的な方法は数多く文書化されており、 FreeBSD のユーザも、 攻撃や侵入者から守る方法を理解しなければなりません。 -FreeBSD は、 システムとネットワークの整合性および安全性を保護する仕組みと一連のユーティリティを提供しています。 +この章では、セキュリティの基礎や技術について説明します。 FreeBSD システムは、複数のレイヤに関連するセキュリティを提供します。 そして、安全性を高めるためにサードパーティ製のユーティリティを利用することもできます。 この章を読むと、以下のことがわかります。 * FreeBSD における基本的なシステムセキュリティの考え方 * FreeBSD で利用できるさまざまな暗号化手法 * ワンタイムパスワード認証の設定方法 * man:inetd[8] と組み合わせて TCP Wrappers を設定する方法 * FreeBSD における Kerberos の設定方法 * IPsec を設定して VPN を構築する方法 * FreeBSD にける OpenSSH の設定および使用方法 * ファイルシステム ACL (アクセス制御リスト) の使用方法 * Ports Collection からインストールされたサードパーティ製ソフトウェア packages を Portaudit を使って監査する方法 * FreeBSD セキュリティ勧告の利用方法 * プロセスアカウンティングがどのようなものか、 FreeBSD 上で有効にする方法について * リソース制限データベースとは何か、 この仕組みを使ったユーザ資源の管理方法 この章を読む前に、次のことが必要になります。 * FreeBSD およびインターネットの基本概念の理解 [[security-intro]] == はじめに -セキュリティとは、システム管理者をいつも悩ませる仕事の一つです。 FreeBSD は、固有のセキュリティ機構を備えていますが、 追加のセキュリティ機構を設定し保守する仕事はおそらく、 システム管理者としてもっとも大きな責務の一つでしょう。 +セキュリティを高めることはすべての人の責任です。 システムに弱い侵入ポイントが存在すると、侵入者は重要な情報を得たり、 ネットワーク全体に被害を及ぼすことができるようになります。 多くのセキュリティのトレーニングでは、 情報システムの機密性 (confidentiality)、 完全性 (integrity) および可用性 (availability) を意味するセキュリティの 3 要素である CIA が取り扱われます。 -また、システムセキュリティには、 さまざまな形での攻撃に対処することとも関係しています。 攻撃の中には `root` 権限を奪おうとはしないけれども、 クラッシュやシステムの不安定状態を引き起こそうとするものもあります。 このセキュリティ問題は、いくつかに分類することが可能です。 +CIA の 3 要素は、 コンピュータセキュリティの基本となる考えです。 顧客やエンドユーザは、データのプライバシーを期待します。 彼らは、データが変更されないことや、 情報が隠されていることを期待します。 彼らはまた、いつでも情報にアクセスできることを期待します。 これらは、システムの機密性、完全性、可用性を構成します。 -. サービス妨害攻撃 (denial of service attack) -. ユーザアカウントの不正利用 (user account compromise) -. アクセス可能なサービスを使った root 権限の不正利用 -. ユーザアカウントを経由した root 権限の不正使用 -. バックドアの設置 +セキュリティのプロフェッショナルは、CIA を守るために、多層防衛の戦略を採用します。 この多層防衛戦略ではセキュリティのレイアを複数用意することで、 一つのレイヤが破られても、 セキュリティシステム全体が破られることを防ぎます。 システムの管理者は、ファイアウォールを単に有効にするだけではなく、 ネットワークもしくはシステムを安全に保つ必要があります。 アカウントを監査し、バイナリの完全性、 悪意のあるツールがインストールされていないことを確認する必要があります。 このために、 管理者は脅威がどのようなものかを理解する必要があります。 -サービス妨害攻撃 (DoS 攻撃) とは、 マシンから必要な資源を奪う行為です。 通常、サービス妨害攻撃はそのマシンで実行されるサーバやネットワークスタックを過負荷状態にして、 マシンをクラッシュさせたり、 マシンを使えなくしたりするような力任せの方法です。 サーバプロセスに対する攻撃は、オプションを適切に指定することによって、 攻撃されている状況でサーバプロセスの負荷上昇に限界を設定することで対応できる場合が多いです。これらに比べると、 ネットワークへの力任せの攻撃への対応はずっと難しくなります。 この攻撃によって、マシンを落としてしまうことはできないかもしれませんが、 接続しているインターネット回線を飽和させてしまうことはできます。 +[[security-threats]] +=== 脅威 -ユーザアカウントの不正利用は、 DoS 攻撃よりもずっとよくある問題です。 このご時勢でも、 暗号化されていないサービスを実行させているシステム管理者は多く、 そのため、リモートからログインしているユーザは、 パスワードを覗き見られてしまう危険性があります。 システム管理者が注意深い人ならば、 リモートアクセスログを解析して、 疑わしい送信元アドレスや疑わしいログインを探すものです。 +コンピュータセキュリティおける脅威とは何でしょうか? 長年、脅威はリモートの攻撃者、 すなわち遠隔からの許可のないシステムへのアクセスを企てる人々と考えられていました。 今日では、この定義は従業員、悪意のあるソフトウェア、 不正なネットワークデバイス、自然災害、セキュリティの脆弱性、 そして競合する会社でさえも含めるように拡張されています。 -セキュリティを十分維持し、 手入れの行き届いたシステムにおいては、 あるユーザアカウントへのアクセスが可能となっても、 必ずしも攻撃者に `root` へのアクセス権を与えるとは限りません。 `root` へのアクセス権がなければ、 攻撃者は自分の侵入の痕跡を隠蔽することができませんし、 そのユーザのファイルを引っかき回したり、 マシンをクラッシュさせたりするのがせいぜいです。 ユーザアカウントの不正利用はめずらしいことではありません。 なぜなら一般ユーザは、 システム管理者ほど注意を払わない傾向があるからです。 +毎日、数千ものシステムおよびネットワークが攻撃され、 数百ものシステムが許可なくアクセスされています。 簡単なアクシデントといったものから、リモートからの攻撃、 産業スパイであったり、以前働いていた従業員からの攻撃といったケースもあります。 システムのユーザとしては、 間違いがセキュリティ違反に繋がった場合には、 可能性のある問題をセキュリティチームに報告することが重要です。 管理者としては、脅威を把握し、 その脅威の影響を小さくするように準備をしておくことが重要です。 -`root` 権限を奪取する方法は、潜在的に何通りもあります。 攻撃者は `root` のパスワードを知っているかもしれませんし、 攻撃者が `root` 権限で実行されているサービスのバグの脆弱性を利用できるかもしれません。 また、攻撃者は SUID-root プログラムに存在するバグを知っているかもしれません。 攻撃者は、 バックドアとして知られているプログラムを使って脆弱性なシステムを探したり、 修正されていない脆弱性を利用してアクセスしたり、 攻撃者による違法行為の痕跡を消そうとしたりするかもしれません。 +[[security-groundup]] +=== ボトムアップアプローチ -セキュリティを改善する方法は、常に、 タマネギの皮のように階層化する手法 (a multi-layered "onion peel" approach) で実装されるべきです。これらは次のように分類できます。 +セキュリティを考える上で、 しばしばボトムアップアプローチが一番良い方法となります。 この考えでは、管理者が基本的なアカウント、システム設定を行ってから、 サードパーティ製ユーティリティの設定、 そしてネットワークレイヤに設定を広げていきます。 システムポリシーおよび手続きを行う上では、 このような設定の側面があります。 -. `root` とスタッフのアカウントの安全性を高める。 -. `root` の安全性を高める - `root` 権限で動作するサーバと SUID/SGID バイナリ。 -. ユーザアカウントの安全性を高める。 -. パスワードファイルの安全性を高める。 -. カーネルのコア、raw デバイス、 ファイルシステムの安全性を高める。 -. システムに対して行なわれた、 不適切な変更をすばやく検出する。 -. 必要と思われる以上の対応をとる (paranoia)。 +ビジネスの多くの環境では、 使用するデバイスの設定に対するセキュリティポリシがすでに策定されています。 このポリシには、最低限エンドユーザのワークステーション、 デスクトップ、携帯電話やラップトップといったモバイルデバイス、および 製品および開発サーバの両方に対するセキュリティの設定が含まれているべきです。 多くの場合には、コンピュータのセキュリティを考える際に、 標準作業手続書 (SOP) がすでに存在します。 わからなければ、セキュリティチームに尋ねてください。 -次の節では、上記の項目についてより深く掘り下げていきます。 +[[security-accounts]] +=== システムおよびユーザアカウント -[[securing-freebsd]] -== FreeBSD の安全性を高める +システムを安全にするにあたり、最も適切な出発点は、 アカウントの監査です。 ルートアカウントのパスワードが強力であること、 シェルアクセスを必要としないアカウントは無効にすることを確実におこなってください。 また、権限を必要とするユーザに対しては、 package:security/sudo[] をインストールして、 アクセスが必要となるアプリケーションのみにアクセスを許可するようにしてください。 root ユーザのパスワードは、決して共有すべきではありません。 -この節では、<> でとりあげた FreeBSD システムの安全性を高める方法について説明します。 - -[[securing-root-and-staff]] -=== `root` アカウントの安全性を高める - -ほとんどのシステムでは、 `root` アカウントに割り当てたパスワードが 1 つあります。 このパスワードは__いつでも__不正利用の危険に晒されていると考えてください。 これはパスワードを無効にすべきだと言っているのではありません。 パスワードは、マシンにコンソールからアクセスするのには、 ほとんどいつでも必要なものです。 しかしながら、コンソール以外からは、 そして可能なら man:su[1] コマンドを実行する場合もパスワードを使えないようにするべきです。 たとえば、[.filename]#/etc/ttys# のエントリにおいて、 特定のターミナルに対し `root` でログインできないように `insecure` と設定してください。 FreeBSD では、デフォルトで、 [.filename]#/etc/ssh/sshd_config# において `PermitRootLogin` が `no` と設定されているので、man:ssh[1] を使った `root` へログインは無効になっています。 すべてのアクセス手段、たとえば FTP ようなサービスは、良くクラックの対象となることを理解してください。 `root` への直接ログインは、 システムコンソール経由でのみ可能であるべきなのです。 - -システム管理者は `root` になれるようにしておく必要があるので、 追加のパスワード認証の設定が必要となります。 ひとつは、適切なユーザアカウントを [.filename]#/etc/group# 中の `wheel` に加える方法です。 `wheel` のメンバは、man:su[1] を使って `root` になることが許されます。 実際に `root` アクセスの必要なユーザのみ `wheel` に置くようにすべきです。 Kerberos を使用して認証行う場合には、 `root` のホームディレクトリに [.filename]#.k5login# を作成することで、 誰も `wheel` に置く必要なく man:ksu[1] することを許可できます。 - -アカウントを完全にロックするには、 man:pw[8] を使ってください。 +アカウントへのアクセスを無効にする方法は二通りあります。 一つ目の方法は、アカウントをロックする方法です。例として、 toor アカウントをロックする方法を以下に示します。 [source,bash] .... -# pw lock staff +# pw lock toor .... -これにより、指定されたユーザは、man:ssh[1] を含むいかなる方法でもログインできなくなります。 +このコマンドは、アカウントの設定を "toor:*:0:0::0:0:Bourne-again Superuser:/root:" から "toor:*LOCKED**:0:0::0:0:Bourne-again Superuser:/root:" へと変更します。 -アカウントへのアクセスをブロックするもう一つの方法は、 暗号化されたパスワードを "`*`" 1 文字に置き換えることです。 この文字は、暗号化されたパスワードにマッチすることはないので、 ユーザアクセスをブロックします。 たとえば、次のアカウントのエントリを、 +ときには (おそらく追加のサービスのために)、 この方法が使えない場合があります。 そのような場合には、以下の例のように、 シェルを /sbin/nologin に変更することで、 ログインアクセスを拒否できます。 -[.programlisting] +[source,bash] .... -foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh +# chsh -s /usr/sbin/nologin toor .... -man:vipw[8] を使って以下のように変更します。 +[NOTE] +==== +他のユーザのシェルは、スーパーユーザのみが変更できます。 通常のユーザが行おうとすると失敗します。 +==== + +アカウント情報は、以下のように最後のエントリが "nologin" シェルとなります。 [.programlisting] .... -foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh +toor:*:0:0::0:0:Bourne-again Superuser:/root:/usr/sbin/nologin .... -この変更によって `foobar` は、 通常のログインはできなくなります。 このようなアクセス制限をした後は、 サイトで Kerberos をセットアップしたり、 ユーザが man:ssh[1] の鍵を設定するなどといった認証手段を利用しなければなりません。 - -これらのセキュリティの仕組みでは、 制限の強いサーバから制限の弱いサーバへログインすることを前提としています。 たとえば、サーバがネットワークサービスを実行させている場合、 ワークステーションではそれらのサービスを実行させてはなりません。 ワークステーションを十分に安全にしておくためには、 実行するサービスをゼロにするか、可能な限り減らし、 パスワードで保護されたスクリーンセーバを走らせておくべきです。 システムへの物理的アクセスが与えられたとすると、 もちろん言うまでもなく、 攻撃者はいかなる種類のセキュリティをもうち破ることができるのです。 幸いにも、システム破りの大多数は、ネットワーク経由でリモートから、 システムへの物理的アクセス手段を持たない人々によって行われています。 +[.filename]#/usr/sbin/nologin# シェルは、 man:login[1] コマンドがこのユーザにシェルを割り当てることをブロックします。 -Kerberos を使うことで、 ユーザのパスワードの変更もしくは停止を一箇所で行なうことと、 ユーザがアカウントを持つすべてのマシンに即時にその効果を及ぼすことが可能となります。 アカウントが危険に晒されたときに、 すべてのマシン上の関連するパスワードを即座に変更する能力を過小評価してはいけません。 Kerberos では、Kerberos チケットにタイムアウトを設定でき、 設定した期間が経過するとユーザに新しいパスワードを選ぶように要求するといった追加の制限を課することができます。 +[[security-sudo]] +=== アカウントの権限を拡大する -=== root 権限で実行されているサーバと SUID/SGID バイナリの安全性を高める +場合によっては、 システム管理者へのアクセスを他のユーザと共有する必要があります。 FreeBSD はこのために二つの方法を用意しています。 第一の方法は推奨されませんが、 ルートのパスワードを共有し、ユーザを `wheel` グループに加える方法です。 これを行うにには、[.filename]#/etc/group# を編集し、 最初のグループの最後にユーザを追加してください。 ユーザはカンマ区切りで管理されています。 -用心深いシステム管理者は、必要なサービスだけを有効にし、 サードパーティ製のサーバは、 よくバグを持っていがちだということに注意しているものです。 注意深くチェックしていないサーバは、決して実行してはいけません。 多くのデーモンは、サービス専用のアカウント、もしくは _砂場 (sandbox)_ で起動させることができるので、 `root` 権限でサービスを実行する前には、よく考えてください。 man:telnetd[8] または man:rlogind[8] のような安全ではないサービスは有効にしないでください。 +権限の拡大をする適切な方法は、 package:security/sudo[] port を使う方法です。 この port は、追加の監査、よりきめ細かいユーザ管理、および ユーザを man:service[8] のような権限が与えられたコマンのみの実行に制限することもできます。 -他のシステムの潜在的なセキュリティホールには、 SUID-root および SGID バイナリがあります。 これらのバイナリは、 man:rlogin[1] のように、[.filename]#/bin#, [.filename]#/sbin#, [.filename]#/usr/bin# または [.filename]#/usr/sbin# に存在するものがほとんどです。 100% 安全なものは存在しないとはいえ、 システムデフォルトの SUID/SGID バイナリは比較的安全といえます。 SUID バイナリは、 スタッフのみがアクセス可能な特別なグループに制限し、 使わない SUID バイナリは削除することが推奨されます。 SGID バイナリもほとんど同様の危険な存在になり得ます。 侵入者が kmem に SGID されたバイナリを破ることができた場合、 その侵入者は [.filename]#/dev/kmem# を読み出すことができるようになるでしょう。つまり、 暗号化されたパスワードファイルを読み出すことができるようになるので、 ユーザアカウントを、潜在的な危険に晒すことになります。他にも、 `kmem` グループを破った侵入者が pty を通して送られたキーストロークを監視できるという危険があります。 キーストロークには、安全な方法でログインするユーザが使っている pty も含まれます。 `tty` グループを破った侵入者は、ほぼ任意のユーザの tty へ書き込みができます。 ユーザが端末プログラムやキーボードをシミュレーションする機能を持ったエミュレータを使っている場合、 侵入者は潜在的に、 結局そのユーザとして実行されるコマンドをユーザの端末にエコーさせるデータストリームを生成できる可能性があります。 +インストールが終わったら、 `visudo` インタフェースを使って [.filename]#/usr/local/etc/sudoers# ファイルを編集してください。 以下の例では、新しく webadmin グループが作成され、 `trhodes` ユーザがこのグループに追加されます。 その後、ユーザに package:apache24[] を再起動するアクセス権限を与えます。 この手続きは以下のようになります。 -[[secure-users]] -=== ユーザアカウントの安全性を高める - -ユーザアカウントは、普通、安全性を高めることが最も困難です。 気を配ってユーザアカウントを監視するよりほかありません。 ユーザアカウントに対し man:ssh[1] や Kerberos を利用するには、 システム管理がさらに増えたりテクニカルサポートが必要になりますが、 暗号化パスワードファイルと比較するとはるかに良い方法を提供します。 - -=== パスワードファイルの安全性を高める - -できるだけ多くのパスワードをアスタリスクで外し、 それらのアカウントのアクセスには man:ssh[1] や Kerberos を使うようにすることが、唯一の確実な方法です。 暗号化パスワードファイル ([.filename]#/etc/spwd.db#) は `root` でのみ読み出し可能だけれども、 たとえ、侵入者が root の書き込み権限は得られなくとも、 読み出しアクセス権限を得ることは可能かもしれません。 - -<> 節で説明されているように、 セキュリティスクリプトでパスワードファイルの変更をチェックし、 報告するようにすべきです。 - -=== カーネルのコア、raw デバイス、 ファイルシステムの安全性を高める - -最近のカーネルは、組み込みのパケット覗き見デバイス (packet sniffing device) ドライバを備えているものがほとんどです。 FreeBSD では [.filename]#bpf# と呼ばれています。 このデバイスは DHCP で必要となるため、 DHCP を提供したり使う必要のないシステムでは、 カスタムカーネルコンフィグレーションファイルから外すことができます。 - -[.filename]#bpf# を外しても、 [.filename]#/dev/mem# および [.filename]#/dev/kmem# という問題がまだ残っています。 侵入者は raw ディスクデバイスに書き込むこともできます。 やる気まんまんの侵入者は、man:kldload[8] を使って自分独自の [.filename]#bpf#、 もしくは他の覗き見デバイスを動作中のカーネルにインストールできます。 この問題を避けるため、カーネルをより高いセキュリティレベル、 少なくともセキュリティレベル 1 で実行させる必要があります。 - -カーネルのセキュリティレベルはいくつかの方法で設定できます。 現在動いているカーネルのセキュリティレベルを高める最も簡単な方法は、 `kern.securelevel` を設定する方法です。 +[source,bash] +.... +# pw groupadd webadmin -M trhodes -g 6000 +.... [source,bash] .... -# sysctl kern.securelevel=1 +# visudo .... -デフォルトでは、FreeBSD のカーネルはセキュリティレベル -1 で起動します。 このセキュリティレベルは、 変更不可のファイルフラグを外したり、 すべてのデバイスに対して読み込みおよび書き込みができたりするので、 "insecure mode" と呼ばれます。 このセキュアレベルは、管理者または man:init[8] による起動時のスクリプトにより変更されない限り -1 のままです。 [.filename]#/etc/rc.conf# において、 `kern_securelevel_enable` を `YES` とし、 `kern_securelevel` に必要とする値を設定することで、 システム起動時にセキュアレベルを高めることができます。 +[.programlisting] +.... +%webadmin ALL=(ALL) /usr/sbin/service apache24 * +.... -セキュリティレベルを 1 以上に設定すると、 追加専用および変更不可ファイルのフラグを外すことはできなくなり、 また raw デバイスへのアクセスが拒否されます。 より高いレベルに設定すると、より多くの操作に制限がかかります。 各セキュリティレベルの完全な説明については、 man:security[7] および man:init[8] をご覧ください。 +ローカルのユーザ管理において、 package:security/sudo[] は、 非常に貴重なリソースを提供します。 また、パスワードを不必要にして、デフォルトを man:ssh[1] 鍵の方法だけにすることもできます。 man:sshd[8] 経由のパスワードによるログインを無効にし、 `sudo` へのローカルパスワードのみを使うようにするには、 <> をご覧ください。 + +[[security-passwords]] +=== パスワード + +パスワードは、テクノロジーにおける必要悪です。 パスワードは極めて複雑であるだけではなく、 パスワードを保護する強力なハッシュメカニズムもまた必要となります。 この文書を書いている時点では、 FreeBSD は `crypt()` ライブラリで DES, MD5, Blowfish, SHA256 および SHA512 に対応しています。 デフォルトは SHA512 であり、 強度の弱い暗号へは変更すべきではありません。 しかしながら、Blowfish を好むユーザもおります。 DES を除く各メカニズムでは、 開始の文字、使用しているハッシュメカニズムを識別可能な特徴を持っています。 MD5 メカニズムでは、シンボルは "$" の符号です。 SHA256 または、 SHA512 では、シンボルは "$6$"、 そして Blowfish は "$2a$" です。 暗号強度の弱いパスワードを使用している場合には、 次回のログイン時にユーザが man:passwd[1] を実行して再ハッシュ化することを促すべきです。 [NOTE] ==== -セキュリティレベルを 1 以上に設定した場合には、 [.filename]#/dev/io# へのアクセスがブロックされるため、 Xorg や、 `installworld` のプロセスでは、 いくつかのファイルの追加専用および変更不可のフラグは一時的にリセットされるため、 ソースから FreeBSD を構築してインストールするときなどで問題が引き起こされる可能性があります。 Xorg の問題については、 起動プロセス初期のセキュアレベルが十分低いときに man:xdm[1] を起動することで、この問題に対応できます。 このような応急処置は、 すべてのセキュリティレベルやそれらが課す潜在的なすべての制限には対応できないでしょう。 少し先を見越した計画的な対応をすべきです。 各セキュリティレベルで課される制限は、 システムを使用することによる利便性を著しく減らしてしまうため、 この制限を理解することは重要です。 また、各セキュリティレベルの制限を理解することで、 デフォルトの設定をよりシンプルにでき、 設定に関する意外性を少なくできるでしょう。 +この文書を書いている時点で、Blowfish は AES でなければ、 FIPS (Federal Information Processing Standards) に準拠もしていません。 そのため、使用できない環境があります。 ==== -カーネルのセキュリティレベルを 1 以上に設定した場合には、 システム起動に関わる重要なバイナリやディレクトリ、 スクリプトファイル、そして、 セキュリティレベルが設定されるまでの間に実行されるすべてのものに対して、 `schg` フラグを設定することは有用でしょう。 システムをより高いセキュリティレベルで実行させるようにするが、 `schg` フラグを設定しないというところで妥協するという手もあります。 もう一つの可能性としては、単純に [.filename]#/# および [.filename]#/usr# を読み込み専用でマウントすることです。 ここで特筆すべきことは、システムを守ろうとして厳しくしすぎると、 侵入を検出することができなくなってしまうということです。 +ネットワークに接続しているシステムについては、 二要素認証を使用すべきです。 この認証では、通常あなたが所有する要素と知っている要素が用いられます。 FreeBSD のベースシステムに含まれている OpenSSH および ssh-keys では、 ネットワークへのすべてのログインにおける二要素認証の交換で、 パスワードを使用すべきではありません。 より詳細な情報については、ハンドブックの <> 節をご覧ください。 Kerberose のユーザは、ネットワークで OpenSSH を実装するために追加の変更が必要になるでしょう。 -[[security-integrity]] -=== ファイルの完全性のチェック +[[security-rkhunter]] +=== バックドアおよびルートキット -システム管理者にできることは、 便利さという要素がその醜い頭を上げない程度に、 コアシステムの設定と制御ファイルを防御することだけです。 たとえば、[.filename]#/# および [.filename]#/usr# にある大部分のファイルに `schg` ビットを設定するために man:chflags[1] を使用するのは、おそらく逆効果でしょう。 なぜなら、そうすることでファイルは保護できますが、 侵入を検出する窓を閉ざしてしまうことにもなるからです。 セキュリティ対策は、 侵入の可能性を検出できなければ、有用ではなく、 もっと悪ければ、安全性に対する間違った感覚を植え付けてしまいます。 セキュリティに対する仕事の半分は、 攻撃者を攻撃の最中に捕えるようにするために、 攻撃者を食い止めるのではなく侵入を遅らせることなのです。 +バックドアおよびルートキットは、 それらがインストールされた後に脅威となります。 インストールされると、この悪意のあるソフトウェアは、 攻撃者のために侵入口を設置します。 実際的には、システムが一度汚染された後に、調査が行われ、 消去されます。 慎重なセキュリティやシステムエンジニアでさえも、 攻撃者が残したソフトウェアを見逃してしまうという恐ろしいリスクが存在しています。 -侵入を検出する最も良い方法は、変更されていたり、 消えていたり、入れた覚えがないのに入っているファイルを探すことです。 変更されたファイルを探すのに最も良い方法は、もう一つの しばしば中央に集められた、 アクセスが制限されたシステムから行なうものです。 さらに安全でアクセス制限されたシステム上でセキュリティ用スクリプトを書けば、 スクリプトは潜在的な攻撃者からはほぼ見えなくなります。 この有効性を最大限に活用するためには、 アクセスの制限されたマシンから他のマシンへのかなりのアクセスを許可する必要があります。 普通は、読み込み専用の NFS エクスポートをしたり、 man:ssh[1] 鍵のペアを設定したりします。 ネットワークのトラフィックを別にして、 NFS は最も可視性のない方法です。 管理者は、各クライアント上のファイルシステムを、 事実上検出されずに監視できるようになります。 アクセス制限されたサーバがスイッチを通してクライアントに接続されている場合、 たいてい NFS がより良い選択肢です。 アクセス制限されたサーバが、 いくつかのルーティング層を通してクライアントに接続している場合、 NFS はあまりにも危険なので、 man:ssh[1] の方が良い方法でしょう。 +バックドアまたはルートキットソフトウェアは、 管理者にとって役に立つことが一つあります。 それは、一度検出すると、 システムのどこかが危険に冒されていることの痕跡となります。 しかし、通常この種のアプリケーションは、とてもうまく隠れています。 バックドアおよびルートキットを検出するツールが存在しており、 それうちの一つが、 package:security/rkhunter[] です。 -アクセス制限されたマシンに、 監視しようとするクライアントシステムへの少なくとも読み込みのアクセス権を与えたら、 次に監視するためのスクリプトを書かなくてはいけません。 NFS マウントをすれば、man:find[1] や man:md5[1] などの単純なシステムユーティリティでスクリプトを書くことができます。 少なくとも 1 日 1 回、クライアントのシステムファイルを直接 man:md5[1] にかけ、 さらにもっと頻繁に [.filename]#/etc# および [.filename]#/usr/local/etc# にあるようなコントロール用ファイルを試験するのが一番です。 アクセス制限されたマシンが正しいと知っている、 基となる md5 情報と比べて違いが見つかった場合、 システム管理者に警告するようにすべきです。 優れたセキュリティ用スクリプトは、 [.filename]#/# および [.filename]#/usr# などのシステムパーティション上で不適当に SUID されたバイナリや、 新たに作成されたファイルや削除されたファイルがないかどうかを調べるでしょう。 +インストール後、以下のコマンドでシステムをチェックできます。 実行すると多くの情報が出力されます。 -NFS ではなく、man:ssh[1] を使用する場合は、 セキュリティ用スクリプトを書くのはより難しいことです。 たとえば、スクリプトを動かすためには、クライアントに対してスクリプトを man:scp[1] しなくてはいけませんし、 クライアントマシンの man:ssh[1] クライアントはすでに攻撃されてしまっているかもしれません。 安全でないリンク上の場合は man:ssh[1] は必要かもしれませんが、 扱いはとても大変になります。 +[source,bash] +.... +# rkhunter -c +.... -優れたセキュリティ用スクリプトは、 [.filename]#.rhosts#, [.filename]#.ssh/authorized_keys# などの隠し設定ファイルの変更もチェックするものです。 これらは `MD5` チェックの範囲外になってしまうであろうファイル群です。 +このプロセスを実行中に kbd:[ENTER] キーを何度か押す必要があります。 完了すると、ステータスメッセージが画面に表示されます。 このメッセージは、チェックしたファイルの量、疑わしいファイルの数、 可能性のあるルートキット等の情報を含みます。 チェックの最中、隠されたファイル、 OpenSSH プロトコルの選択、そして、 時には、インストールされているソフトウェアの漸弱性のバージョンに関する一般的なセキュリティの警告が出力されます。 すぐに、もしくはより詳細な解析が行われた後に、対応が可能です。 -ユーザ用のディスク容量が非常に大きい場合は、 パーティション上の各ファイルを見て回るのに大変な時間がかかるかもしれません。 この場合は、man:mount[8] により `nosuid` を使うことで、マウントフラグを設定して、 SUID されたバイナリを置けないようにするのが良い考えです。 少なくとも週に 1 度はファイルシステムをスキャンするべきです。 なぜなら、目的は、侵入が成功したかどうかに関わらず、 不正侵入の試みがあったことの検出をすることだからです。 +管理者は皆、 担当しているシステム上で何が実行されているかを把握している必要があります。 rkhunter, lsof や man:netstat[1] および man:ps[1] といったネイティブのツールは、 システムに関するかなり多くの情報を与えてくれます。 正常な状態がどのような状態であるかを把握しておき、 本来と違う状況になった場合には、質問をしたり、 疑い深くなってください。 セキュリティが破られることを避けることは理想ですが、 破られたことを把握することは必須です。 -プロセスアカウンティング (man:accton[8] 参照) は、 マシンへの侵入を検出するためのメカニズムとして推奨できる、 比較的オーバヘッドの少ない FreeBSD の機能です。 侵入を受けた後でも当該ファイルが無傷である場合に、 侵入者がどのようにしてシステムに侵入したかを追跡するのに特に役立ちます。 +[[security-ids]] +=== バイナリ検証 -最後に、 セキュリティスクリプトはログファイルを処理するようにし、 ログファイル自体もできるだけ安全性の高い方法で生成するようにし、 リモートの syslog サーバに送信するようにすべきです。 侵入者は自分の侵入の痕跡を覆い隠そうとしますし、また、 ログファイルはシステム管理者が最初の侵入の時刻と方法を追跡してゆくために極めて重要です。 ログファイルを永久に残しておくための 1 つの方法は、 システムコンソールをシリアルポートにつないで走らせ、 コンソールを監視している安全なマシンに情報を集めることです。 +システムファイルおよびバイナリの検証は、 システム管理者およびセキュリティチームに対して、 システムの変更に関する情報を提供してくれるため重要です。 いかなるシステムにおいても、システム管理チームの知らないところで、 内部のコマンドやアプリケーションは変更すべきではありません。 システムの変更ををモニタリングするソフトウェアアプリケーションは、 侵入検知システム (Intrusion Detection System) または IDS と呼ばれます。 -=== 偏執狂的方法 +FreeBSD は、基本的な IDS システムをネイティブで提供しています。 実際に、毎晩の man:periodic[8] セキュリティに関するメールの中では、 管理者に変更点を通知します。 情報はローカルに保存されているので、 悪意のあるユーザが変更し、情報を "欺く" 可能性があります。 そのため、バイナリの署名の別のセットを作成して、 読み取り専用の root 所有のディレクトリ、できれば、 USB ディスクまたは rsync サーバといったシステムとは別のシステムに保存してください。 -多少偏執狂的になっても決して悪いことにはなりません。 原則的に、システム管理者は、 便利さに影響を与えない範囲でいくつでもセキュリティ機能を追加することができます。 また、いくらか考慮した結果、 便利さに__影響を与える__セキュリティ機能を追加することもできます。 より重要なことは、 セキュリティ管理者はこれを多少混ぜこぜにして使うべきだということです。 もしこの章で書かれている推奨される方法をそのまま使用した場合は、 予想される攻撃者はやはりこの文書を読んでいるわけですから、 防御策を教えてしまうことになります。 +まず最初に、シードを生成する必要があります。 これは、数値定数で、ハッシュ値の生成やハッシュ値の検証で使われます。 このシードがないと、 ファイルのチェックサムの値を偽ったり検証が可能になります。 以下の例では、シードは `-s` フラグで指定されています。 最初に以下のコマンドを用いて [.filename]#/bin# のハッシュ値およびチェックサムを生成してください。 -=== サービス妨害攻撃 +[source,bash] +.... +# mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > bin_chksum_mtree +.... -DoS 攻撃は、普通は、パケット攻撃です。 ネットワークを飽和させる最先端の偽造パケット (spoofed packet) 攻撃に対してシステム管理者が打てる手はそれほど多くありませんが、 一般的に、以下のような方法により、 その種の攻撃によってサーバがダウンしないことを確実にすることで、 被害をある限度に食い止めることはできます。 +このコマンドの出力は以下のようになります。 -. サーバの fork の制限。 -. ICMP 応答攻撃、ping broadcast などの踏み台攻撃の制限。 -. カーネルの経路情報のキャッシュを過剰に用意する。 +[source,bash] +.... +# mtree: /bin checksum: 3427012225 +.... -よくある DoS 攻撃は、fork するサーバに対して攻撃するもので、 多くの子プロセスを起動させることにより、 メモリ、ファイル記述子などを使いつくし、 ホストシステムを最終的に停止させます。 man:inetd[8] には、 この種の攻撃を制限するオプションがいくつかあります。 マシンがダウンすることを防止することは可能ですが、 この種の攻撃によりサービスが中断することを防止することは一般的に言ってできないことに注意する必要があります。 man:inetd[8] を注意深く読んで下さい。特に、 `-c`, `-C`, `-R` に注意して下さい。IP 偽造攻撃 (spoofed-IP attack) は man:inetd[8] の `-C` の裏をかけるので、 一般にオプションを組み合わせて使用すべきです。 スタンドアロンサーバの中には、自分自身で fork を制限するパラメータを持っているものがあります。 +[.filename]#bin_cksum_mtree# ファイルを見ると、 以下のような出力となります。 -Sendmail には、 `-OMaxDaemonChildren` があります。 システム負荷の値変化には遅れがあるので、 Sendmail の負荷限界指定オプションを使うよりも、 このオプションを使う方がまともに動作する可能性ははるかに高いです。 Sendmail を開始する際は、 通常見込まれる負荷を扱える程度に十分高いが、 コンピュータが操作できない数の Sendmail インスタンスの値よりは低い値に `MaxDaemonChildren` を設定してください。 Sendmail を `-ODeliveryMode=queued` を使って、 キュー処理モードで実行したり、 デーモン (`sendmail -bd`) をキュー処理用プロセス (`sendmail -q15m`) と別に実行することも、用心深いことと言えます。 リアルタイムでの配送を望むのであれば、 `-q1m` のようにすることで、 キュー処理をはるかに短い時間間隔で行うことができます。 いずれにしても、`MaxDaemonChildren` に合理的な値を確実に指定して、 なだれをうって失敗することがないようにして下さい。 +[.programlisting] +.... +# user: root +# machine: dreadnaught +# tree: /bin +# date: Mon Feb 3 10:19:53 2014 +# . +/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none +. type=dir mode=0755 nlink=2 size=1024 \ + time=1380277977.000000000 + \133 nlink=2 size=11704 time=1380277977.000000000 \ + cksum=484492447 \ + sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a + cat size=12096 time=1380277975.000000000 cksum=3909216944 \ + sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69 + chflags size=8168 time=1380277975.000000000 cksum=3949425175 \ + sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3 + chio size=18520 time=1380277975.000000000 cksum=2208263309 \ + sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964 + chmod size=8640 time=1380277975.000000000 cksum=2214429708 \ + sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7 +.... + +コンピュータのホスト名、現在の日付と時間、man:mtree[8] を実行したユーザの情報すべてがこのレポートには含まれています。 また、各バイナリに対するチェックサム、サイズ、タイムスタンプおよび SHA256 ダイジェストも含まれています。 + +バイナリ署名の検証のために、 以下のコマンドを実行すると、現在の署名のリストを読み込み、 結果を出力します。 -man:syslogd[8] は直接攻撃される可能性があるので、可能ならばいつでも `-s` を用いることを強く推奨します。 これができないなら、 `-a` を使って下さい。 +[source,bash] +.... +# mtree -s 3483151339707503 -p /bin < bin_chksum_mtree >> bin_chksum_output +.... -逆 identd などの接続返し (connect-back) を行うサービスについては直接攻撃を受ける可能性があるので、 十分注意を払うようにするべきです。 こういう事情があるので、TCP wrapper の逆 ident 機能を使うことは推奨されません。 +このコマンドを実行すると、すでにチェックサムを生成している [.filename]#/bin# に対して、同様のチェックサムを生成します。 このコマンドを実行してから変更が行われていないので、 [.filename]#bin_chksum_output# への主力は空となります。 変更が行われた場合をシミュレートするために、 [.filename]#/bin/cat# ファイルの日付を man:touch[1] を使って変更して、 再度検証のコマンドを実行してみます。 -境界ルータのところでファイアウォールを設けて、 外部からのアクセスに対して内部サービスを防御することは推奨されます。 これは、LAN の外部からの飽和攻撃を防ぐことにあり、 内部サービスをネットワークベースの `root` 権限への攻撃から防御することにはあまり考慮を払っていません。 ファイアウォールは、デフォルトではすべての通信を禁止し、 許可する通信のみを明示して設定するように、常に排他的に設定して下さい。 FreeBSD では、`net.inet.ip.portrange` man:sysctl[8] 変数により、 動的バインドに使用されるポート番号の範囲を制御できます。 +[source,bash] +.... +# touch /bin/cat +.... -また別のよくある DoS 攻撃として、 踏み台攻撃と呼ばれるものがあります。これは、 あるサーバを攻撃し、その結果として生成される応答がサーバ自身、 ローカルネットワーク、 もしくは他のマシンを過負荷に追い込むようにする攻撃です。 この種の攻撃の中で最もありふれたものに、 __ICMP ping broadcast 攻撃__があります。 攻撃者は、攻撃するマシンのアドレスを送信元アドレスに設定した ping パケットを偽造して、対象の LAN のブロードキャストアドレスに向けてパケットを送信します。 境界にあるルータがブロードキャストアドレスに対する ping パケットをドロップするように設定されていない場合、LAN は、 詐称された送信元アドレスに向けて、 犠牲となるマシンが飽和するまで応答パケットを生成します。 異なるネットワーク上のいくつものブロードキャストアドレスに対して同時に攻撃する場合には、 とくにひどいことになります。 2 番目の踏み台攻撃は、 サーバの受信ネットワークを飽和させるような ICMP エラー応答を生成するパケットを生成し、 その結果としてサーバが送信ネットワークを ICMP 応答で飽和させてしまう攻撃です。 メモリを消費し尽くさせることにより、 この種の攻撃でサーバをクラッシュさせることが可能です。 サーバが生成した ICMP 応答を十分速く送信できない場合、 とくにひどいことになります。 この種の攻撃の効果を抑制するには、 man:sysctl[8] 変数の `net.inet.icmp.icmplim` を使ってください。 踏み台攻撃の 3 つめの主要なクラスに属する攻撃は、 UDP echo サービスのような、特定の man:inetd[8] 内部サービスに関連するものです。 攻撃者は、送信元アドレスがサーバ A の echo ポートであり、送信先アドレスがサーバ B の echo ポートであるように UDP パケットを偽造します。 ここでサーバ A, B はともに同じ LAN に接続されています。この 2 つのサーバは、 この一つのパケットを両者の間で互いに相手に対して打ち返しあいます。 攻撃者は、このようなパケットをほんのいくつか注入するだけで、 両方のサーバと LAN を過負荷状態にすることができます。 同様の問題が chargen ポートにも存在します。 この手の inetd 内部テストサービスは無効にしてください。 +[source,bash] +.... +# mtree -s 3483151339707503 -p /bin < bin_chksum_mtree >> bin_chksum_output +.... -偽造パケット攻撃は、 カーネルの経路情報キャッシュに過負荷を生じさせるために用いられることもあります。 `net.inet.ip.rtexpire`, `rtminexpire`, `rtmaxcache` の man:sysctl[8] パラメータを参照して下さい。 でたらめな送信元 IP アドレスを用いた偽造パケット攻撃により、 カーネルは、一時的なキャッシュ経路を経路情報テーブルに生成します。 これは `netstat -rna | fgrep W3` で見ることができます。 これらの経路は、普通は 1600 秒程度でタイムアウトになります。 カーネルがキャッシュ経路テーブルが大きくなり過ぎたことを検知すると、 カーネルは動的に `rtexpire` を減らしますが、`rtminexpire` より小さくなるようには決して減らしません。 これにより 2 つの問題が引き起こされます。 +[source,bash] +.... +# cat bin_chksum_output +.... -. 負荷の軽いサーバが突然攻撃された場合、 カーネルが十分素早く反応できないこと。 -. カーネルが持続的攻撃に耐えられるほど十分 `rtminexpire` が低く設定されていないこと。 +[.programlisting] +.... +cat changed + modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb 3 10:28:43 2014 +.... -サーバが T3 もしくはそれより高速の回線でインターネットに接続されている場合、 man:sysctl[8] を用いて `rtexpire` と `rtminexpire` を手動で上書きしておくことが思慮深いことといえます。 ただし、どちらか一方でも 0 には決してしないで下さい。 コンピュータをクラッシュさせてしまうことになります。 両パラメータを 2 秒に設定すれば、 攻撃から経路情報テーブルを守るには十分でしょう。 +package:security/aide[] のような、 より高度な IDS システムもありますが、 ほとんどのケースにおいて、 man:mtree[8] は管理者が必要とする機能を提供します。 悪意のあるユーザが、 シード値およびチェックサムの出力を見れないようにすることが重要です。 -=== Kerberos および man:ssh[1] を用いたアクセスの問題 +[[security-tuning]] +=== セキュリティのためのシステムの調整 -もし、Kerberos と man:ssh[1] を使いたいのだとしたら、 両者に関して言っておかねばならない問題がいくつかあります。 Kerberos は大変優れた認証プロトコルですが、Kerberos 化された man:telnet[1] および man:rlogin[1] には、 バイナリストリームを扱うのに不向きになってしまうようなバグがあります。 デフォルトでは、Kerberos は `-x` を使わない限りセッションを暗号化してくれません。 一方 man:ssh[1] では、 デフォルトですべてを暗号化してくれます。 +システムの機能の多くは、man:sysctl[8] を使って調整できます。 Denial of Service (DOS) スタイルの攻撃を避けるためのセキュリティ機能に対しても同様です。 この節では、より重要な調整についても触れています。 man:sysctl[8] により、設定が変更された時はいつでも、 望まない危害が起こる可能性は高まり、 システムの可用性に影響します。 システム全体の設定を変更する時には、 システムの CIA を考える必要があります。 -man:ssh[1] はとても良く働いてくれますが、 デフォルトで暗号鍵を転送してしまいます。 これは、安全なワークステーションから、 安全でないマシンへのアクセスに man:ssh[1] を使っているユーザにセキュリティリスクを引き起こします。 鍵そのものが見えてしまうわけではありませんが、 man:ssh[1] は login している間、転送用ポートを作ります。 攻撃者が安全でないマシンの `root` を破ったら、 このポートを使って、 この暗号鍵でロックが外れる他のマシンへのアクセスを得てしまいます。 +以下では、man:sysctl[8] の一覧、 および変更がシステムにどのように影響するかを説明します。 -可能な時はいつでも、スタッフのログインには Kerberos を組み合せた man:ssh[1] を使用することを勧めます。 man:ssh[1] は、Kerberos 対応機能と一緒にコンパイルできます。 こうすると、見えてしまうかもしれない SSH 鍵をあまりあてにしないで良いようになり、 一方で、Kerberos 経由でパスワードが保護されます。 鍵は、安全なマシンからの自動化されたタスクのみに使用するべきです。 Kerberos はこの用途には不向きです。 また、SSH の設定で鍵転送をしないようにするか、 あるいは [.filename]#authorized_keys# の `from=IP/DOMAIN` を使用して、 特定のマシンからログインしてきたときのみ鍵が有効であるようにすることも勧めます。 +デフォルトでは、FreeBSD のカーネルはセキュリティレベル -1 で起動します。 このセキュリティレベルは、 変更不可のファイルフラグを外したり、 すべてのデバイスに対して読み込みおよび書き込みができたりするので、 "insecure mode" と呼ばれます。 このセキュアレベルは、管理者または man:init[8] による起動時のスクリプトにより変更されない限り -1 のままです。 [.filename]#/etc/rc.conf# において、 `kern_securelevel_enable` を `YES` とし、 `kern_securelevel` に必要とする値を設定することで、 システム起動時にセキュアレベルを高めることができます。 これらの設定についてのより詳細な情報については、 man:security[7] および man:init[8] をご覧ください。 -[[crypt]] -== DES, Blowfish, MD5, SHA256, SHA512 および Crypt +[WARNING] +==== +`securelevel` を大きくしすぎると、 Xorg が動かなくなったり、他の問題が起きる可能性があります。 デバッグの心づもりをしてください。 +==== -UNIX(R) システムにおけるすべてのユーザは、 そのアカウントに対応した一つのパスワードを持っています。 それらのパスワードを秘密に保っておくために、 パスワードは "一方向ハッシュ" として知られる方式で暗号化されます。 一方向ハッシュとは、 簡単に暗号化はできるが解読は難しいという方法です。 オペレーティングシステム自身はパスワードを知りません。 その代わりに _暗号化された_ 形でのみパスワードを知っています。 "素のテキスト" としてパスワードを得る唯一の方法は、 可能な限りのパスワード空間を検索するという力任せの方法です。 +つぎに変更を検討すべき man:sysctl[8] は、 net.inet.tcp.blackhole および net.inet.udp.blackhole です。 これらを設定すると、閉じたポートに対して届く SYN パケットはドロップされ、 RST レスポンスを返しません。 通常は、RST を返し、 そのポートが閉じられていることを伝えます。 これにより、システムに対する "ステルス" スキャンに対し、ある程度の防御となります。 net.inet.tcp.blackhole を "2"、 net.inet.udp.blackhole を "1" に設定してください。 詳細な情報について man:blackhole[4] をご覧ください。 -元々、UNIX(R) においてパスワードを安全な形で暗号化できる方式は Data Encryption Standard (DES) に基づいたものだけでした。DES のソースコードを米国外に輸出することはできないという問題があったため、 FreeBSD は、米国の法律を守ることと、 未だに DES を使っていた他の UNIX(R) 一族との互換性を保つこととを両立する方法を探し出す必要がありました。 その解決方法は、DES よりも安全であると考えられている MD5 を使うことでした。 +さらに、net.inet.icmp.drop_redirect および net.inet.ip.redirect も設定すべきです。 これら 2 つの man:sysctl[8] は、リダイレクト攻撃を防ぐ助けとなるでしょう。 リダイレクト攻撃は、 故意に通常のネットワークでは必要としないような大量の ICMP タイプ 5 のパケットを発生します。 そのため net.inet.icmp.drop_redirect を "1"、 net.inet.ip.redirect を "0" に設定して下さい。 -=== 暗号化機構を理解する +ソースルーティングは、 内部ネットワーク上でルーティングできないアドレスを検出したりアクセスするための方法です。 通常ルーティングできないアドレスは、 意図してルーティングできないようにしているので、 この設定はおそらく無効にすべきです。 この機能を無効にするには、 net.inet.ip.sourceroute および net.inet.ip.accept_sourceroute を "0" に設定してください。 -現在では、ライブラリは DES, MD5, Blowfish, SHA256 および SHA512 ハッシュ関数に対応しています。FreeBSD がどの暗号化方式を使うようにセットアップされているかを判断するには、 [.filename]#/etc/master.passwd# の暗号化されたパスワードを調べてください。 MD5 ハッシュで暗号化されたパスワードは、DES ハッシュで暗号化されたパスワードよりも長く、 `$1$` という文字で始まるという特徴を持っています。 `$2a$` で始まるパスワードは、Blowfish ハッシュ関数で暗号化されています。 DES のパスワードはこれといって識別可能な特徴は持っていませんが、 MD5 のパスワードよりは短く、そして `$` という文字を含まない 64 文字のアルファベットを使って表現されているので、 比較的短い文字列でドル記号で始まっていないものはおそらく DES のパスワードでしょう。 SHA256 と SHA512 の場合は、`$6$` から始まります。 +ブロードキャストアドレスに対するすべての ICMP エコーリクエストは、ドロップしてください。 ネットワーク上のコンピュータがサブネットにあるすべてのホストにメッセージを送る必要がある場合には、 メッセージはブロードキャストアドレスに送られます。 外部のホストについては、 このような送信をする必要はないので、 外部からブロードキャストへのリクエストをすべて拒否するように、 net.inet.icmp.bmcastecho を "0" に設定してください。 -新規パスワードがどちらのパスワード形式になるかは、 [.filename]#/etc/login.conf# の中の `passwd_format` ログインケーパビリティによって制御されます。 その値としては、 `des`, `md5`, `blf`, `sha256` または `sha512` を設定することができます。 ログインケーパビリティに関するより詳細な情報は、 man:login.conf[5] をご覧ください。 +まだ多くの man:sysctl[8] が man:security[7] で説明されています。 さらに多くの情報を調べることが推奨されます。 [[one-time-passwords]] == ワンタイムパスワード デフォルトで、FreeBSD は One-time Passwords In Everything (OPIE) に対応しています。 OPIE はデフォルトでは MD5 ハッシュを使用します。 三種類の異なる「パスワード」があります。 まず一つ目は、通常の UNIX(R) スタイル、もしくは Kerberos のパスワードです。 二つ目は、man:opiekey[1] によって生成され、 man:opiepasswd[1] およびログインプロンプトが受け付けるワンタイムパスワードです。 三つ目のパスワードは、man:opiekey[1] と場合により `opiepasswd` に対してワンタイムパスワードを生成するのに使われる "秘密のパスワード" です。 秘密のパスワードは、UNIX(R) パスワードと何の関連性もありません。 両者を同一に設定することは可能ですが、お奨めしません。古い UNIX(R) パスワードは長さが 8 文字に制限されていました 。 これに対し、OPIE の秘密のパスワードには 8 文字の制限はありません。 6 語から 7 語からなるパスフレーズがふつうです。ほとんどの部分で、 OPIE システムは UNIX(R) のパスワードシステムと完全に独立して動作するようになっています。 パスフレーズに加え、OPIE システムにとって重要な 2 種類のデータがあります。一つは "シード (seed: 種)" または "キー (key: 鍵)" と呼ばれるもので、2 つの文字と 5 つの数字で構成されます。もう一つは "シーケンス番号 (iteration count)" で、1 から 100 までの整数です。 OPIE はここまでに述べたデータを利用してワンタイムパスワードを生成します。 その方法は、まずシードと秘密のパスフレーズを連結し、 それに対してシーケンス番号の回数だけ MD5 ハッシュを繰り返し計算します。 そしてその結果を 6 つの短い英単語に変換します。 この 6 つの英単語がワンタイムパスワードです。 認証システム (主は PAM) は、 前回最後に受け付けたワンタイムパスワードを記録しています。 そして、その前回のワンタイムパスワードと、 ユーザが入力したワンタイムパスワードを 1 回ハッシュ関数にかけた結果とが一致した場合に、 このユーザは認証されます。 一方向ハッシュ関数を使っているので、 もし正しく認証されたワンタイムパスワードが一回盗聴されたとしても、 次回以降に使われる複数のワンタイムパスワードを生成することは不可能です。 シーケンス番号はログインが成功するたびに一つずつ減らされて、 ユーザとログインプログラムの間で同期が取られます。 シーケンス番号が 1 まで減ったら、 OPIE を再度初期化する必要があります。 このプロセスに関連するいくつかのプログラムがあります。 man:opiekey[1] は、シーケンス番号と、シードと、 秘密のパスフレーズを受け付けて、ワンタイムパスワード 1 つ、 または一連のワンタイムパスワードの一覧を生成します。 man:opiepasswd[1] は、OPIE の初期化に加え、パスワード、 シーケンス番号やシードを変更するためにも使用されます。 このプログラムを実行するには、秘密のパスフレーズか、 または、シーケンス番号とシードとワンタイムパスワードの 1 組かの、どちらかを与えます。 man:opieinfo[1] は、 認証ファイル ([.filename]#/etc/opiekeys#) を調べて、 プログラムを起動したユーザの現在のシーケンス番号とシードを表示します。 4 種類の異なる操作があります。 1 つ目は、man:opiepasswd[1] を信頼できる通信路上で利用して、 最初にワンタイムパスワードを設定したり、 秘密のパスフレーズやシードを変更する操作です。 2 つ目は、同じことを行うために man:opiepasswd[1] を信頼できない通信路上で利用する操作です。 この場合は信頼できる通信路経由の man:opiekey[1] を併用します。3 つ目は、man:opiekey[1] を使い、信頼できない通信路を通じてログインする操作です。 4 番目は、man:opiekey[1] を使って複数のワンタイムパスワードを一気に生成する操作です。 ここで生成した複数のワンタイムパスワードは、 メモしたり印刷したりして携帯し、 信頼できる通信路が一切ないところからの接続に利用できます。 (訳注: ワンタイムパスワードを記録した紙をなくさないこと! 電話番号や IP アドレス、ユーザ名を一緒にメモしていたら最悪です!!) === 信頼できる通信路での初期化 OPIE を初めて初期化するには、 man:opiepasswd[1] を実行してください。 [source,bash] .... % opiepasswd -c [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED .... `Enter new secret pass phrase:` または `Enter secret password:` というプロンプトに対して、 パスワードまたはパスフレーズを入力してください。 このパスワードは、 ログインするときに使うワンタイムパスワードを生成するために使うものであり、 ログインのためのパスワードではありません。 "ID" から始まる行は、1 回分のパラメータで、 ログイン名とシーケンス番号とシードです。 ログインするときには、 システム側がこれらのパラメータを覚えていて表示してくれるので、 これらのパラメータを覚えておく必要はありません。 最後の行が、今述べたパラメータと入力された秘密のパスワードから計算されたワンタイムパスワードです。 次にログインするときに打ち込むべきワンタイムパスワードがこれです。 === 信頼できない通信路での初期化 信頼できない通信路を使って秘密のパスフレーズを初期化または変更するためには、 man:opiekey[1] を実行するための信頼できる通信路を用意しておく必要があります。 たとえばそれは、 信頼できるマシンのシェルプロンプトだったりするでしょう。 (訳注: ここでの通信路とはマシンそのものになります。 信頼できるマシンとは、 信頼できる人がしっかり管理しているマシンということです)。 他に準備しておくものとして、シーケンス番号 (100 は適切な値といえるでしょう) と、場合によっては自分で考えた、 またはランダムに生成されたシードがあります。 信頼できない通信路を使うときには、man:opiepasswd[1] を使ってコンピュータを初期化してください。 [source,bash] .... % opiepasswd Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY .... デフォルトのシードで構わなければ、kbd:[Return] を押してください。アクセスパスワードを入れる前に、 あらかじめ用意しておいた信頼できる通信路へ移って、 先ほどと同じパラメータを入力します。 [source,bash] .... % opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Do not use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT .... 信頼できない通信路の方に戻って、 生成されたワンタイムパスワードをコピーして対応するプログラムに入力します。 === ワンタイムパスワードを一つ生成する OPIE を初期化したら、 ログイン時には以下のようなプロンプトが出てくるでしょう。 [source,bash] .... % telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <ユーザ名> otp-md5 498 gr4269 ext Password: .... OPIE のプロンプトには便利な機能が備わっています。 パスワードプロンプトに対して、 kbd:[Return] を押すとエコーモードに切り替わり、 タイプした文字がそのまま見えるようになるのです。 これは、 紙に印刷していたりするワンタイムパスワードを手で入力しなければならない場合に役立つ機能です。 次に、 このログインプロンプトに対して入力するワンタイムパスワードを生成してください。 これは、man:opiekey[1] プログラムを使える信頼できるマシン上で行わなければなりません。 このプログラムには Windows(R), Mac OS(R) および FreeBSD 版があります。 どちらも、 コマンドラインからシーケンス番号とシードを指定しなければなりません。 ログインしようとしているマシンのログインプロンプトから直接カットアンドペーストすると楽でしょう。 信頼できるシステムで [source,bash] .... % opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Do not use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT .... ワンタイムパスワードが生成されたので、 ログインを続けてください。 === 複数のワンタイムパスワードを生成する 都合によっては、 信頼できるマシンや信頼できる通信路が一切確保できないようなことがあるでしょう。 このような場合には、man:opiekey[1] を使って複数のワンタイムパスワードを生成できます。 たとえば [source,bash] .... % opiekey -n 5 30 zz99999 Using the MD5 algorithm to compute response. Reminder: Do not use opiekey from telnet or dial-in sessions. Enter secret pass phrase: 26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI .... `-n 5` という引数によって 5 個のワンタイムパスワードを順に生成します。 また `30` は、 最後のシーケンス番号となるべき数字です。出力は使う順番とは _逆_ に出力されていることに注意してください (訳注: 一番最初に使うワンタイムパスワードは一番最後に出力されたものです)。 もしあなたがセキュリティに偏執するなら、 この結果を紙と鉛筆を使って手で書き移した方がよいかもしれません。 そうでなければ、この結果を印刷すると良いでしょう。 ここで、 出力の各行はシーケンス番号とそれに対応する一回分のワンタイムパスワードです。 消費済みのワンタイムパスワードをペンで消していってください。 === UNIX(R) パスワードの利用を制限する OPIE は、ログインセッションの IP アドレスをベースとした UNIX(R) パスワードの使用を制限できます。 関連ファイルは、[.filename]#/etc/opieaccess# で、 デフォルトで用意されています。 このファイルの詳細や、 このファイルを使用する際に考慮すべきセキュリィについては man:opieaccess[5] を確認してください。 以下は [.filename]#opieaccess# の例です。 [.programlisting] .... permit 192.168.0.0 255.255.0.0 .... この行では、(なりすましされやすい) IP ソースアドレスが、 ある値やマスクにマッチするユーザに対して、 UNIX(R) パスワードをいつでも許可します。 もし [.filename]#opieaccess# のどのルールにも一致しなければ、 デフォルトでは非 OPIE ログインは使えません。 [[tcpwrappers]] == TCP Wrappers TCP Wrappers は、 すべてのサーバデーモンに対するサポートをその管理下で提供できるように、 crossref:advanced-networking[network-inetd,「inetd 「スーパサーバ」」] の機能を拡張します。 この方法を使うことで、ログへの対応、 接続に対してメッセージを返したり、 内部の接続だけを許可するようにデーモンを設定することが可能となります。 これらの機能のいくつかはファイアウォールでも実装できますが、 TCP Wrappers は、 システムを守るためのレイヤを追加し、 ファイアウォールが提供する以上の管理機能を提供します。 TCP Wrappers は、 適切に設定されたファイアウォールの置き換えと考えるべきではありません。 TCP Wrappers は、 ファイアウォールや他のセキュリティ強化のツールと組み合わせて使うべきです。 === 初期設定 FreeBSD 上で TCP Wrappers を有効にするには、 [.filename]#rc.conf# から `-Ww` オプションで man:inetd[8] サーバが起動されることを確認してください。 その後、[.filename]#/etc/hosts.allow# を適切に設定してください。 [NOTE] ==== 他の TCP Wrappers の実装と異なり、 [.filename]#hosts.deny# は廃止されました。 すべての設定オプションは [.filename]#/etc/hosts.allow# に書かれている必要があります。 ==== 最も簡単な設定におけるデーモンの接続ポリシは、 [.filename]#/etc/hosts.allow# の中で、 オプションごとに許可またはブロックするように設定するというものです。 FreeBSD のデフォルトの設定では、man:inetd[8] から起動されたすべてのデーモンの接続を許可します。 基本的な設定は、通常 `daemon : address : action` という形式です。ここで、 `daemon` は、 man:inetd[8] が起動するデーモンの名前です。 `address` の部分は、有効なホスト名、 IP アドレスまたは、 括弧 ([ ]) で囲まれた IPv6 アドレスです。 `action` は、 `allow` または `deny` です。 TCP Wrappers は、 最初にマッチしたルールが適用されます。 これは、設定ファイルに対するルールにマッチするかどうかのスキャンは、 昇順に行われることを意味しています。 マッチすると、ルールが適用され、 検索のプロセスは終了します。 例として、POP3 の接続を package:mail/qpopper[] デーモン経由で許可するには、以下の行を [.filename]#hosts.allow# に追加してください。 [.programlisting] .... # This line is required for POP3 connections: qpopper : ALL : allow .... この行を追加したら、 man:inetd[8] を再起動してください。 [source,bash] .... # service inetd restart .... === 高度な設定 TCP Wrappers は、 接続を取り扱う以上の制御を行う高度な設定も提供しています。 ある時は、 接続しているホストまたはデーモンにコメントを返すことが適切であることがあります。 別の場合では、おそらくログエントリを記録したり、 管理者にメールで送る必要があることもあるでしょう。 またその他の状況としては、 サービスをローカルの接続のみの使用に制限する必要がある場合もあります。 これらはすべて、`ワイルドカード` と呼ばれる設定のオプション (拡張文字および外部コマンドの実行) で可能となります。 ==== 外部コマンド 接続は拒否しなければならないが、 その理由を接続の確立を試みた相手に送りたい状況を考えてください。 このアクションは、`twist` を使うことで実現可能です。 接続が試みられると、`twist` はシェルコマンドまたはスクリプトを実行します。 この場合の例は、 [.filename]#hosts.allow# に書かれています。 [.programlisting] .... # The rest of the daemons are protected. ALL : ALL \ : severity auth.info \ : twist /bin/echo "You are not welcome to use %d from %h." .... この例では、 "You are not allowed to use `daemon` from `hostname`." というメッセージを、 アクセスファイルの中で設定されていないすべてのデーモンに対して返します。 接続元に対し、 確立された接続が破棄された直後に返答することは有効です。 返信に使われるメッセージは、引用符 (`"`) で囲む _必要_ があります。 [WARNING] ==== - 攻撃者や攻撃者のグループは、 これらのデーモンの接続のリクエストであふれさせることにより、 サーバに対して DoS 攻撃を仕掛けることができます。 ==== 他の可能性は `spawn` を使うことです。 `twist` と同様に、 `spawn` は、暗黙のうちに接続を拒否し、 外部のシェルコマンドやスクリプトを実行できます。 `twist` と異なり、`spawn` は、 接続を確立した相手に対し、返事を返すことはありません。 たとえば、以下のような設定の行を考えてみてください。 [.programlisting] .... # We do not allow connections from example.com: ALL : .example.com \ - : spawn (/bin/echo %a from %h attempted to access %d \ + : spawn (/bin/echo %a from %h attempted to access %d >> \ /var/log/connections.log) \ : deny .... この行は、`*.example.com` からの接続をすべて拒否します。 ホスト名、IP アドレスおよびアクセスを試みたデーモンが、 [.filename]#/var/log/connections.log# に記録されます。 この例では、置換文字 `%a` および `%h` が使われています。 置換文字の完全な一覧は man:hosts_access[5] をご覧ください。 ==== ワイルドカードオプション `ALL` オプションは、 デーモン、ドメインまたは IP アドレスのすべてのインスタンスのどれかにマッチするかどうかに使われます。 他のワイルドカードは、偽造された IP アドレスを提供するホストにマッチするかどうかに用いられる `PARANOID` です。 たとえば、`PARANOID` を使うことで、 ホスト名と異なる IP アドレスからの接続があった時のアクションを定義できます。 以下の例では、ホスト名から検索される IP アドレスと異なる IP アドレスを持つ man:sendmail[8] への接続のすべてのリクエストを拒否します。 [.programlisting] .... # Block possibly spoofed requests to sendmail: sendmail : PARANOID : deny .... [CAUTION] ==== - クライアントもしくはサーバの DNS の設定が間違っている場合に、 `PARANOID` ワイルドカードを使うと、 サーバがとても使いづらくなります。 管理者の慎重さが求められます。 ==== ワイルドカードおよび関連する機能についてもっと知りたい場合には、 man:hosts_access[5] をご覧ください。 上記の設定が動作するには、[.filename]#hosts.allow# の中で、 最初の設定の行がコメントアウトされている必要があります。 [[kerberos5]] == Kerberos5 Kerberos は、 サーバのサービスによってユーザが安全に認証を受けられるようにするための、 ネットワークの付加システムおよびプロトコルです。 Kerberos は、 身元確認プロキシシステムや、 信頼される第 3 者認証システムとも説明されます。 ユーザが Kerberos を使って認証を行った後は、 通信は暗号化され、 プライバシおよびデータの完全性を保証することができます。 Kerberos の唯一の機能は、 ネットワーク上のユーザの安全な認証を提供することです。 承認 (どのユーザが許可されているか) や監査 (ユーザがどのような作業を行っているか) の機能は提供しません。 Kerberos を使う際は、 承認および監査サービスを提供する他のセキュリティの手段との利用が、 推奨されます。 この節では、FreeBSD 用として配布されている Kerberos をセットアップする際のガイドを提供します。 完全な説明が必要な場合には、 マニュアルページを参照してください。 この節における Kerberos のインストールのデモでは、以下のような名前空間が使われます。 * DNS ドメイン ("ゾーン") は、 `example.org` です。 * Kerberos の領域は、 `EXAMPLE.ORG` です。 [NOTE] ==== Kerberos の設定では、 内部での使用でも実際のドメイン名を使ってください。 DNS の問題を避けることができ、 他の Kerberos のレルム (realm) との相互運用を保証します。 ==== === 歴史 Kerberos は、 ネットワークのセキュリティ問題を解決するために、 MIT で開発されました。 Kerberos プロトコルは、 必ずしも安全ではないインターネット接続においても、 サーバに対して (逆もまた同様に)、 強い暗号を使って身元を証明します。 Kerberos は、 ネットワーク認証プロトコルの名前であり、 Kerberos telnet のように、 このプログラムを実装しているプログラムを表すための形容詞でもあります。 プロトコルの現在のバージョンはバージョン 5 で、 RFC 1510 として文書化されています。 このプロトコルのいくつものフリーの実装が、 さまざまなオペレーティングシステムで利用できます。 最初の Kerberos を開発したマサチューセッツ工科大学 (MIT) は、 開発した Kerberos パッケージを継続的に保守しています。 アメリカ合衆国では暗号製品として良く使われていますが、 歴史的には、 アメリカ合衆国 の輸出規制により制限されてきました。 MIT で実装された Kerberos は、 package:security/krb5[] package または port から利用できます。 バージョン 5 のもう一つの実装が、 Heimdal Kerberos です。 この実装は、アメリカ合衆国の外で開発されたため、 輸出の制限を避けることができます。 Heimdal Kerberos は package:security/heimdal[]> package または port からインストールできますが、最小構成は FreeBSD の base インストールに含まれています。 以下の説明では FreeBSD に含まれている Heimdal ディストリビューションの使用を想定しています。 === Heimdal KDC の設定 鍵配布センター (KDC) は、 Kerberos が提供する中心的な認証サービスで、 Kerberos チケットを発行するコンピュータです。 KDC は、 Kerberos のレルムの中のすべてのコンピュータから "信頼"されています。 そのため、厳重なセキュリティに対する配慮が必要となります。 Kerberos サーバの実行にコンピュータのリソースはほとんど必要ありませんが、 セキュリティの観点から、KDC としてのみ機能する専用のコンピュータが推奨されます。 KDC を設定するにあたって、 KDC として動作するために、 適切に [.filename]#/etc/rc.conf# が設定されていることを確認してください。 必要に応じて、 システムの設定を反映するようにパスを調整する必要があります。 [.programlisting] .... kerberos5_server_enable="YES" kadmind5_server_enable="YES" .... 次に、[.filename]#/etc/krb5.conf# を以下のように編集してください。 [.programlisting] .... [libdefaults] default_realm = EXAMPLE.ORG [realms] EXAMPLE.ORG = { kdc = kerberos.example.org admin_server = kerberos.example.org } [domain_realm] .example.org = EXAMPLE.ORG .... [.filename]#/etc/krb5.conf# の中で、 KDC は、 完全修飾されたホスト名 `kerberos.example.org` を使うことが想定されています。 KDC が異なるホスト名を持つ場合には、 名前の解決が行われるように、適切に CNAME (エイリアス) エントリをゾーンファイルに追加してください。 [NOTE] ==== 適切に DNS サーバが設定されている大きなネットワークでは、 上記の例は、以下のように整理されます。 [.programlisting] .... [libdefaults] default_realm = EXAMPLE.ORG .... そして、`example.org` ゾーンファイルには、以下の行が付け加えられます。 [.programlisting] .... _kerberos._udp IN SRV 01 00 88 kerberos.example.org. _kerberos._tcp IN SRV 01 00 88 kerberos.example.org. _kpasswd._udp IN SRV 01 00 464 kerberos.example.org. _kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org. _kerberos IN TXT EXAMPLE.ORG .... ==== [NOTE] ==== クライアントが、 Kerberos サービスを見つけるためには、 [.filename]#/etc/krb5.conf# を完全に設定するか、 [.filename]#/etc/krb5.conf# を最低限に設定し、 _さらに_ DNS サーバを適切に設定する _必要_ があります。 ==== 次に Kerberos データベースを作成してください。 このデータベースには、 マスター鍵により暗号化されたすべてのプリンシパルの鍵が含まれています。 このパスワードは、 [.filename]#/var/heimdal/m-key# に保存されるため、 覚える必要はありません。 マスター鍵を作成するには、man:kstash[8] を実行して、 パスワードを入力してください。 マスター鍵を作成したら、`kadmin -l` を使ってデータベースを初期化してください。 このオプションを使うと、man:kadmin[8] は、 man:kadmind[8] ネットワークサービスを使わず、 ローカルのデータベースファイルを直接変更します。 これにより、 データベースを作成する前に、データベースへの接続を試みてしまうという、 卵が先か鶏が先かという問題を回避できます。 man:kadmin[8] プロンプトで、 `init` を使って、 レルムに関する初期のデータベースを作成してください。 最後に、man:kadmin[8] プロンプトで `add` を使って最初のプリンシパルを作成して下さい。 差し当たりは、 プリンシパルに対するデフォルトのオプションに従ってください。 後で `modify` を使うことで、 変更することができます。 man:kadmin[8] プロンプトで `?` と入力すると、 利用可能なオプションを確認できます。 データベース作成のセッションの例は以下のようになります。 [source,bash] .... # kstash Master key: xxxxxxxx Verifying password - Master key: xxxxxxxx # kadmin -l kadmin> init EXAMPLE.ORG Realm max ticket life [unlimited]: kadmin> add tillman Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: Password: xxxxxxxx Verifying password - Password: xxxxxxxx .... 次に KDC サービスを起動してください。 `service kerberos start` および `service kadmind start` を実行してサービスを起動してください。 この時点で、kerberos 化されたデーモンが走っていなくても、 KDC のコマンドラインから、作成したばかりの (ユーザ) プリンシパルのチケットを入手したり、 一覧を表示することができることを確認できます。 [source,bash] .... % kinit tillman tillman@EXAMPLE.ORG's Password: % klist Credentials cache: FILE:/tmp/krb5cc_500 Principal: tillman@EXAMPLE.ORG Issued Expires Principal Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG .... 必要がなくなった時には、チケットを破棄できます。 [source,bash] .... % kdestroy .... === Heimdal Kerberos サービスを有効にする。 最初に [.filename]#/etc/krb5.conf# を KDC からクライアントコンピュータへ、 man:scp[1] または物理的にリムーバブルディスクを使うといった安全な方法でコピーしてください。 次に [.filename]#/etc/krb5.keytab# を作成してください。 これが Kerberos 化されたデーモンを提供するサーバとワークステーションの間での大きな違いです: サーバには [.filename]#keytab# が置かれている必要があります。 このファイルには、サーバのホスト鍵が含まれています。 この鍵により、ホストおよび KDC が他の身元の検証ができます。 鍵が公開されてしまうと、 サーバのセキュリティが破られてしまうため、 このファイルは安全にサーバに転送しなければなりません。 一般的には、man:kadmin[8] を使って、 [.filename]#keytab# をサーバに転送します。 ホストプリンシパル (KDC 側の [.filename]#krb5.keytab#) も man:kadmin[8] を使って作成するので便利です。 すでにチケットを入手し、そのチケットは、 man:kadmin[8] インタフェースで使用できることが [.filename]#kadmind.acl# で許可されている必要があります。 アクセスコントロールリストの設計の詳細については、 `info heimdal` の "Remote administration" というタイトルの章をご覧ください。 リモートからの `kadmin` アクセスを有効にする代わりに、 管理者は、ローカルコンソールまたは man:ssh[1] を用いて安全に KDC に接続し、 `kadmin -l` を使用して、 ローカルで管理作業を行うことができます。 [.filename]#/etc/krb5.conf# をインストールしたら、 Kerberos サーバから `add --random-key` を使ってください。 このコマンドは、サーバのホストプリンシパルを追加します。 そして、`ext` を用いて、 サーバのホストプリンシパルを keytab に抽出してください。 以下は、使用例です。 [source,bash] .... # kadmin kadmin> add --random-key host/myserver.example.org Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: kadmin> ext host/myserver.example.org kadmin> exit .... `ext` は、デフォルトでは、抽出された鍵を [.filename]#/etc/krb5.keytab# に保存します。 KDC 上で man:kadmind[8] を走らせていない場合で、 リモートから man:kadmin[8] に接続出来ない場合には、 ホストプリンシパル (`host/myserver.EXAMPLE.ORG`) を直接 KDC 上で追加し、 その後、以下のように KDC 上の [.filename]#/etc/krb5.keytab# の上書きを避けるため、 一時ファイルに抽出してください。 [source,bash] .... # kadmin kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org kadmin> exit .... その後、man:scp[1] またはリムーバブルディスクを使って、 keytab を安全にサーバコンピュータにコピーしてください。 KDC 上の keytab を上書きすることを避けるため、 デフォルトとは異なる名前を指定してください。 これでサーバは、 [.filename]#krb5.conf# を使って KDC と通信ができるようになりました。 そして、[.filename]#krb5.keytab# によって身元を証明できるようになったので、 Kerberos サービスを有効にする準備が出来ました。 この例では、 man:telnetd[8] サービスが [.filename]#/etc/inetd.conf# で有効に設定され、 `service inetd restart` によって、 man:inetd[8] サービスを再起動します。 [.programlisting] .... telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user .... 重要な変更箇所は、`-a` 認証がユーザに設定されていることです。 詳細については、 man:telnetd[8] を参照してください。 === Heimdal Kerberos クライアントを有効にする クライアントコンピュータの設定は簡単です。 [.filename]#/etc/krb5.conf# のみが必要です。 このファイルをセキュリティ的に安全な方法で、KDC からクライアントコンピュータへコピーしてください。 クライアントから、man:kinit[1], man:klist[1] および man:kdestroy[1] を使用し、 上記で作成したプリンシパルに対するチケットの入手、表示、 削除を行い、クライアントコンピュータを試験してください。 Kerberos アプリケーションを使って Kerberos が有効なサーバに接続することもできるはずです。 もしうまく機能しない場合でも、チケットを入手できるのであれば、 問題はおそらくサーバにあり、 クライアントまたは KDC の問題ではないと考えられます。 Kerberos 化されたアプリケーションを試験する際には、 man:tcpdump[1] といったパケットスニファを使用して、 パスワードが平文で送られていないことを確認してください。 コア以外の さまざまな Kerberos クライアントアプリケーションが利用可能です。 FreeBSD の "最小" インストールでは、 インストールされる Kerberos 化された唯一のサービスは、man:telnetd[8] です。 Heimdal port は、 Kerberos 化されている man:ftpd[8], man:rshd[8], man:rcp[1], man:rlogind[8] および他のあまり一般的ではないプログラムをインストールします。 MIT port も、すべての Kerberos クライアントアプリケーションをインストールします。 === ユーザ設定ファイル: [.filename]#.k5login# および [.filename]#.k5users# レルムのユーザは、一般的には、 ローカルユーザアカウントに対応する Kerberos プリンシパルを持ちます。 しかしながら、時々 Kerberos プリンシパルに対応しないローカルユーザアカウントへのアクセスが必要となることがあります。 たとえば、 `tillman@EXAMPLE.ORG` が、ローカルユーザアカウント `webdevelopers` へのアクセスが必要となることがあります。そして、 他のプリンシパルが同じローカルアカウントにアクセスが必要になることもあります。 ユーザのホームディレクトリに置かれた [.filename]#.k5login# および [.filename]#.k5users# ファイルを使うことで、 この問題を解決出来ます。 たとえば、以下の行を含む [.filename]#.k5login# を `webdevelopers` のホームディレクトリに置くと、 一覧にある両方のプリンシパルは、 共有のパスワードを必要としなくても、 このアカウントにアクセス出来ます。 [source,bash] .... tillman@example.org jdoe@example.org .... [.filename]#.k5users# の詳細については、 man:ksu[1] を参照してください。 === Kerberos Tips, Tricks, およびトラブルシューティング * Heimdal または MITKerberos ports のどちらを使う場合でも、 `PATH` は、 Kerberos 版のクライアント アプリケーションが、 システムにあるアプリケーションより先に見つかるように設定されていることを確認してください。 * レルムにあるすべてのコンピュータの間で時刻が同期していないと、 認証に失敗してしまいます。 NTP を用いた、時刻の同期方法については、 crossref:advanced-networking[network-ntp,「NTP」] をご覧ください。 * MIT および Heimdal 間の運用は、 標準化されていない man:kadmin[8] を除けばうまく機能します。 * ホスト名が変更された場合は、 `host/` プリンシパルを変更し、keytab をアップデートする必要があります。 Apache の package:www/mod_auth_kerb[] で使われる `www/` プリンシパルのような特別な keytab エントリでも必要となります。 * レルムの中のすべてのホストは、DNS、 もしくは、最低限 [.filename]#/etc/hosts# において正引きおよび逆引き両方で名前解決できる必要があります。 CNAME は動作しますが、A および PTR レコードは、 正しく適切な位置に記述されている必要があります。 名前が解決できない場合のエラーメッセージは、 次の例のように、直感的に原因が分かるようなものではありません。 `Kerberos5 refuses authentication because Read req failed: Key table entry not found`. * KDC に対しクライアントとして振る舞うオペレーティングシステムの中には、 man:ksu[1] に対して、 `root` 権限に setuid を許可しないものがあります。 この設定では、 man:ksu[1] は動作しないことを意味します。 これは KDC のエラーではありません。 * MITKerberos において、 プリンシパルが、デフォルトの 10 時間を超えるチケットの有効期限としたい場合には、 man:kadmin[8] のプロンプトで `modify_principal` を使って、 対象のプリンシパルおよび `krbtgt` プリンシパル両方の有効期限の最大値を変更してください。 プリンシパルは、 `kinit -l` を使用して、 長い有効期限のチケットを要求できます。 * [NOTE] ==== トラブルシューティングのために、 KDC でパケットスニファを走らせ、 一方で、ワークステーションにおいて man:kinit[1] を実行すると、 man:kinit[1] を実行するやいなや、 パスワードを入力し終わる前でも、 Ticket Granting Ticket (TGT) が送られてきます。 これに関する説明は、以下の通りです。 Kerberos サーバは、 いかなる未承認のリクエストに対して、 自由に TGT を送信します。 しかしながら、すべての TGT は、 ユーザのパスワードから生成された鍵により、暗号化されています。 そのため、ユーザがパスワードを入力した時には、 パスワードは KDC には送られません。 その代わりこのパスワードは、man:kinit[1] がすでに入手した TGT の復号化に使われます。 もし、復号化の結果、 有効なチケットで有効なタイムスタンプの場合には、 ユーザは、有効な Kerberos クレデンシャルを持ちます。 このクレデンシャルには、 Kerberos サーバ自身の鍵により暗号化された実際の TGT とともに、将来 Kerberos サーバと安全な通信を確立するためのセッション鍵が含まれています。 この暗号の 2 番目のレイヤは、 Kerberos サーバが、 各 TGT の真偽の検証を可能にしている部分です。 ==== * たとえば一週間といった長い有効期限のチケットを使いたい場合で、 OpenSSH を使って、 チケットが保存されているコンピュータに接続しようとする場合は、 Kerberos `TicketCleanup` が [.filename]#sshd_config# において `no` と設定されているか、 チケットが、ログアウト時に削除されることを確認してください。 * ホストプリンシパルは長い有効期限のチケットを持つことができます。 もし、ユーザプリンシパルが 1 週間の有効期限を持ち、 接続しているホストが、9 時間の有効期限を持っている場合には、 ユーザキャッシュは有効期限が切れたホストプリンシパルを持つことになり、 想定したように、 チケットキャッシュが振る舞わないことが起こりえます。 -* man:kadmind[8] で説明されているような、 特定の問題のあるパスワードが使われることを避けるために [.filename]#krb5.dict# を設定する時には、 パスワードポリシが割り当てられたプリンシパルにのみ適用されることを覚えていてください。 [.filename]#krb5.dict# で使われている形式では、 一行に一つの文字列が置かれています。 [.filename]#/usr/shared/dict/words# にシンボリックリンクを作成することは、有効です。 +* man:kadmind[8] で説明されているような、 特定の問題のあるパスワードが使われることを避けるために [.filename]#krb5.dict# を設定する時には、 パスワードポリシが割り当てられたプリンシパルにのみ適用されることを覚えていてください。 [.filename]#krb5.dict# で使われている形式では、 一行に一つの文字列が置かれています。 [.filename]#/usr/share/dict/words# にシンボリックリンクを作成することは、有効です。 === MIT port との違いについて MIT と Heimdal 版の大きな違いは、 man:kadmin[8] に関連しています。 このプログラムは、異なる (ただし等価な) コマンド群を持ち、そして、 異なるプロトコルを使用します。 もし KDC に MIT を使用している場合には、 Heimdal 版の man:kadmin[8] を使って KDC をリモートから (逆も同様に) 管理できないことを意味しています。 クライアントアプリケーションでは、同じタスクを行う際に、 若干異なるコマンドラインのオプションが使われることもあります。 MIT Kerberos link:http://web.mit.edu/Kerberos/www/[ウェブサイト] に書かれているガイドに従うことが推奨されます。 path の問題について注意してください。 MIT port はデフォルトで [.filename]#/usr/local/# にインストールします。 そのため、もし `PATH` においてシステムのディレクトが最初に書かれている場合には、 MIT 版ではなく、"通常の" システムアプリケーションが起動してしまいます。 [NOTE] ==== -FreeBSD の MITpackage:security/krb5[] port において、 man:telnetd[8] および `klogind` 経由でのログインが奇妙な振る舞いをすることを理解するには、 port からインストールされる [.filename]#/usr/local/shared/doc/krb5/README.FreeBSD# を読んで下さい。 "incorrect permissions on cache file" の振る舞いを修正するには、 フォワードされたクレデンシャリングの所有権を適切に変更できるように、 `login.krb5` バイナリが認証に使われる必要があります。 +FreeBSD の MITpackage:security/krb5[] port において、 man:telnetd[8] および `klogind` 経由でのログインが奇妙な振る舞いをすることを理解するには、 port からインストールされる [.filename]#/usr/local/share/doc/krb5/README.FreeBSD# を読んで下さい。 "incorrect permissions on cache file" の振る舞いを修正するには、 フォワードされたクレデンシャリングの所有権を適切に変更できるように、 `login.krb5` バイナリが認証に使われる必要があります。 ==== [.filename]#rc.conf# を以下のように変更する必要もあります。 [.programlisting] .... kerberos5_server="/usr/local/sbin/krb5kdc" kadmind5_server="/usr/local/sbin/kadmind" kerberos5_server_flags="" kerberos5_server_enable="YES" kadmind5_server_enable="YES" .... これを行うのは、 MIT Kerberos のアプリケーションは、 [.filename]#/usr/local# 構造の下にインストールされるためです。 === Kerberos で見つかった制限を緩和する ==== Kerberos は、All or Nothing アプローチです。 ネットワーク上で有効なすべてのサービスは、 Kerberos 化されるか、 または、ネットワーク攻撃に対して安全であるべきです。 さもないと、ユーザのクレデンシャルが盗まれ、 利用されることが起きるかもしれません。 この例は、 Kerberos 化されたすべてのリモートシェルです。 パスワードを平文で送るような POP3 メールサーバは変換していません。 ==== Kerberos は、 シングルユーザのワークステーションでの使用を想定しています。 マルチユーザの環境では、 Kerberos は安全ではありません。 チケットは [.filename]#/tmp# に保管され、 このチケットは、すべてのユーザが読むことができるためです。 もし、ユーザがコンピュータを他のユーザと同時に共有していると、 他のユーザは、そのユーザのチケットを盗んだり、 コピーが出来てしまいます。 この問題は、`-c` コマンドラインオプションまたは、好ましくは `KRB5CCNAME` 環境変数によって克服されます。 この問題への対応には、 チケットをユーザのホームディレクトリに保存し、 ファイルの許可属性を設定することが一般的に行われます。 ==== KDC は、単一障害点である 設計上、KDC は、 マスターパスワードのデータベースと同様に安全である必要があります。 KDC では、 絶対に他のサービスを走らせるべきではありませんし、 物理的に安全であるべきです。 Kerberos は、 KDC 上で、ファイルとして保存されている同じ "マスター" 鍵で暗号化されたすべてのパスワードを保存しているので、 非常に危険です。 マスター鍵が漏洩しても、 懸念するほど悪いことにはなりません。 マスター鍵は、Kerberos データベースの暗号時にのみ、 乱数を生成するためのシードとして使われます。 KDC へのアクセスが安全である限りにおいては、 マスター鍵を用いて、それほど多くのことはできません。 さらに、KDC が利用できないと、 認証ができないため、ネットワークサービスを利用できなくなります。 この攻撃による被害は、 ひとつのマスタ KDC とひとつまたはそれ以上のスレーブ、 そして、セカンダリもしくは PAM を用いたフォールバック認証を注意深く実装することにより軽減できます。 ==== Kerberos の欠点 Kerberos は、 ユーザ、ホストおよびサービスの間での認証を可能にしますが、 KDC とユーザ、 ホストまたはサービスとの間の認証のメカニズムは提供しません。 これは、トロイの木馬の man:kinit[1] が、 すべてのユーザ名とパスワードを記録できることを意味しています。 package:security/tripwire[] のような、ファイルシステムの完全性を確認するためのツールにより、 この危険性を軽減することができます。 +=== Kerberos および man:ssh[1] を用いたアクセスの問題 + +Kerberos と man:ssh[1] を使う場合には、 両者に関して知っておかねばならない問題がいくつかあります。 Kerberos は大変優れた認証プロトコルですが、Kerberos 化された man:telnet[1] および man:rlogin[1] には、 バイナリストリームを扱うのに不向きになるようなバグがあります。 デフォルトでは、Kerberos は `-x` を使わない限りセッションを暗号化してくれません。 一方 man:ssh[1] では、 デフォルトですべてを暗号化してくれます。 + +man:ssh[1] はとても良く動作しますが、 デフォルトで暗号鍵を転送してしまいます。 このため、man:ssh[1] を安全なワークステーションから、 安全でないマシンへのアクセスに使っているユーザに、 セキュリティリスクを引き起こします。 鍵そのものが見えてしまうわけではありませんが、 man:ssh[1] は login している間、転送用ポートを作ります。 攻撃者が安全でないマシンの `root` を破ったら、 このポートを使って、 この暗号鍵でロックが外れる他のマシンへのアクセスを得てしまいます。 + +可能な時はいつでも、スタッフのログインには Kerberos を組み合せた man:ssh[1] を使用することを勧めます。 man:ssh[1] は、Kerberos 対応機能と一緒にコンパイルできます。 このようにすることで、見えてしまう可能性のある SSH 鍵への依存を減らし、 一方で、Kerberos 経由によりパスワードが保護されます。 鍵は、安全なマシンからの自動化されたタスクのみに使用すべきです。 Kerberos はこの用途には不向きです。 また、SSH の設定で鍵転送をしないようにするか、 あるいは [.filename]#authorized_keys# の `from=IP/DOMAIN` を使用して、 特定のマシンからログインしてきたときのみ鍵が有効にすることをお勧めします。 + === リソースおよび他の情報源 -* http://www.faqs.org/faqs/Kerberos-faq/general/preamble.html[ The Kerberos FAQ] +* http://www.faqs.org/faqs/Kerberos-faq/general/preamble.html[The Kerberos FAQ] * http://web.mit.edu/Kerberos/www/dialogue.html[Designing an Authentication System: a Dialog in Four Scenes] * http://www.ietf.org/rfc/rfc1510.txt?number=1510[RFC 1510, The Kerberos Network Authentication Service (V5)] * http://web.mit.edu/Kerberos/www/[MIT Kerberos home page] * http://www.pdc.kth.se/heimdal/[Heimdal Kerberos home page] [[openssl]] == OpenSSL FreeBSD には、OpenSSL ツールキットが含まれています。 OpenSSL は、 通常の通信層の上位にあるトランスポート層を暗号化し、 多くのネットワークアプリケーションおよびサービスと組み合わせて使用できます。 OpenSSL は、 メールクライアントの暗号化された認証、 クレジットカードでの支払いといったウェブベースの取引などで使われます。 package:www/apache22[] および package:mail/claws-mail[] といった多くの port では、 OpenSSL とともに構築するコンパイルに対応しています。 [NOTE] ==== 多くの場合、Ports Collection は、 make の `WITH_OPENSSL_BASE` が明示的に "yes" に設定されていないと、 package:security/openssl[] port の構築を試みます。 ==== FreeBSD に含まれている OpenSSL  のバージョンは、Secure Sockets Layer v2/v3 (SSLv2/SSLv3) および Transport Layer Security v1 (TLSv1) ネットワークセキュリティプロトコルに対応しており、 多目的な暗号化ライブラリとして使うことができます。 [NOTE] ==== OpenSSL は、 IDEA アルゴリズムに対応していますが、 合衆国の特許により、デフォルトでは無効になっています。 もし使用したいのであれば、ライセンス条項を必ず確認し、 ライセンス条項に合致するのであれば、 [.filename]#/etc/make.conf# において `MAKE_IDEA` 変数を設定してください。 ==== 最も一般的な OpenSSL の利用方法のひとつは、 ソフトウェアアプリケーションが使えるように証明書を提供することです。 これらの証明書により、会社または個人の公開鍵が、 改ざんやなりすましが行われていないことを確認できます。 もし問題となっている証明書が、"認証局" (CA) により検証されなければ、 警告が表示されます。 CA は、link:http://www.verisign.com[VeriSign] のような会社で、個人または会社の公開鍵の検証を行えるように、 証明書に署名を行います。 証明書を作成するには費用がかかり、 証明書の使用は必要条件ではありませんが、 証明書を使うことで、 ユーザを安心させることができます。 === 証明書の作成 以下のコマンドにより、証明書を作成できます。 [source,bash] .... # openssl req -new -nodes -out req.pem -keyout cert.pem Generating a 1024 bit RSA private key ................++++++ .......................................++++++ writing new private key to 'cert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:PA Locality Name (eg, city) []:Pittsburgh Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []:Systems Administrator Common Name (eg, YOUR name) []:localhost.example.org Email Address []:trhodes@FreeBSD.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:SOME PASSWORD An optional company name []:Another Name .... "Common Name" プロンプト直後に表示されているのは、 ドメイン名です。 このプロンプトでは、検証するサーバ名の入力が必要となります。 ドメイン名以外を入力すると、役に立たない証明書が作成されます。 他のオプションとして、有効期限を指定したり、 別の暗号化アルゴリズムを選択することができます。 オプションの完全なリストは、 man:openssl[1] で説明されています。 このコマンドを実行したディレクトリには、 2 つのファイルが作成されているはずです。 1 つは、証明書要求 [.filename]#req.pem# です。 このファイルを CA に送ると、 CA は含まれている内容を検証し、 検証に成功すると、証明書要求に署名を行い、 作成された証明書を送り返します。 もうひとつ、[.filename]#cert.pem# と呼ばれるファイルが生成されます。 これは証明書の秘密鍵であり、 どのようなことがあっても保護しなくてはなりません。 もし、他の人の手に渡ると、手に入れた人は、 ユーザまたはサーバになりすますことができてしまいます。 CA の署名が必要ない場合には、 自己署名証明書を作成できます。 最初に RSA の鍵を生成してください。 [source,bash] .... # openssl dsaparam -rand -genkey -out myRSA.key 1024 .... 次に、CA 鍵を生成してください。 [source,bash] .... # openssl gendsa -des3 -out myca.key myRSA.key .... この鍵を使って証明書を作成してください。 [source,bash] .... # openssl req -new -x509 -days 365 -key myca.key -out new.crt .... 新しく 2 つのファイルがこのディレクトリに作成されます。 プライベート鍵 [.filename]#myca.key# および 証明書 [.filename]#new.crt# です。 これらのファイルを、好ましくは [.filename]#/etc# 以下で、 `root` のみが読むことのできるディレクトリに置く必要があります。 許可属性は 0700 が適切です。 許可属性は man:chmod[1] を使って設定できます。 === 証明書の使用 証明書の一つの利用方法は、SendmailMTA への接続を暗号化することです。 これにより、 ローカルの MTA 経由でメールを送信するユーザが、 テキスト認証を使用しなくてもすむようになります。 [NOTE] ==== いくつかの MUA は、 ユーザが証明書をローカルにインストールしていないと、 エラーを出力します。 証明書のインストールに関する詳細な情報については、 ソフトウェアに付随の文書を参照してください。 ==== Sendmail を設定するには、以下の行をローカルの [.filename]#.mc# ファイルに含めてください。 [.programlisting] .... dnl SSL Options define(`confCACERT_PATH',`/etc/certs')dnl define(`confCACERT',`/etc/certs/new.crt')dnl define(`confSERVER_CERT',`/etc/certs/new.crt')dnl define(`confSERVER_KEY',`/etc/certs/myca.key')dnl define(`confTLS_SRV_OPTIONS', `V')dnl .... この例では、 ローカルで証明書および鍵ファイルは、ローカルの [.filename]#/etc/certs/# に置かれています。 ファイルの編集を保存し終わったら、 [.filename]#/etc/mail# において `make install` と入力することで、ローカルの [.filename]#.cf# ファイルを再構築する必要があります。 その後、`make restart` と入力して、Sendmail デーモンを再起動してください。 すべてがうまくいっていれば、 [.filename]#/var/log/maillog# にはエラーメッセージは出力されず、 Sendmail がプロセスの一覧に表示されます。 以下は簡単な試験の例で、man:telnet[1] を使って、 メールサーバに接続しています。 [source,bash] .... # telnet example.com 25 Trying 192.0.34.166... Connected to example.com Escape character is '^]'. 220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) ehlo example.com 250-example.com Hello example.com [192.0.34.166], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-STARTTLS 250-DELIVERBY 250 HELP quit 221 2.0.0 example.com closing connection Connection closed by foreign host. .... 出力に "STARTTLS" 行が表示されれば、 すべてが適切に機能しています。 [[ipsec]] == VPN over IPsec === IPsec を理解する この節では、IPsec を設定する過程を説明します。 IPsec を設定するためには、 カスタムカーネルの構築方法をよく知っている必要があります (crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] をご覧ください)。 _IPsec_ は、インターネットプロトコル (IP) レイヤのトップにあるプロトコルです。 二つもしくはそれ以上のホスト間で安全に通信することを可能にします。 FreeBSD の IPsec "ネットワークスタック" は、 IPv4 および IPv6 の両方に対応している http://www.kame.net/[KAME] 実装をベースとしています。 IPsec は二つのサブプロトコルから構成されます。 * _Encapsulated Security Payload (ESP)_: このプロトコルは、Blowfish, 3DES といった対称暗号アルゴリズムを使ってデータを暗号化することで、 サードパーティのインタフェースから IP パケットデータを保護します。 * _Authentication Header AH(AH)_: このプロトコルは、暗号チェックサムを計算し、IP パケットのヘッドフィールドを安全なハッシュ関数でハッシュ化することで、 IP パケットヘッダをサードパーティのインタフェースやなりすましから守ります。 ハッシュを含む追加のヘッダが追加され、 パケット情報の検証が可能になります。 ESP および AH は、使用する環境に合わせて、 一緒に使うことも別々に使うこともできます。 IPsec は、直接二つのホスト間のトラフィックを暗号化する _Transport Mode_、もしくは "virtual tunnels" を構築する _Tunnel Mode_ のどちらでも用いることができます。 後者のモードはより一般的には、 _Virtual Private Network (VPN)_ として知られています。 FreeBSD での IPsec サブシステムに関するより詳細な情報については、 man:ipsec[4] を参照してください。 カーネルに IPsec のサポートを追加するには、 カスタムカーネルコンフィグレーションファイルに以下のオプションを追加してください。 [source,bash] .... -options IPSEC IP security +options IPSEC #IP security device crypto .... IPsec のデバッグサポートが必要であれば、 以下のカーネルオプションを追加してください。 [source,bash] .... -options IPSEC_DEBUG debug for IP security +options IPSEC_DEBUG #debug for IP security .... === 家庭と会社間の VPN VPN の構成についての標準はありません。 VPN は、数多くの技術と共に実装することが可能です。 その各技術には、それ自身の長所と短所があります。 この節では、以下のシナリオに対して VPN を実装する戦略について説明します。 * 少なくとも 2 つのサイトがあり、 それぞれのサイトは内部で IP を使っています。 * 2 つのサイトは、FreeBSD で運用されているゲートウェイを通して、 インターネットに接続しています。 * それぞれのネットワークのゲートウェイは、 少なくとも一つのパブリック IP アドレスを持っています。 * 2 つのネットワークの内部アドレスは、 パブリックでもプライベート IP アドレスでも構いません。 しかしながら、アドレス空間は衝突してはいけません。 たとえば、両方のネットワークが `192.168.1.x` を使ってはいけません。 ==== FreeBSD 上で IPsec を設定する。 最初に Ports Collection から package:security/ipsec-tools[] をインストールしてください。 このソフトウェアは、 設定をサポートする数多くのアプリケーションを提供します。 次に、パケットをトンネリングし、 両方のネットワークが適切に通信するように、 2 つの man:gif[4] 疑似デバイスを作成します。 `root` 権限で以下のコマンドを実行してください。 ただし、実行する際には、以下のコマンドの中の _internal_ および _external_ を、 2 つのゲートウェイの内部および外部インタフェースの実際の IP アドレスに置き換えてください。 [source,bash] .... # ifconfig gif0 create .... [source,bash] .... # ifconfig gif0 internal1 internal2 .... [source,bash] .... # ifconfig gif0 tunnel external1 external2 .... この例では、会社の LAN の外部 IP アドレスを `172.16.5.4`、 内部 IP アドレスを `10.246.38.1` とします。また、家庭 LAN の外部 IP アドレスを `192.168.1.12`、 内部のプライベート IP アドレスを `10.0.0.5` とします。 この説明で分かりにくい場合は、以下の man:ifconfig[8] コマンドの出力例をご覧ください。 [.programlisting] .... Gateway 1: gif0: flags=8051 mtu 1280 -tunnel inet 172.16.5.4 -- 192.168.1.12 +tunnel inet 172.16.5.4 --> 192.168.1.12 inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6 -inet 10.246.38.1 -- 10.0.0.5 netmask 0xffffff00 +inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00 Gateway 2: gif0: flags=8051 mtu 1280 -tunnel inet 192.168.1.12 -- 172.16.5.4 -inet 10.0.0.5 -- 10.246.38.1 netmask 0xffffff00 +tunnel inet 192.168.1.12 --> 172.16.5.4 +inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00 inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4 .... 設定が完了したら、両方の内部 IP アドレスは、man:ping[8] で到達できるようになっているはずです。 [.programlisting] .... priv-net# ping 10.0.0.5 PING 10.0.0.5 (10.0.0.5): 56 data bytes 64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms 64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms 64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms 64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms --- 10.0.0.5 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms corp-net# ping 10.246.38.1 PING 10.246.38.1 (10.246.38.1): 56 data bytes 64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms 64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms 64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms 64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms 64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms --- 10.246.38.1 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms .... 予想通り、プライベートアドレスを使って、 両方のネットワークから ICMP パケットを送受信できます。 次に、どちらのネットワークからもメッセージを送信できるように、 パケットのルーティング情報を両方のゲートウェイに設定する必要があります。 これは以下のコマンドで設定できます。 [source,bash] .... # corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0 .... [source,bash] .... # corp-net# route add net 10.0.0.0: gateway 10.0.0.5 .... [source,bash] .... # priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0 .... [source,bash] .... # priv-net# route add host 10.246.38.0: gateway 10.246.38.1 .... これで、ネットワーク内のコンピュータは、 ゲートウェイおよびゲートウェイの奥のコンピュータから到達可能となっています。 もう一度 man:ping[8] で確認してください。 [.programlisting] .... corp-net# ping 10.0.0.8 PING 10.0.0.8 (10.0.0.8): 56 data bytes 64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms 64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms 64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms 64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms 64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms --- 10.0.0.8 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms priv-net# ping 10.246.38.107 PING 10.246.38.1 (10.246.38.107): 56 data bytes 64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms 64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms 64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms 64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms 64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms --- 10.246.38.107 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms .... トンネリングの設定は以上のように簡単ですが、 リンクを安全にするには、もう少し掘り下げた設定が必要となります。 以下の設定では、事前共有 (PSK) RSA 鍵を使います。 IP アドレスを除けば、両方のゲートウェイの [.filename]#/usr/local/etc/racoon/racoon.conf# は同じで、以下のようになります。 [.programlisting] .... path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file log debug; #log verbosity setting: set to 'notify' when testing and debugging is complete padding # options are not to be changed { maximum_length 20; randomize off; strict_check off; exclusive_tail off; } timer # timing options. change as needed { counter 5; interval 20 sec; persend 1; # natt_keepalive 15 sec; phase1 30 sec; phase2 15 sec; } listen # address [port] that racoon will listen on { isakmp 172.16.5.4 [500]; isakmp_natt 172.16.5.4 [4500]; } remote 192.168.1.12 [500] { exchange_mode main,aggressive; doi ipsec_doi; situation identity_only; my_identifier address 172.16.5.4; peers_identifier address 192.168.1.12; lifetime time 8 hour; passive off; proposal_check obey; # nat_traversal off; generate_policy off; proposal { encryption_algorithm blowfish; hash_algorithm md5; authentication_method pre_shared_key; lifetime time 30 sec; dh_group 1; } } sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp) { # $network must be the two internal networks you are joining. pfs_group 1; lifetime time 36000 sec; encryption_algorithm blowfish,3des,des; authentication_algorithm hmac_md5,hmac_sha1; compression_algorithm deflate; } .... 利用可能なオプションの説明については、 racoon のマニュアルページを参照してください。 FreeBSD および racoon がホスト間のネットワークトラフィックを暗号化、 復号化できるようにするには、 Security Policy Database (SPD) の設定が必要です。 これは、会社のゲートウェイ上で、 以下のようなシェルスクリプトで設定できます。 このファイルをシステムの初期化中に使われるようにするには、 [.filename]#/usr/local/etc/racoon/setkey.conf# に保存する必要があります。 [.programlisting] .... flush; spdflush; # To the home network spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use; spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use; .... 設定ファイルを適切に置くと、以下のコマンドにより、 両方のゲートウェイ上で racoon を起動できます。 [source,bash] .... # /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log .... 出力は以下のようになるでしょう。 [.programlisting] .... corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf Foreground mode. 2006-01-30 01:35:47: INFO: begin Identity Protection mode. 2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon 2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon n2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a 2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0] -2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]-172.16.5.4[0] spi=28496098(0x1b2d0e2) -2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]-192.168.1.12[0] spi=47784998(0x2d92426) +2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2) +2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426) 2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0] -2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]-172.16.5.4[0] spi=124397467(0x76a279b) -2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]-192.168.1.12[0] spi=175852902(0xa7b4d66) +2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b) +2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66) .... トンネリングが適切に行われているかどうかを確認するため、 別のコンソール上で man:tcpdump[1] を使い、 以下のようなコマンドでネットワークの通信を確認してください。 ただし、以下の例の `em0` の部分は、 必要に応じて使用しているネットワークインタフェースに置き換えてください。 [source,bash] .... # tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12 .... 以下のようなデータがコンソールに表示されます。 もし、表示されない場合は、設定に何か問題があるので、 表示されるデータを使ってデバッグする必要があります。 [.programlisting] .... -01:47:32.021683 IP corporatenetwork.com 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa) -01:47:33.022442 IP corporatenetwork.com 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb) -01:47:34.024218 IP corporatenetwork.com 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc) +01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa) +01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb) +01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc) .... これで 2 つのネットワークは、 1 つのネットワークのように利用できます。 多くの場合、 両方のネットワークはファイアウォールにより保護されています。 両方を流れる通信を許可するには、 パケットが両方を行き来できるようにルールを追加する必要があります。 man:ipfw[8] を使ったファイアウォールの場合は、 ファイアウォールの設定ファイルに、以下の行を追加してください。 [.programlisting] .... ipfw add 00201 allow log esp from any to any ipfw add 00202 allow log ah from any to any ipfw add 00203 allow log ipencap from any to any ipfw add 00204 allow log udp from any 500 to any .... [NOTE] ==== ルール番号は、 現在のホストの設定によっては変更する必要があるでしょう。 ==== man:pf[4] または man:ipf[8] を使用しているシステムでは、 以下のルールで上手くいくでしょう。 [.programlisting] .... pass in quick proto esp from any to any pass in quick proto ah from any to any pass in quick proto ipencap from any to any pass in quick proto udp from any port = 500 to any port = 500 pass in quick on gif0 from any to any pass out quick proto esp from any to any pass out quick proto ah from any to any pass out quick proto ipencap from any to any pass out quick proto udp from any port = 500 to any port = 500 pass out quick on gif0 from any to any .... 最後に、システムの初期化中に VPN が起動するように、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... ipsec_enable="YES" ipsec_program="/usr/local/sbin/setkey" ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot racoon_enable="yes" .... [[openssh]] == OpenSSH OpenSSH はリモートマシンへのセキュアなアクセスに使われるネットワーク接続ツールの集合です。 また、TCP/IP 接続を OpenSSH 接続経由でセキュアにトンネル/フォワードすることもできます。 OpenSSH はすべてのトラフィックを暗号化し、 盗聴や接続の乗っ取り等のネットワークレベルの攻撃を事実上無効化します。 OpenSSH は OpenBSD プロジェクトによって維持管理されており、 FreeBSD にはデフォルトでインストールされています。 OpenSSH は、 SSH バージョン 1 と 2 の両方に互換性があります。 === OpenSSH を使うことの利点 データがネットワークを平文で流れてしまうと、 ネットワークをクライアントとサーバの間のどこかで盗聴することで、 あなたのユーザ/パスワード情報やセション中を流れるデータを盗むことが可能です。 OpenSSH はこれらを予防する為にさまざまな認証と暗号化の方法を提供します。 === SSH サーバを有効にする man:sshd[8] が有効になっているかどうかを確認するには、 [.filename]#/etc/rc.conf# の以下の行を確認してください。 [.programlisting] .... sshd_enable="YES" .... この設定により、次のシステムの初期化時に OpenSSH のデーモンプログラムである man:sshd[8] が起動します。 もしくは man:service[8] を使って、すぐに OpenSSH を起動することもできます。 [source,bash] .... # service sshd start .... === SSH クライアント man:ssh[1] を使って、 man:sshd[8] が動いているシステムに接続するには、 ログインをするユーザ名とホストを指定してください。 [source,bash] .... # ssh user@example.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'example.com' added to the list of known hosts. user@example.com's password: ******* .... SSH はクライアントが接続した時、 サーバの信頼性の検証のために鍵指紋システム (key fingerprint system) を利用します。 初めての接続の際に、ユーザは `yes` と入力することを要求されます。 これ以降の login では保存されていた鍵指紋を照合することで検証が行われ、 man:ssh[1] クライアントは保存されていた鍵指紋が login しようとした際に送られてきたものと異なっていた場合には警告を表示します。 指紋は [.filename]#~/.ssh/known_hosts# に保存されます。 デフォルトでは、man:sshd[8] の最近の版では SSH v2 の接続のみを受け付けるように設定されています。 クライアントは可能であればバージョン 2 を用い、 バージョン 1 にフォールバックします。 クライアントは、プロトコル v1 と v2 についてそれぞれ、引数 `-1` または `-2` を渡すことで、利用するプロトコルを指定できます。 クライアントにおけるバージョン 1 への互換性は、 古いバージョンへの上位互換のために維持されています。 === Secure copy ローカルのファイルをリモートマシンへ、 あるいはリモートマシンのファイルをローカルに安全な方法でコピーするには、 man:scp[1] を使用してください。 [source,bash] .... # scp user@example.com:/COPYRIGHT COPYRIGHT user@example.com's password: ******* COPYRIGHT 100% |*****************************| 4735 00:00 # .... 前回の例でこのホストの指紋がすでに保存されていれば この man:scp[1] を使う時に検証が行なわれます。 -man:scp[1] に渡される引数は、man:cp[1] のものと似ており、コピーするファイル (1 つまたは複数) が 1 つめの引数になり、コピー先が 2 つめの引数になります。 ファイルはネットワーク越しに SSH 接続を通して送られるので、 引数に指定するファイルに `user@host:path_to_remote_file` という形式をとるものがあります。 +man:scp[1] に渡される引数は、man:cp[1] のものと似ており、コピーするファイル (1 つまたは複数) が 1 つめの引数になり、コピー先が 2 つめの引数になります。 ファイルはネットワーク越しに SSH 接続を通して送られるので、 引数に指定するファイルに `user@host:` という形式をとるものがあります。 === 設定 システム全体の設定ファイルは、OpenSSH デーモン、クライアントの両方とも [.filename]#/etc/ssh# にあります。 [.filename]#ssh_config# はクライアントの動作設定、 [.filename]#sshd_config# はデーモンの動作設定を行ないます。 それぞれのファイル毎にマニュアルページが用意されており、 利用可能な設定オプションについて説明されています。 [[security-ssh-keygen]] === man:ssh-keygen[1] パスワードの代わりに man:ssh-keygen[1] を使ってユーザの認証用の DSA または RSA 暗号鍵を作ることができます。 [source,bash] .... % ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): Created directory '/home/user/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com .... man:ssh-keygen[1] は認証に使う為の公開鍵と秘密鍵のペアを作ります。 DSA または RSA 鍵に応じて、 秘密鍵は [.filename]#~/.ssh/id_dsa# または [.filename]#~/.ssh/id_rsa# に保存され、 公開鍵は [.filename]#~/.ssh/id_dsa.pub# または [.filename]#~/.ssh/id_rsa.pub# にそれぞれ保存されます。 公開鍵はセットアップのために、 DSA または RSA のどちらを使う場合にも、 リモートマシンの [.filename]#~/.ssh/authorized_keys# に含まれてなければなりません。 この設定により、パスワードに代わり、 SSH 鍵を使ってリモートマシンに接続できるようになります。 [WARNING] ==== - 多くのユーザは、鍵が設計上安全と信じ、 パスフレーズなしに鍵を利用しています。 このような使用方法は _危険_ です。 管理者が鍵にパスフレーズが設定されているかを確認する方法は、 手動で鍵を調べる方法です。 秘密鍵のファイルに `ENCRYPTED` という単語が含まれている場合には、 鍵の所有者は、パスフレーズを使用しています。 弱いパスフレーズが使われている間、 少なくともシステムが危険にさらされているときには、 他のサイトへのアクセスには、 あるレベルでのパスワード類推が必要となります。 さらに、公開鍵ファイルに `from` を含めることで、 エンドユーザをより安全にできます。 たとえば、 `ssh-rsa` または `rsa-dsa` の前に、 `from="192.168.10.5` を加えることで、 この IP を持つホストからのユーザのみがアクセスできるようになります。 ==== man:ssh-keygen[1] でパスフレーズを使っている場合は、 秘密鍵を使うためにユーザは毎回パスフレーズを入力する必要があります。 長いパスフレーズを毎回入力しなくてはならない負担は、 man:ssh-agent[1] を使うと軽減できます。 これについては、 <> で説明されています。 [WARNING] ==== - OpenSSH のバージョンによって、 オプションやファイルに違いが出てくることがあります。 man:ssh-keygen[1] を参照して、 問題が起こることを避けてください。 ==== [[security-ssh-agent]] === SSH Agent による鍵のキャッシュ パスフレーズを毎回入力することなしに、 SSH 鍵を利用できるようにメモリに読み込むには、 man:ssh-agent[1] および man:ssh-add[1] を使用してください。 man:ssh-agent[1] は、 読み込まれた秘密鍵による認証を取り扱います。 man:ssh-agent[1] は他のアプリケーションの起動に用いられる必要があります。 基本的なレベルではシェル、 またはウィンドウマネージャを起動します。 シェル上で man:ssh-agent[1] を使うには、 引数としてシェルを起動してください。 次に、man:ssh-add[1] を実行し、 秘密鍵のパスフレーズを入力することにより、 鍵を追加してください。 一度この過程を終えてしまえば、ユーザは、 対応する公開鍵が置かれているホストに man:ssh[1] でログインできるようになります。 以下はその例です。 [source,bash] .... % ssh-agent csh % ssh-add Enter passphrase for /home/user/.ssh/id_dsa: Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) % .... Xorg 上で man:ssh-agent[1] を使うには、 man:ssh-agent[1] への呼び出しが [.filename]#~/.xinitrc# に置かれている必要があります。 これにより、Xorg 上で起動されるすべてのプログラムにおいて、 man:ssh-agent[1] サービスが提供されるようになります。 [.filename]#~/.xinitrc# の例は以下となります。 [.programlisting] .... exec ssh-agent startxfce4 .... これで、Xorg を開始するときにはいつでも man:ssh-agent[1] が起動され、 このプログラムから XFCE が起動されます。 Xorg を再起動した後は有効になりますので、 man:ssh-add[1] を実行して、 すべての SSH 鍵を読み込ませてください。 [[security-ssh-tunneling]] === SSH トンネリング OpenSSH は暗号化されたセッションの中に他のプロトコルをカプセル化するトンネルを作ることができます。 以下のコマンドは man:ssh[1] で man:telnet[1] 用のトンネルを作成します。 [source,bash] .... % ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com % .... この例では、以下のオプションを使っています。 `-2`:: サーバへの接続に man:ssh[1] バージョン 2 を使うことを指示します。 `-N`:: はトンネルだけでコマンドはないことを示します。 省略されると man:ssh[1] は通常のセッションを開始します。 `-f`:: man:ssh[1] にバックグラウンド実行を強制します。 `-L`:: ローカルトンネルを _localport:remotehost:remoteport_ という形式で指定します。 `user@foo.example.com`:: 指定したリモート SSH サーバへログインに用いるログイン名。 SSH のトンネルは `localhost` の指定されたポートに listen するソケットを作ることで実現されています。 SSH はローカルのホスト/ポートで受けた接続すべてを SSH 接続経由で指定されたリモートホストのポートへ転送します。 この例では、`localhost` のポート _5023_ がリモートマシンの `localhost` のポート _23_ に転送されるようになっています。 _23_ は man:telnet[1] で用いられるので、これは SSH トンネルを通る暗号化された man.telnet.1; セッションを作ります。 このようにして SMTP や POP3 および FTP といったセキュアではない TCP プロトコルをカプセル化できます。 .man:ssh[1] を用いた SMTP 用の安全なトンネルの作成 [example] ==== [source,bash] .... % ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com user@mailserver.example.com's password: ***** % telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP .... man:ssh-keygen[1] と別のユーザアカウントを組み合わせて使うことでより透過的な SSH のトンネル環境を作ることができます。 パスワードを入力するところで暗号鍵を使い、 トンネルは別のユーザ権限で実行することが可能です。 ==== ==== 実用的な SSH トンネルの例 ===== POP3 サーバへの安全な接続 ここでの例は、外部からの接続を受ける SSH サーバがあるとします。 同じネットワークには、POP3 サーバが動いているメールサーバがあるとします。 電子メールを安全なやり方で見るようにするには、 SSH サーバへの SSH 接続を行い、 メールサーバへのトンネルを作成することです。 [source,bash] .... % ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com user@ssh-server.example.com's password: ****** .... トンネルが作成されて動作したら、 メールクライアントに対し `localhost` のポート 2110 に POP3 リクエストを送るように指示してください。 そこへの接続は、トンネルを経由して安全に `mail.example.com` に転送されます。 ===== 厳格なファイアウォールをすり抜ける 内向けおよび外向きの接続両方をフィルタするファイアウォールルールを課すネットワーク管理者もいます。 たとえば、 リモートのマシンからのアクセスに、man:ssh[1] および web サーフィンのための 22 番および 80 番ポートにしか接続させてもらえないかもしれません。 この場合 22 または 80 番以外を使う他のサービスへのアクセスを妨げます。 それに対する解決策は、 あなたが接続しているネットワークのファイアウォールの外部にあるマシンに対して SSH 接続を行い、 希望するサービスへのトンネルに利用することです。 [source,bash] .... % ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org user@unfirewalled-system.example.org's password: ******* .... この例では、ストリーミング Ogg Vorbis クライアントを `localhost` の 8888 番ポートに向けると、 `music.example.com` の 8000 番ポートに転送され、ファイアウォールをすり抜けられます。 === `AllowUsers` オプション ログインできるユーザや接続元を `AllowUsers` を使って制限することは、通常は良い考えです。 たとえば、 `root` が `192.168.1.32` からのみログインできるようにするには、 以下の行を [.filename]#/etc/ssh/sshd_config# に追加してください。 [.programlisting] .... AllowUsers root@192.168.1.32 .... `admin` がどこからでもログインできるようにするには、 ユーザ名そのものを記述してください。 [.programlisting] .... AllowUsers admin .... 複数のユーザは、以下のように同じ行に追加してください。 [.programlisting] .... AllowUsers root@192.168.1.32 admin .... [NOTE] ==== 注意すべきことは、 このコンピュータにログインする必要のあるすべてのユーザを指定することです。 設定されていないと、そのユーザはログインできなくなります。 ==== [.filename]#/etc/ssh/sshd_config# への変更が終わったら、 以下を実行して、設定ファイルを man:sshd[8] に読み込ませてください。 [source,bash] .... # service sshd reload .... === もっと詳しく知りたい人へ http://www.openssh.com/[OpenSSH] ウェブサイト クライアントオプションについて man:ssh[1], man:scp[1], man:ssh-keygen[1], man:ssh-agent[1], man:ssh-add[1] および man:ssh_config[5] サーバオプションについて man:sshd[8], man:sftp-server[8], man:sshd_config[5] [[fs-acl]] == ファイルシステムアクセス制御リスト (ACL) アクセス制御リスト (ACL) は、標準的な UNIX(R) のパーミッションモデルを、 POSIX(R).1e に互換する方法で拡張しています。 これにより、管理者がより洗練されたセキュリティモデルを利用し、 その恩恵を受けられるようになります。 FreeBSD の [.filename]#GENERIC# カーネルは、 UFS ファイルシステム用の ACL サポートを提供します。 カスタムカーネルをコンパイルして使用するユーザは、 カスタムカーネルのコンフィグレーションファイルに以下を追加してください。 [.programlisting] .... options UFS_ACL .... もしこのオプションが組み込まれていなければ、ACL に対応したファイルシステムをマウントしようとすると、 警告が表示されます。ACL は、ファイルシステムの拡張属性が有効になっていることに依存しています。 拡張属性は、UFS2 でネイティブ対応されています。 [NOTE] ==== UFS1 に拡張属性を付すように設定するのは、 UFS2 よりも高いレベルの管理オーバヘッドが必要になります。 また、UFS2 における拡張属性のパフォーマンスも大きく上がっています。 そのため、アクセス制御リストを利用する上では UFS2 を使うことが推奨されます。 ==== ACL は、マウント時の管理フラグ `acls` で有効にされます。 これは [.filename]#/etc/fstab# に記述できます。 マウント時のフラグは、man:tunefs[8] を使って、ファイルシステムヘッダのスーパブロックにある ACL フラグを変更するという方法で、 常に自動で設定されるようになります。一般的には、 下記の理由からスーパブロックフラグを使う方がよいでしょう。 * マウント時に指定した ACL フラグは `mount -u` による再マウントでは変更できません。 完全に man:umount[8] した上で、新たに man:mount[8] するしかありません。これは、起動後にルートファイルシステムで ACL を有効にできないことを意味します。 また、ファイルシステムを利用し始めた後では、 その配列を変えられないことも意味しています。 * スーパブロックフラグを設定すると、[.filename]#fstab# に記述されていなかったり、デバイスの順番が変わってしまっても、常に ACL が有効な状態でマウントされます。 こうすることで、ファイルシステムを ACL を有効にしないままマウントしてしまい、ACL が正しくないかたちで強制されるセキュリティの問題を防ぎます。 [NOTE] ==== 予期せず ACL を有効にしないでマウントしてしまうことを防ぐことが望まれます。 ACL を有効にし、その後無効にしてから、 拡張属性を取り消さないでまた有効にしてしまうと、 大変な状況になってしまいます。 一般的には、一度ファイルシステムで ACL を有効にしたら、無効にすべきではありません。そうしてしまうと、 ファイル保護がシステムのユーザの意図と齟齬をきたす可能性があるばかりか、 ACL を再度有効にすると、 それまでパーミッションが変更されてきたファイルに古い ACL を割り当ててしまい、 予想しない動作につながることも考えられます。 ==== ACL を有効にしたファイルシステムは、 パーミッション設定の表示に `+` (プラス) 記号がつきます。例えば、次のようになります。 [.programlisting] .... drwx------ 2 robert robert 512 Dec 27 11:54 private drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1 drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html .... この例では、ディレクトリ [.filename]#directory1#, [.filename]#directory2# および [.filename]#directory3# のすべてで ACL が働いています。 一方 [.filename]#public_html# は対象外です。 === ACL を利用する man:getfacl[1] は、 ファイルシステムの ACL を表示します。 たとえば、[.filename]#test# の ACL 設定を表示するには、 以下のコマンドを実行してください。 [source,bash] .... % getfacl test #file:test #owner:1001 #group:1001 user::rw- group::r-- other::r-- .... このファイルの ACL 設定を変更するには、 man:setfacl[1] を使用してください。 [source,bash] .... % setfacl -k test .... ファイルまたはファイルシステムから、 現在設定されている ACL をすべて取り除くには、`-k` を使ってください。 しかしながら、より好ましい方法は、 `-b` を使う方法です。 このオプションを使うと、ACL が動作するのに必要な基本のフィールドは残ります。 [source,bash] .... % setfacl -m u:trhodes:rwx,group:web:r--,o::--- test .... この例では、`-m` は、デフォルト ACL エントリを修正するために使われています。 先ほどのコマンドで設定は削除されたため、 定義されたエントリはありません。 このコマンドは、デフォルトオプションに戻し、 指定したオプションを割り当てます。 システムに存在しないユーザまたはグループを追加すると、 `Invalid argument` エラーが出力されてしまいます。 [[security-portaudit]] == サードパーティ製ソフトウェアのセキュリティ問題を監視する 近年、セキュリティの分野では、 脆弱性の評価方法に関して多くの改善が行わています。 今日ではどのオペレーティングシステムにおいても、 システムへの侵入の脅威は、 サードパーティ製ユーティリティをインストールし、 設定するほどに増加していきます。 脆弱性を評価することは、セキュリティにおいて主要な要素です。 FreeBSD は、ベースシステムに対して勧告を発行していますが、 すべてのサードパーティ製ユーティリティに対して勧告を発行することは、 FreeBSD プロジェクトの能力を超えています。 サードパーティ製ユーティリティに関わる脆弱性を軽減し、 管理者に対し、既知のセキュリティ問題について警告する方法が存在します。 FreeBSD には、portaudit と呼ばれる追加のユーティリティが、 この目的のために用意されています。 package:ports-mgmt/portaudit[] port は、FreeBSD セキュリティチームおよび ports 開発者がアップデートし、管理している、 既知のセキュリティ問題に対するデータベースを入手します。 Ports Collection から portaudit をインストールするには、以下のように実行してください。 [source,bash] .... -# cd /usr/ports/ports-mgmt/portaudit make install clean +# cd /usr/ports/ports-mgmt/portaudit && make install clean .... インストールの途中で、 man:periodic[8] の設定ファイルはアップデートされ、 毎日のセキュリティに関するスクリプトの実行中に portaudit が出力するように設定されます。 毎日のセキュリティに関するスクリプトの実行結果のメールが読めることを確認してください。 このメールは、`root` アカウントに送られます。 他の設定は必要ありません。 インストールが終わったら、管理者は以下のコマンドを実行することで、 データベースをアップデートし、インストールされている package の脆弱性を調べることができます。 [source,bash] .... # portaudit -Fda .... [NOTE] ==== データベースは、 man:periodic[8] の実行中に自動的にアップデートされます。 先程のコマンドの実行は任意で、 データベースを手動で直ちにアップデートするときに使われます。 ==== Ports Collection からインストールされたサードパーティ製ユーティリティを監査するには、 管理者は以下のコマンドを実行する必要があります。 [source,bash] .... # portaudit -a .... portaudit は、インストールされている package の中で、 脆弱性のあるものについて以下のようなメッセージを出力します。 [.programlisting] .... Affected package: cups-base-1.1.22.0_1 Type of problem: cups-base -- HPGL buffer overflow vulnerability. -Reference: http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html +Reference: 1 problem(s) in your installed packages found. You are advised to update or deinstall the affected package(s) immediately. .... 表示されている URL をウェブブラウザで開くと、管理者は、 脆弱性についてより多くの情報を得ることができます。 ここでの出力では、影響するバージョンが FreeBSD の port バージョンにより示され、 セキュリティ勧告を含む他のウェブサイトが含まれています。 portaudit は強力で、 portmaster port と共に使うときわめて有用なユーティリティです。 [[security-advisories]] == FreeBSD セキュリティ勧告 多くの高品質なオペレーティングシステムと同様、 FreeBSD は "セキュリティ勧告" を発行しています。 これらの勧告は、通常セキュリティに関連したのメーリングリストに投稿され、 サポートされているリリースに対してパッチが作成された後、 Errata に記載されます。 この章では、セキュリティ勧告とは何か、どのように理解すべきか、 システムにパッチを当てるにはどのように対応すればよいかについて説明します。 === セキュリティ勧告はどのようなものか? FreeBSD セキュリティ勧告では、 以下のようなフォーマットが用いられています。 [.programlisting] .... ============================================================================= FreeBSD-SA-XX:XX.UTIL Security Advisory The FreeBSD Project Topic: denial of service due to some problem <.> Category: core <.> Module: sys <.> Announced: 2003-09-23 <.> Credits: Person <.> Affects: All releases of FreeBSD <.> FreeBSD 4-STABLE prior to the correction date Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE) 2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6) 2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15) 2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8) 2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18) 2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21) 2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33) 2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43) 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39) <.> CVE Name: CVE-XXXX-XXXX <.> For general information regarding FreeBSD Security Advisories, including descriptions of the fields above, security branches, and the following sections, please visit -http://www.FreeBSD.org/security/<.> +http://www.FreeBSD.org/security/. I. Background <.> + II. Problem Description <.> + III. Impact <.> + IV. Workaround <.> + V. Solution <.> + VI. Correction details <.> + VII. References <.> .... <.> `Topic` フィールドでは、 問題について明記されています。 セキュリティ勧告の導入部であり、 脆弱性に影響されるユーティリティを示します。 - <.> `Category` フィールドでは、 脆弱性がシステムのどの部分に影響するかを示します。 `core`, `contrib` または `ports` のどれかが示されます。 `core` カテゴリは、 FreeBSD オペレーティングシステムの `core` コンポーネントに影響する脆弱性であることを意味します。 `contrib` カテゴリは、 Sendmail のように、FreeBSD の外で開発され、FreeBSD プロジェクトに取り込まれたソフトウェアに影響する脆弱性であることを意味します。 `ports` カテゴリは、Ports Collection からインストールされるソフトウェアに影響する脆弱性であることを示しています。 - <.> `Module` フィールドは、 影響するコンポーネントについて言及します。 この例では、`sys` モジュールに影響することがわかります。 そのため、この脆弱性は、 カーネルの中で使われるコンポーネントに影響します。 - <.> `Announced` フィールドは、 セキュリティ勧告が発行された日、 またはアナウンスされた日が記載されています。 セキュリティチームによりこの問題が存在することが確認され、 パッチが FreeBSD ソースコードリポジトリにコミットされたことを意味します。 - <.> `Credits` フィールドは、 脆弱性を通知し、報告した個人または組織を示します。 - <.> `Affects` フィールドは、この脆弱性がどの FreeBSD リリースに影響するかを説明します。 カーネルでは、影響するファイルに対して man:ident[1] を実行すると、 その出力からリビジョンを簡単に確認できます。 ports の場合には、 [.filename]#/var/db/pkg# の port の名前の後に、バージョン番号が示されています。 もし、システムが FreeBSD Subversion リポジトリと同期していなかったり、 再構築が毎日行われているような状況でなければ、 おそらく、そのシステムには影響しているでしょう。 - <.> `Corrected` フィールドは、 脆弱性が修正された日、時間、 タイムゾーン、およびリリースが示されます。 - -<.> link:http://cve.mitre.org[Common Vulnerabilities and Exposures] データベースにおいて、 脆弱性を探すために使用できる識別情報を示します。 - +<.> http://cve.mitre.org[Common Vulnerabilities and Exposures] データベースにおいて、 脆弱性を探すために使用できる識別情報を示します。 <.> `Background` フィールドは、 影響しているユーティリティに関する情報を示します。 大体の場合は、なぜユーティリティが FreeBSD に存在するか、 何のために使われているか、 どのように用いられるようになってきたか、 といった情報が示されます。 - <.> `Problem Description` フィールドは、 より深くセキュリティホールについて説明します。 問題のあるコードの情報や、 このユーティリティが悪意のある使い方により、 どのようにセキュリティホールを開けうるかといったことが示されます。 - <.> `Impact` フィールドは、 この問題がシステムに対して、 どのような形式の影響を与えるかについて示します。 たとえば、DoS 攻撃によるものか、 ユーザに対して意図しない特権を持たせてしまうものか、 または、攻撃者にスーパユーザのアクセスを与えるようなものか、 といったことが示されます。 - <.> `Workaround` フィールドは、 時間による制限や、ネットワークの可用性または他の理由により、 システムをアップグレードできないシステム管理者に対して、 回避方法を提供します。 セキュリティを甘く見るべきではなく、 影響するシステムにはパッチを当てるか、 セキュリティホールの回避方法を実行すべきです。 - <.> `Solution` フィールドは、 影響のあるシステムにパッチを当てる手順を提供します。 ここではステップごとにシステムにパッチを当て、 安全に動作するように、 試験され検証された方法が記載されます。 - <.> `Correction Details` フィールドは、 Subversion ブランチまたはリリース名のピリオドをアンダースコアに置き換えたものを示します。 ここでは、 各ブランチにおいて影響するファイルのリビジョン番号も示します。 - <.> `References` フィールドは、 通常、ウェブページの URL, books, メーリングリストおよびニュースグループといった、 ほかの情報へのソースを提供します。 [[security-accounting]] == プロセスアカウンティング プロセスアカウンティングは、 管理者が使用されているシステムのリソースを記録したり、 リソースのユーザへの割り当て、 システムのモニタリングおよびユーザのコマンドの最低限の記録を提供します。 これは実際には、長所と短所があります。 長所の一つは、侵入を入り口の時点で絞ることができます。 短所は、プロセスアカウンティングにより生成されるログの量で、 多くのディスク容量を必要とします。この節では、 管理者を対象にプロセスアカウンティングの基礎を説明します。 === プロセスアカウンティングを有効にする プロセスアカウンティングを使用する前に、 以下のコマンドを使って、 プロセスアカウンティングを有効にしておく必要があります。 [source,bash] .... # touch /var/account/acct # chmod 600 /var/account/acct # accton /var/account/acct # echo 'accounting_enable="YES"' >> /etc/rc.conf .... 一度有効に設定すると、アカウンティングは、 CPU の統計、 実行されたコマンドの情報の追跡を開始します。 すべてのアカウンティングログは、 人が読めるような形式ではなく、 man:sa[8] を使って見ることができます。 オプションを設定せずに実行すると、 man:sa[8] はユーザコールの数、全経過時間 (分)、 全 CPU、ユーザの時間 (分)、および I/O 操作の平均数などを出力します。 実行されたコマンドに関する情報を見るには、 man:lastcomm[1] を使ってください。 このコマンドは、 ユーザが特定の man:ttys[5] で実行したコマンドを出力します。 たとえば、以下のコマンドは `ttyp1` ターミナル上で `trhodes` が実行した man:ls[1] の使用について、記録されているすべて示します。 [source,bash] .... # lastcomm ls trhodes ttyp1 .... 他にも有用なオプションが多くあり、 man:lastcomm[1], man:acct[5] および man:sa[8] で説明されています。 [[security-resourcelimits]] == リソースの制限 長年にわたり FreeBSD は、 リソースを制限するためのデータベースとしてフラットファイル形式の [.filename]#/etc/login.conf# により管理していました。 この方法は、現在でも使われていますが、 リソースを管理する方法としては最適な方法でないことが、 以前から議論されています。 フラットファイル形式では、 クラスとして知られるグループラベルにユーザを分類する必要があります。 この場合、フラットファイルだけではなく、 パスワードデータベースに対しても変更が必要となります。 潜在的に、より多くの制限を加えられたユーザ対してはラベルの追加や、 `cap_mkdb` を使ったリソースデータベースの再構築、 [.filename]#/etc/master.passwd# への変更が必要となります。 さらに、パスワードデータベースは、 `pwd_mkdb` を使って再構築する必要があります。 この複数回に渡るプロセスは、 多くのユーザについて設定する必要がある場合には、 大変な時間の浪費につながる可能性があります。 FreeBSD の新しいコマンドである man:rctl[8] は、 ユーザに対して、 よりきめ細かにリソースの制限を管理する方法を提供します。 このコマンドは、ユーザだけではなく、プロセス、jails およびオリジナルのログインクラスに対してもリソースの制限を行うことができます。 これらの高度な機能は、管理者およびユーザに対し、 リソースをコマンドラインで管理したり、 設定ファイルを用いることで、システムの初期化時に、 ルールを設定する方法を提供します。 この機能を有効にするには、以下の行を [.filename]#GENERIC# またはカスタムカーネルコンフィグレーションファイルに追加し、 再構築してください。 [.programlisting] .... options RACCT options RCTL .... その後、システムの再起動が必要になります。 この過程の手順については、crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] をご覧ください。 これらの準備が完了すると、`rctl` を用いてシステムにルールを設定できるようになります。 ルールの構文は簡単で、 _subject_, _subject-id_, _resource_ および _action_ を使って管理されます。 以下のルールの例を参照してください。 [.programlisting] .... user:trhodes:maxproc:deny=10/user .... これは基本的なルールです。 ここで、subject は `user`、 subject-id は `trhodes` です。 maxproc はもちろんプロセスの最大数であり、resource です。 ここで action は、`deny` と設定されており、 新しいプロセスの生成がブロックされます。 この例では、ユーザ `trhodes` のプロセスは `10` 個に制限され、それ以上のプロセスは作成できません。 コンソールにログを出力したり、 man:devd[8] に対し通知したり、プロセスに sigterm を送ったりといった、 他の action も利用できます。 ルールを追加する際には、注意すべき点がいくつかあります。 上の例では、ログインして `screen` セッションを実行してしまうと、 不幸にもユーザは最も簡単なタスクの実行ですらブロックされてしまうでしょう。 リソースの制限が適応されると、エラーが出力されます。 この例では以下のような出力が行われます。 [source,bash] .... % man test /usr/bin/man: Cannot fork: Resource temporarily unavailable eval: Cannot fork: Resource temporarily unavailable .... 他の例としては、man:rctl[8] を使って jail がメモリの制限を超えることを防ぐことができます。 このルールは以下のように書くことができます。 [source,bash] .... # rctl -a jail:httpd:memoryuse:deny=2G/jail .... ルールを [.filename]#/etc/rctl.conf# に追加すると、 再起動してもルールは持続します。 フォーマットは、ルールから最初のコマンドの部分を除いたものとなります。 たとえば、上のルールを追加するには、 以下のように追加してください。 [.programlisting] .... # Block jail from using more than 2G memory: jail:httpd:memoryuse:deny=2G/jail .... ルールを削除するには、`rctl` に対し、 リストから削除するように指定してください。 [source,bash] .... # rctl -r user:trhodes:maxproc:deny=10/user .... マニュアルページには、 ルールをすべて削除する方法が記載されています。 しかしながら、特定のユーザのルールをすべて削除するには、 以下のようなコマンドを実行してください。 [source,bash] .... # rctl -r user:trhodes .... `subjects` をコントロールするリソースは他にも多く用意されています。 これらについて知るには、man:rctl[8] をご覧ください。 diff --git a/documentation/content/ja/books/handbook/x11/_index.adoc b/documentation/content/ja/books/handbook/x11/_index.adoc index c981f40a5f..c8993db1f2 100644 --- a/documentation/content/ja/books/handbook/x11/_index.adoc +++ b/documentation/content/ja/books/handbook/x11/_index.adoc @@ -1,1407 +1,1405 @@ --- title: 第5章 X Window System part: パートI. 導入 prev: books/handbook/ports next: books/handbook/partii --- [[x11]] = X Window System :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :skip-front-matter: :toc-title: 目次 :table-caption: 表 :figure-caption: 図 :example-caption: 例 :xrefstyle: basic :relfileprefix: ../ :outfilesuffix: :sectnumoffset: 5 ifeval::["{backend}" == "html5"] :imagesdir: ../../../images/books/handbook/x11/ endif::[] ifeval::["{backend}" == "pdf"] :imagesdir: ../../../../static/images/books/handbook/x11/ endif::[] ifeval::["{backend}" == "epub3"] :imagesdir: ../../../../static/images/books/handbook/x11/ endif::[] include::shared/authors.adoc[] include::shared/releases.adoc[] include::shared/ja/mailing-lists.adoc[] include::shared/ja/teams.adoc[] include::shared/ja/urls.adoc[] toc::[] [[x11-synopsis]] == この章では bsdinstall を用いた FreeBSD のインストールでは、 グラフィカルユーザインタフェースは自動的にはインストールされません。 この章では、グラフィカル環境で使われるオープンソースの X Window System を提供する Xorg のインストールおよび設定方法について説明します。 その後、 デスクトップ環境およびウィンドウマネージャの探し方およびインストール方法について説明します。 [NOTE] ==== -Xorg を自動的に設定するインストール方法を希望するユーザは、 https://www.furybsd.org[FuryBSD], https://ghostbsd.org[GhostBSD] および https://www.midnightbsd.org[MidnightBSD] を参照してください。 +Xorg を自動的に設定するインストール方法を希望するユーザは、 link:https://www.furybsd.org[FuryBSD], link:https://ghostbsd.org[GhostBSD] および link:https://www.midnightbsd.org[MidnightBSD] を参照してください。 ==== -Xorg が対応するビデオハードウェアについてのより多くの情報は、 http://www.x.org/[x.org] のウェブサイトをご覧ください。 +Xorg が対応するビデオハードウェアについてのより多くの情報は、 link:http://www.x.org/[x.org] のウェブサイトをご覧ください。 この章を読めば以下のことがわかります。 * X Window System のさまざまなコンポーネントと、 それらが互いにどのように連携しているか。 * Xorg のインストールおよび設定方法 * さまざまなウィンドウマネージャおよびデスクトップ環境のインストールおよび設定方法 * Xorg での TrueType(R) フォントの使い方 * GUI ログイン (XDM) の設定方法 この章を読み始める前に以下のことを理解しておく必要があります。 * crossref:ports[ports,アプリケーションのインストール - packages と ports] で説明されているサードパーティ製ソフトウェアのインストール方法 [[x-understanding]] == 用語の説明 X Window System のさまざまなコンポーネントについての詳細や、 それらがどのようにやり取りするかについてすべて理解する必要はありませんが、 これらのコンポーネントについて基本的なことを知っていると、 強力な武器になるでしょう。 X サーバ:: X は最初からネットワークを意識してデザインされており、 "クライアント - サーバ" モデルを採用しています。 このモデルでは、"X サーバ" はキーボードやモニタ、 マウスが接続されたコンピュータ上で動きます。 このサーバはディスプレイの表示を管理したり、キーボード、 マウスからの入力を処理したり、 タブレットやビデオプロジェクタ等の他の装置からの入出力を処理します。 これは、ある人々を混乱させることがあります。 X での用語は彼らが想定するものとは正反対だからです。 彼らは "X サーバ" は地下にある大きなパワフルなマシンであり、 "X クライアント" が自分たちのデスク上にあると想像するのです。 X クライアント:: XTerm や Firefox などの各 X アプリケーションは、 "クライアント" になります。 クライアントは "この座標にウィンドウを描いてください" といったメッセージをサーバへ送り、サーバは "ユーザが OK ボタンを押しました" といったメッセージを送り返します。 + 家庭や小さなオフィスのような環境では、X サーバと X クライアントは通常同じコンピュータ上で動いています。 X サーバを非力なコンピュータで動かし、 X アプリケーションをより高性能なマシンで動かすことも可能です。 この場合、 X のクライアントとサーバの通信はネットワーク越しに行なわれます。 ウィンドウマネージャ:: X はスクリーン上でウィンドウがどのように見えるべきか、 マウスでそれらをどうやって動かすか、 ウィンドウ間を移動するのにどういうキーストロークを使うべきか、 各ウィンドウのタイトルバーはどのように見えるべきか、 クローズボタンを持つべきかどうか、 といったことは規定しません。そのかわりに、X ではそういったことを "ウィンドウマネージャ" と呼ばれるアプリケーションに任せます。link:http://www.xwinman.org/[ウィンドウマネージャはたくさん] あります。 これらのウィンドウマネージャの見た目や使い勝手はそれぞれ異なっています。 バーチャルデスクトップをサポートしているものもありますし、 デスクトップを操作するキーストロークをカスタマイズできたり、 "スタート" ボタンやそれに類するものを持っているものもあります。 テーマに対応しており、 デスクトップの見た目や使い勝手を完全に変えられるものもあります。 ウィンドウマネージャは Ports Collection の [.filename]#x11-wm# カテゴリに用意されています。 + それぞれのウィンドウマネージャは異なる設定機構を備えています。 手で設定ファイルを編集しなければならないものや、 設定作業のほとんどを GUI ツールで行うことができるものもあります。 デスクトップ環境:: KDE や GNOME は、デスクトップ環境です。 これらは、共通のデスクトップのタスクを実行するための完全なアプリケーションスイートを含んでいます。 オフィススイート、ウェブブラウザやゲームを含んでいるものもあります。 フォーカスポリシ:: ウィンドウマネージャは、 マウスのフォーカスポリシに責任を持ちます。 このポリシは、どのウィンドウがアクティブにキーストロークを 受け付けるようにするための方法を提供し、 そして、どのウィンドウがアクティブなのかを示します。 + よく知られているフォーカスポリシは "click-to-focus" と呼ばれるものです。 このポリシは、 あるウィンドウ内でマウスをクリックすればそのウィンドウがアクティブになる、 というものです。 "focus-follows-mouse" ポリシでは、 マウスポインタの下にいるウィンドウがフォーカスされるというものです。 フォーカスを変えるには他のウィンドウにマウスポインタを動かすだけです。 マウスがルートウィンドウに移動した時には、 このウィンドウがフォーカスされます。 "sloppy-focus" モデルでは、 マウスがルートウィンドウに移動した時には、 直前に使われていたウィンドウがフォーカスされています。 sloppy-focus では、 ポインタが別のウィンドウに移った時のみフォーカスが変わり、 現在のウィンドウから出ただけでは変わりません。 "click-to-focus" ポリシでは、 マウスクリックによりアクティブなウィンドウが選択されます。 ウィンドウは前面に表示され、他のすべてのウィンドウの前にきます。 ポインタが別のウィンドウ上に移動した時でも、 すべてのキーストロークがこのウィンドウに届きます。 + それぞれのウィンドウマネージャは、 それぞれのフォーカスポリシに対応しています。 すべてのものは click-to-focus をサポートしていますし、 多くのものは他の方法もサポートしています。 どのフォーカスモデルを利用可能かどうかについては、 ウィンドウマネージャのドキュメントをご覧ください。 ウィジェット:: ウィジェットはクリック可能であったり、 他の方法で操作可能なすべてのユーザインタフェース用アイテムを指す用語です。 ボタンやチェックボックス、ラジオボタン、アイコン、リスト、などがそうです。 ウィジェットツールキットはグラフィカルアプリケーションを作成するために使われます。 KDE で使われている Qt や GNOME プロジェクトで使われている GTK+ といった有名なウィジェットセットがあります。 そのため、アプリケーションのルックアンドフィールは、 アプリケーションを作成するのに使われたウィジェットツールキットに依存し、 異なります。 [[x-install]] == Xorg のインストール FreeBSD では、Xorg を package または port からインストールできます。 バイナリ package を使うと早くインストールできますが、 カスタマイズのためのオプションは少なくなります。 [source,bash] .... # pkg install xorg .... Ports Collection からビルドしてインストールするには、 以下のように実行してください。 [source,bash] .... # cd /usr/ports/x11/xorg # make install clean .... どちらの方法でも、完全な Xorg システムがインストールされます。 バイナリ package を用いる方法が、 ほとんどのユーザにとってはベストな選択となります。 経験のあるユーザ向けの最小の X システムは、[.filename]#x11/xorg-minimal# です。 ほとんどのドキュメント、 ライブラリおよびアプリケーションはインストールされません。 アプリケーションによってはこれらの追加の要素が機能する上で必要となります。 [[x-config]] == Xorg の設定 [[x-config-quick-start]] === クィックスタート Xorg は、 標準的なほとんどのビデオカード、 キーボード、ポインティングデバイスに対応しています。 [TIP] ==== - ビデオカード、キーボード、入力デバイスは、 自動的に検出されるので、手動の設定は必要ありません。 自動認識に失敗したとき以外は、[.filename]#xorg.conf# を作成したり、`-configure` プロセスの実行は行わないでください。 ==== [.procedure] ==== - . もし、使用しているコンピュータですでに Xorg が使われているのであれば、 コンフィグレーションファイルを移動するか、削除してください。 + [source,bash] .... # mv /etc/X11/xorg.conf ~/xorg.conf.etc # mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc .... -+ -. 3D アクセラレータを利用できるシステムでは、 Xorg を実行するユーザを `video` または `wheel` グループに追加して、 使用できるようにしてください。 ユーザ _jru_ をどちらのグループでも利用できるようにするには以下のように実行してください。 + +. 3D アクセラレータを利用できるシステムでは、 Xorg を実行するユーザを `video` または `wheel` グループに追加して、使用できるようにしてください。 ユーザ _jru_ をどちらのグループでも利用できるようにするには以下のように実行してください。 + [source,bash] .... # pw groupmod video -m jru || pw groupmod wheel -m jru .... -+ + . デフォルトでは twm ウィンドウマネージャがインストールされています。 Xorg が起動すると、 このウィンドウマネージャが立ち上がります。 + [source,bash] .... % startx .... -+ + . 古いバージョンの FreeBSD では、 テキストコンソールに戻れるようにするために、 システムコンソールは man:vt[4] に設定する必要があります。 <> を参照してください。 ==== [[x-config-user-group]] === Accelerated Video のためのユーザグループ ビデオカードの 3D アクセラレータを有効にするには、 [.filename]#/dev/dri# へのアクセスが必要となります。 通常は、X を実行するユーザを `video` または `wheel` グループに追加するするだけです。 ここでは、man:pw[8] を使ってユーザ _slurms_ を `video` グループ、または `video` グループが存在しない時に、 `wheel` グループに追加しています。 [source,bash] .... # pw groupmod video -m slurms || pw groupmod wheel -m slurms .... [[x-config-kms]] === Kernel Mode Setting (KMS) コンピュータが、コンソールの表示から、 X 用の高解像度の表示へと切り替える時には、 ビデオの出力 _mode_ が設定されている必要があります。 最近の Xorg では、 カーネル内部のシステムを使って効率的にこれらのモードの変換をしています。 古いバージョンの FreeBSD では、 KMS システムを用いない man:sc[4] が使用されています。 X を閉じた後、システムコンソールは動作をしていても、 表示に黒になります。 新しい man:vt[4] コンソールではこの問題は起こりません。 以下の行を [.filename]#/boot/loader.conf# に追加して man:vt[4] を有効にしてください。 [.programlisting] .... kern.vty=vt .... [[x-config-files]] === コンフィグレーションファイル 通常、この節で説明する手動の設定は必要ありません。 自動認識に失敗したとき以外は、 手動で設定ファイルを作成しないでください。 [[x-config-files-directory]] ==== ディレクトリ Xorg は、 複数のディレクトリから設定ファイルを探します。 FreeBSD において、設定ファイルのディレクトリは、 [.filename]#/usr/local/etc/X11/# が推奨されます。 このディレクトリを使うことで、 アプリケーションのファイルをオペレーティングシステムとは区別する事になります。 昔のコンフィグレーションファイルの置き場である [.filename]#/etc/X11/# も機能します。 しかしながら、この場所に置くと、アプリケーションファイルと FreeBSD システムのファイルが混ざってしまうため、推奨されません。 [[x-config-files-single-or-multi]] ==== 単一または複数ファイル 複数のファイルを用いて、 各ファイルが特定の部分を設定するようにすると、 古い単一の [.filename]#xorg.conf# を用いるよりも設定が簡単になります。 これらのファイルは、 メインのコンフィグレーションファイルのディレクトリの [.filename]#xorg.conf.d/# サブディレクトリに置かれます。 フルパスは、一般的に [.filename]#/usr/local/etc/X11/xorg.conf.d/# となります。 これらのファイルの例は、この節の後半で説明します。 古い単一の [.filename]#xorg.conf# も機能しますが、 [.filename]#xorg.conf.d/# サブディレクトリに複数のファイルで設定する形式に比べると、 柔軟ではなく、わかりにくいものとなります。 [[x-config-video-cards]] === ビデオカード 最近の FreeBSD では、Ports または packages 形式で提供されるグラフィックドライバを利用できるようになりました。 そのようなものとして、ユーザは package:graphics/drm-kmod[] で提供される以下のドライバを利用できます。 [[x-config-video-cards-ports]] Intel KMS driver:: -Intel が提供しているほとんどの Intel KMS driver グラフィックカードは、2D および 3D アクセラレーションに対応しています。 +Intel(R) が提供しているほとんどの Intel KMS driver グラフィックカードは、2D および 3D アクセラレーションに対応しています。 + ドライバ名: `i915kms` + -AMD が提供している古い Radeon KMS driver グラフィックカードのほとんどは、2D および 3D アクセラレーションに対応しています。 +AMD(R) が提供している古い Radeon KMS driver グラフィックカードのほとんどは、2D および 3D アクセラレーションに対応しています。 + ドライバ名: `radeonkms` + -AMD が提供している新しい Radeon KMS driver グラフィックカードのほとんどは、2D および 3D アクセラレーションに対応しています。 +AMD(R) が提供している新しい Radeon KMS driver グラフィックカードのほとんどは、2D および 3D アクセラレーションに対応しています。 + ドライバ名: `amdgpu` + -参考として、対応している GPU 一覧を https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] または https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] でご覧ください。 +参考として、対応している GPU 一覧を link:https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] または link:https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] でご覧ください。 [[x-config-video-cards-intel]] Intel(R):: Iron Lake (HD Graphics) および Sandy Bridge (HD Graphics 2000) を含む Ivy Bridge (HD Graphics 2500, 4000, および P4000) までのほとんどの Intel(R) グラフィックスは、3D acceleration に対応しています。 + ドライバ名: `intel` + -参考情報については https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] をご覧ください。 +参考情報については link:https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units[] をご覧ください。 [[x-config-video-cards-radeon]] AMD(R) Radeon:: ATI/Radeon: 2D および 3D acceleration は、 HD6000 シリーズまでのほとんどの Radeon カードで対応しています。 + ドライバ名: `radeon` + -参考情報については https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] をご覧ください。 +参考情報については link:https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units[] をご覧ください。 [[x-config-video-cards-nvidia]] NVIDIA:: NVIDIA: いくつかの NVIDIA ドライバが Ports Collection の [.filename]#x11# カテゴリから利用できます。 ビデオカードのモデルに対応するドライバをインストールしてください。 + -参考情報については https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units[] をご覧ください。 +参考情報については link:https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units[] をご覧ください。 [[x-config-video-cards-hybrid]] ハイブリッドグラフィックス:: ノートブックコンピュータによっては、 チップセットまたはプロセッサに組み込まれているグラフィックプロセッサユニットの他に、 追加でそれらを持つものがあります。 _Optimus_ は、 Intel(R) と NVIDIA ハードウェアを組み合わせています。 _Switchable Graphics_ または、 _Hybrid Graphics_ は、 Intel(R) または AMD(R) プロセッサと AMD(R) Radeon GPU を組み合わせています。 + これらのハイブリッドなグラフィックシステムの実装は、 システムごとに異なるので、 FreeBSD の Xorg は、 これらのすべてのバージョンについて対応しているわけではありません。 + コンピュータによっては、 片方のグラフィックアダプタを無効にしたり、 標準のビデオカードドライバの一つとともに使われる _discrete_ モードを選択できるような BIOS オプションを提供しています。 たとえば、Optimus システムでは、NVIDIA GPU を無効にできるものがあります。 その後、Intel(R) ビデオカードは、 Intel(R) ドライバで利用できます。 + BIOS の設定は、 コンピュータのモデルに依存します。 システムによっては、両方の GPU を有効にできますが、 そのようなシステムの機能を利用するには、 `Device` セッションにおいて、 メインの GPU のみを使用するようなコンフィグレーションファイルを作成ことで十分です。 [[x-config-video-cards-other]] 他のビデオカード:: Ports Collection の [.filename]#x11-drivers# ディレクトリには、 あまり使用されないようなドライバも用意されています。 + 特定のドライバによりサポートされていないようなカードでも、 package:x11-drivers/xf86-video-vesa[] で使用できるかもしれません。 このドライバは、package:x11/xorg[] によりインストールされます。 手動でインストールするには、 package:x11-drivers/xf86-video-vesa[] としてインストールしてください。 ビデオカードに対して、特定のドライバが見つからない場合には、 Xorg はこのドライバを使うことを試みます。 + package:x11-drivers/xf86-video-scfb[] も同様に、多くの UEFI および ARM(R) コンピュータで動くような、 使用するカードを特定していないビデオドライバです。 [[x-config-video-cards-file]] ファイルでビデオドライバを設定する。:: コンフィグレーションファイルにおいて Intel(R) ドライバを設定するには、以下のようにしてください。 + [[x-config-video-cards-file-intel]] .ファイルにおいて Intel(R) ビデオドライバを選択する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-intel.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "intel" # BusID "PCI:1:0:0" EndSection .... 1つ以上のビデオカードが存在する場合には、 `BusID` 行のコメントを外し、 希望するカードを選択するように設定できます。 ビデオカードバス ID は、 `pciconf -lv | grep -B3 display` で表示できます。 ==== + コンフィグレーションファイルで、Radeon ドライバを設定するには以下のようにしてください。 + [[x-config-video-cards-file-radeon]] .ファイルにおいて Radeon ビデオドライバを設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "radeon" EndSection .... ==== + コンフィグレーションファイルで VESA ドライバを設定するには、以下のようにしてください。 + [[x-config-video-cards-file-vesa]] .ファイルで VESA ビデオドライバを設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "vesa" EndSection .... ==== + UEFI または ARM(R) コンピュータを使うために `scfb` ドライバを設定するには、以下のように設定してください。 + [[x-config-video-cards-file-scfb]] .ファイルの中で `scfb` ビデオドライバを選択する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/driver-scfb.conf# [.programlisting] .... Section "Device" Identifier "Card0" Driver "scfb" EndSection .... ==== [[x-config-monitors]] === モニタ ほとんどすべてのモニタは、Extended Display Identification Data standard (EDID) に対応しています。 Xorg は EDID を使ってモニタと通信し、 対応している解像度とリフレッシュレートを検出します。 そのため、モニタを使用するのに最も適切な設定が選択されます。 モニタにより対応している他の解像度は、 コンフィグレーションファイルに希望する解像度を設定する、 または X サーバを起動後、man:xrandr[1] により選択が可能となります。 [[x-config-monitors-xrandr]] man:xrandr[1] の使用:: パラメータを与えずに man:xrandr[1] を実行すると、 ビデオ出力と検出されているモニタのモードを確認できます。 + [source,bash] .... % xrandr Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192 DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm 1920x1200 59.95*+ 1600x1200 60.00 1280x1024 85.02 75.02 60.02 1280x960 60.00 1152x864 75.00 1024x768 85.00 75.08 70.07 60.00 832x624 74.55 800x600 75.00 60.32 640x480 75.00 60.00 720x400 70.08 DisplayPort-0 disconnected (normal left inverted right x axis y axis) HDMI-0 disconnected (normal left inverted right x axis y axis) .... + この出力からは、リフレッシュレート約 60 Hz で、 スクリーン解像度 1920x1200 ピクセルの表示に `DVI-0` 出力が使用されていることが分かります。 また、`DisplayPort-0` および `HDMI-0` インタフェースには、 モニタは接続されていません。 + man:xrandr[1] を使用して、 他のディスプレイモードを選択できます。 たとえば、60 Hz で、1280x1024 の表示に変更するには、 以下のように実行してください。 + [source,bash] .... % xrandr --mode 1280x1024 --rate 60 .... + ノートブックコンピュータの外部出力を使用して、 ビデオプロジェクタに接続することがよく行われます。 + 出力端子のタイプおよび番号は、デバイスごとに異なります。 また、各端子の名前もドライバごとに異なります。 あるドライバが `HDMI-1` と呼ぶ出力が、 別のドライバでは `HDMI1` と呼ばれることもあります。 そのため、最初に man:xrandr[1] を実行して、 利用可能な出力のすべての一覧を表示してください。 + [source,bash] .... % xrandr Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192 LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm 1366x768 60.04*+ 1024x768 60.00 800x600 60.32 56.25 640x480 59.94 VGA1 connected (normal left inverted right x axis y axis) 1280x1024 60.02 + 75.02 1280x960 60.00 1152x864 75.00 1024x768 75.08 70.07 60.00 832x624 74.55 800x600 72.19 75.00 60.32 56.25 640x480 75.00 72.81 66.67 60.00 720x400 70.08 HDMI1 disconnected (normal left inverted right x axis y axis) DP1 disconnected (normal left inverted right x axis y axis) .... + この出力からは、組み込みパネルの `LVDS1`, 外部出力の `VGA1`, `HDMI1`, そして `DP1` 端子の 4 つの出力を確認できます。 + プロジェクタは `VGA1` 出力に接続されています。 情報を得られたので、man:xrandr[1] を使ってプロジェクタの標準の解像度に設定し、 デスクトップの右側にスペースを追加できます。 + [source,bash] .... % xrandr --output VGA1 --auto --right-of LVDS1 .... + この設定において、`--auto` は、 EDID により検出された解像度とリフレッシュレートを選択します。 解像度を正しく検出できていない場合には、 `--auto` のかわりに、 `--mode` を使うことで、 解像度を固定値を与えることにより設定できます。 たとえば、ほとんどのプロジェクタでは 1024x768 の解像度で使用できるので、 この場合には、`--mode 1024x768` のように設定できます。 + man:xrandr[1] は、X を起動する際に、 適切なモードを設定するように、しばしば [.filename]#.xinitrc# から実行されます。 [[x-config-monitors-files]] モニタ解像度をファイルで設定する。:: コンフィグレーションファイルでスクリーンの解像度を 1024x768 と設定するには以下のようにしてください。 + .スクリーンの解像度をファイルで設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf# [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" SubSection "Display" Modes "1024x768" EndSubSection EndSection .... ==== + EDID を持っていないモニタもあります。その場合には、 モニタが対応している周波数の範囲を、 `HorizSync` および `VertRefresh` で、指定することで設定できます。 + .手動でモニタの周波数を設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf# [.programlisting] .... Section "Monitor" Identifier "Monitor0" HorizSync 30-83 # kHz VertRefresh 50-76 # Hz EndSection .... ==== [[x-config-input]] === 入力デバイス [[x-config-input-keyboard]] ==== キーボード [[x-config-input-keyboard-layout]] キーボードレイアウト:: キーボード上の標準化されたキーの位置を _レイアウト_ と呼びます。 レイアウトと他の調整可能なパラメータについては、 man:xkeyboard-config[7] にまとめられています。 + アメリカ合衆国のレイアウトがデフォルトです。 他のレイアウトを選択するには、 `InputClass` で、 `XkbLayout` および `XkbVariant` オプションを設定してください。 クラスに対応するすべての入力デバイスに適用できます。 + 以下の例では、 フランス語のキーボードレイアウトを選択しています。 + .キーボードレイアウトを選択する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-fr.conf# [.programlisting] .... Section "InputClass" Identifier "KeyboardDefaults" MatchIsKeyboard "on" Option "XkbLayout" "fr" EndSection .... ==== + .複数のキーボードレイアウトを選択する。 [example] ==== アメリカ合衆国、スペイン、 ウクライナのキーボードレイアウトを、 kbd:[Alt+Shift] によって切り替えるようにするには以下のように設定します。 レイアウトスイッチングコントロールや現在のレイアウトインディケータを改良するには、 package:x11/xxkb[] または、 package:x11/sbxkb[] を使ってください。 [.filename]#/usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf# [.programlisting] .... Section "InputClass" Identifier "All Keyboards" MatchIsKeyboard "yes" Option "XkbLayout" "us, es, ua" EndSection .... ==== [[x-config-input-keyboard-zap]] キーボードから Xorg を終了する。:: X をキーの組み合わせで終了できるように設定できます。 デフォルトでは、幾つかのアプリケーションで、 キーボードコマンドと衝突してしまう可能性があるため、 このキーの組み合わせは設定されていません。 このオプションを有効にするには、 キーボードの `InputDevice` セクションを変更してください。 + .キーボードからの X の終了を有効にする。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf# [.programlisting] .... Section "InputClass" Identifier "KeyboardDefaults" MatchIsKeyboard "on" Option "XkbOptions" "terminate:ctrl_alt_bksp" EndSection .... ==== [[x11-input-mice]] ==== マウスおよびポインティングデバイス [IMPORTANT] ==== もし FreeBSD {rel121-current} において、 man:moused[8] を使わず、 package:xorg-server[] 1.20.8 以降を使用しているのであれば、 [.filename]#/etc/sysctl.conf# に、 `kern.evdev.rcpt_mask=12` を追加してください。 ==== コンフィグレーションオプションにより、 多くのマウスパラメータを調整できます。 すべての一覧については、man:mousedrv[4] をご覧ください。 [[x11-input-mice-buttons]] マウスボタン:: [.filename]#xorg.conf# のマウス `InputDevice` セクションで、 マウスのボタンの数を設定できます。 ボタンの数を 7 に設定するには、 以下のように設定してください。 + .マウスボタンの数を設定する。 [example] ==== [.filename]#/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf# [.programlisting] .... Section "InputDevice" Identifier "Mouse0" Option "Buttons" "7" EndSection .... ==== [[x-config-manual-configuration]] === 手動による設定 ハードウェアによっては、Xorg の自動設定で適切な設定が行われなかったり、 自動設定とは別の設定にしたいときがあります。 そのような場合のため、 カスタムコンフィグレーションファイルを作成できます。 [WARNING] ==== - 自動認識に失敗したとき以外は、 手動で設定ファイルを作成しないでください。 不必要な手動の設定を行った結果、 適切に動作しなくなるということがあります。 ==== 検出されたハードウェアをベースとした、 Xorg のコンフィグレーションファイルを作成できます。 このファイルは、 カスタムコンフィグレーションファイルの最初の出発点として有用です。 以下のようにすると [.filename]#xorg.conf# が生成されます。 [source,bash] .... # Xorg -configure .... このコンフィグレーションファイルは、 [.filename]#/root/xorg.conf.new# として保存されます。 必要となる変更を行った後、このファイルを (バックグラウンドが表示されるように `-retro` を使って) テストしてください。 [source,bash] .... # Xorg -retro -config /root/xorg.conf.new .... 新しい設定を調整してテストしたら、 ファイルに分割して、標準の場所である、 [.filename]#/usr/local/etc/X11/xorg.conf.d/# に置いてください。 [[x-fonts]] == Xorg でのフォントの使用 [[type1]] === Type1 フォント Xorg に付いてくるデフォルトのフォントは、 通常のデスクトップパブリッシングアプリケーションにとっては理想的とは言えない程度のものです。 文字を大きくするとジャギーになりプロフェッショナルとは言えないようなものになりますし、 小さなフォントは頭が悪そうに見えます。 しかし、世の中には質の高い Type1 (PostScript(R)) フォントがいくつかあり、 Xorg ではそれらを簡単に利用することができます。 例えば、URW フォントコレクション (package:x11-fonts/urwfonts[]) には高品質の Type1 フォント (Times Roman(TM), Helvetica(TM), Palatino(TM) など) が含まれています。freefont コレクション (package:x11-fonts/freefonts[]) にはもっとたくさんのフォントが含まれていますが、 それらは Gimp のようなグラフィックソフトウェアで使用するためのものであり、 スクリーンフォントとしては十分ではありません。 さらに、Xorg は簡単に TrueType(R) フォントを使うように設定することも可能です。 詳しくは、man:X[7] のマニュアルページか <> を参照してください。 上記の Type1 フォントコレクションをバイナリ package からインストールする場合には、次のコマンドを実行してください。 [source,bash] .... # pkg install urwfonts .... あるいは、Ports Collection から構築してインストールするには次のコマンドを実行してください。 [source,bash] .... # cd /usr/ports/x11-fonts/urwfonts # make install clean .... freefont や他のコレクションでも同じようにします。 X サーバがこれらのフォントを検出できるようにするには X サーバ設定ファイル ([.filename]#/etc/X11/xorg.conf#) の適切な場所に次のような行を加えます。 [.programlisting] .... -FontPath "/usr/local/shared/fonts/urwfonts/" +FontPath "/usr/local/share/fonts/urwfonts/" .... 別の方法としては、 X のセッション中に次のようなコマンドラインを実行します。 [source,bash] .... -% xset fp+ /usr/local/shared/fonts/urwfonts +% xset fp+ /usr/local/share/fonts/urwfonts % xset fp rehash .... これは動くのですが、X のセッションが終了すると消えてしまいます。 消えないようにするには X の起動時に読み込まれるファイル (通常の `startx` セッションの場合は [.filename]#~/.xinitrc#, XDM のようなグラフィカルなログインマネージャを通してログインする時は [.filename]#~/.xsession#) に加えておきます。 三番目の方法は新しい [.filename]#/usr/local/etc/fonts/local.conf# ファイルを使うことです。 これに関しては <> をご覧ください。 [[truetype]] === TrueType(R) フォント Xorg には、 TrueType(R) フォントのレンダリング機能が組み込まれています。 この機能を実現するために 2 つの異なるモジュールがあります。 ここでは、freetype の方が他のフォントレンダリングバックエンドと整合性が高いので、 このモジュールを使うことにします。 freetype モジュールを使うためには [.filename]#/etc/X11/xorg.conf# ファイルの `"Module"` セクションに以下の行を追加するだけです。 [.programlisting] .... Load "freetype" .... -さて、まずは TrueType(R) フォント用のディレクトリ (例えば [.filename]#/usr/local/shared/fonts/TrueType#) を作り、そこに TrueType(R) フォントをすべて放り込みましょう。 Apple(R) Mac(R) の TrueType(R) フォントは、そのままでは使うことができませんので注意してください。 Xorg で使うには UNIX(R)/MS-DOS(R)/Windows(R) 用のフォーマットでなければなりません。 ファイルを置いたら mkfontscale を使って [.filename]#fonts.dir# ファイルを作り、 X のフォントレンダラが新しいファイルがイントールされたことを分かるようにしてください。 `mkfontscale` は package からインストールできます。 +さて、まずは TrueType(R) フォント用のディレクトリ (例えば [.filename]#/usr/local/share/fonts/TrueType#) を作り、そこに TrueType(R) フォントをすべて放り込みましょう。 Apple(R) Mac(R) の TrueType(R) フォントは、そのままでは使うことができませんので注意してください。 Xorg で使うには UNIX(R)/MS-DOS(R)/Windows(R) 用のフォーマットでなければなりません。 ファイルを置いたら mkfontscale を使って [.filename]#fonts.dir# ファイルを作り、 X のフォントレンダラが新しいファイルがイントールされたことを分かるようにしてください。 `mkfontscale` は package からインストールできます。 [source,bash] .... # pkg install mkfontscale .... その後、ディレクトリに X フォントファイルのインデックスを作成してください。 [source,bash] .... -# cd /usr/local/shared/fonts/TrueType +# cd /usr/local/share/fonts/TrueType # mkfontscale .... 次に TrueType(R) フォントのディレクトリをフォントパスに追加します。 <> の場合と同じように、 [source,bash] .... -% xset fp+ /usr/local/shared/fonts/TrueType +% xset fp+ /usr/local/share/fonts/TrueType % xset fp rehash .... とするか、もしくは [.filename]#xorg.conf# ファイルに `FontPath` 行を追加します。 -これで Gimp や Apache OpenOffice といったすべての X アプリケーションから TrueType(R) フォントを使うことができます。 (高解像度なディスプレイで見るウェブページ上のテキストみたいな) とても小さなフォントや (StarOffice(TM) にあるような) 非常に大きなフォントもかなり綺麗に見えるようになることでしょう。 +これで Gimp や LibreOffice といったすべての X アプリケーションから TrueType(R) フォントを使うことができます。 (高解像度なディスプレイで見るウェブページ上のテキストみたいな) とても小さなフォントや (LibreOffice にあるような) 非常に大きなフォントもかなり綺麗に見えるようになることでしょう。 [[antialias]] === フォントのアンチエイリアス -[.filename]#/usr/local/shared/fonts/# と [.filename]#~/.fonts/# にあるすべての Xorg のフォントが、Xft に対応しているアプリケーションで自動的にアンチエイリアス表示できるようになりました。 KDE, GNOME および Firefox のような最新のアプリケーションは、Xft に対応しています。 +[.filename]#/usr/local/share/fonts/# と [.filename]#~/.fonts/# にあるすべての Xorg のフォントが、Xft に対応しているアプリケーションで自動的にアンチエイリアス表示できるようになりました。 KDE, GNOME および Firefox のような最新のアプリケーションは、Xft に対応しています。 どのフォントがアンチエイリアスされるかを制御するため、 もしくはアンチエイリアスの特性を設定するために、 [.filename]#/usr/local/etc/fonts/local.conf# ファイルを作成 (すでに存在しているのなら編集) します。 多くの Xft フォントシステムの高度な機能をこのファイルを使って調整できます。 この節ではいくつか簡単なところだけを紹介します。 詳しくは、man:fonts-conf[5] をご覧ください。 このファイルは XML 形式でなければなりません。 大文字小文字の区別に注意を払い、 すべてのタグが正しく閉じられているか確認してください。 ファイルは一般的な XML ヘッダで始まり、DOCTYPE 定義と `` タグがその後にきます。 [.programlisting] .... .... -すでに説明したように、 [.filename]#/usr/local/shared/fonts/# と [.filename]#~/.fonts/# にあるすべてのフォントは Xft 対応のアプリケーションで利用できます。 これら 2 つのディレクトリ以外に別のディレクトリを追加したいなら、 [.filename]#/usr/local/etc/fonts/local.conf# に以下のような行を追加してください。 +すでに説明したように、 [.filename]#/usr/local/share/fonts/# と [.filename]#~/.fonts/# にあるすべてのフォントは Xft 対応のアプリケーションで利用できます。 これら 2 つのディレクトリ以外に別のディレクトリを追加したいなら、 [.filename]#/usr/local/etc/fonts/local.conf# に以下のような行を追加してください。 [.programlisting] .... /path/to/my/fonts .... 新しいフォント、 特に新しいフォントディレクトリを追加したら、 フォントキャッシュを再構築してください。 [source,bash] .... # fc-cache -f .... アンチエイリアスをかけることによって境界が少しぼやけ、 そのためにとても小さなテキストはさらに読みやすくなり、 大きなフォントでは "ギザギザ" が消えるのです。 しかし、普通のテキストにかけた場合には目が疲れてしまうこともあります。 14 ポイント以下のサイズのフォントについて、 アンチエイリアスをかけないようにするには次の行を加えます。 [.programlisting] .... 14 false 14 false .... いくつかの等幅フォントは、 アンチエイリアスをかけるとスペーシングがうまくいかなくなる場合があります。 特に KDE でその傾向があるようです。 解決策の一つとして、そういったフォントのスペーシングを 100 に設定する方法があります。 そうするためには次の行を加えてください。 [.programlisting] .... fixed mono console mono .... (これは固定サイズのフォントに `"mono"` という一般的な別名をつけます) そして以下を追加します。 [.programlisting] .... mono 100 .... Helvetica の様なある種のフォントは、 アンチエイリアスすると問題が起こるでしょう。 たいてい、フォントが縦に半分に切られて表示されます。 最悪の場合、アプリケーションがクラッシュします。 これを回避するには、以下を [.filename]#local.conf# に追加します。 [.programlisting] .... Helvetica sans-serif .... [.filename]#local.conf# の編集を終えたら、 ファイルの末尾が `` タグで終わるようにしてください。 これを行わなければ、変更は無視されるでしょう。 ユーザは自分だけの設定を各自の [.filename]#~/.config/fontconfig/fonts.conf# に追加できます。 このファイルもこれまでの説明と同じく XML 形式を使います。 最後に一つ。LCD スクリーンではサブピクセルサンプリングが必要な場合があります。 これは、基本的には (水平方向に分かれている) 赤、緑、 青の各コンポーネントを別々に扱うことによって水平方向の解像度を良くするというもので、 劇的な結果が得られます。 これを有効にするには [.filename]#local.conf# ファイルに次の行を加えます。 [.programlisting] .... unknown rgb .... [NOTE] ==== ディスプレイの種類にもよりますが、 `rgb` ではなく `bgr` や `vrgb`、もしくは `vbgr` の場合もあるので、 試してみて最も良いものを使ってください。 ==== [[x-xdm]] == X ディスプレイマネージャ Xorg は、 ログインセッションの管理に用いることのできる X ディスプレイマネージャ XDM を提供しています。XDM はどのディスプレイサーバに接続するかを選択でき、 ログイン名とパスワードの組み合わせなど認証情報を入力できるグラフィカルなインタフェースを提供しています。 この章では、FreeBSD 上での X ディスプレイマネージャの設定方法について説明します。 デスクトップ環境によっては、 各環境独自のグラフィカルログインマネージャを提供しています。 GNOME ディスプレイマネージャの設定方法については、<> を参照してください。 また、KDE ディスプレイマネージャの設定方法については、<> を参照してください。 === XDM の設定 XDM をインストールするには、 package:x11/xdm[] package または port を使ってください。 インストール後、コンピュータの起動時に、 XDM を起動するように設定するには、 [.filename]#/etc/ttys# の以下のエントリを変更してください。 [source,bash] .... ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure .... `off` の部分を `on` に変更して、保存してください。 このエントリの `ttyv8` は、 XDM が 9 番目の仮想端末で起動することを示しています。 XDM の設定用ディレクトリは [.filename]#/usr/local/etc/X11/xdm# です。 このディレクトリには XDM の振る舞いや見た目を変更するために用いられるファイルや、 XDM の動作中にデスクトップを設定するためのスクリプトやプログラムがあります。 <> には、 これらのフィアルの機能についてまとめられています。 これらのファイルの正確な文法や使用方法については、man:xdm[1] に記述されています。 [[xdm-config-files]] .XDM 設定ファイル [cols="1,1", frame="none", options="header"] |=== | ファイル | 説明 |[.filename]#Xaccess# |XDM に接続するためのプロトコルは X Display Manager Connection Protocol (XDMCP) と呼ばれます。 このファイルにはリモートのマシンからの XDMCP 接続をコントロールするためのルールセットが書かれます。 デフォルトでは、どのクライアントからの接続も拒否します。 |[.filename]#Xresources# |このファイルは、XDM ディスプレイの chooser およびログインスクリーンを設定します。 デフォルトの設定は、シンプルな長方形のログインウィンドウで、 コンピュータのホスト名がログインウィンドウの上部に大きなフォントで表示され、 その下に "Login:" および "Password:" のプロンプトが表示されます。 このファイルのフォーマットは Xorg のドキュメントで記述されている app-defaults ファイルのものと同じです。 |[.filename]#Xservers# |これは、chooser がログインの選択肢として提供するローカルおよびリモートのディスプレイの一覧です。 |[.filename]#Xsession# |ユーザのログイン時に XDM により実行されるデフォルトのセッションスクリプトです。 [.filename]#~/.xsession# に置かれているカスタマイズされたセッションスクリプトが優先されます。 |[.filename]#Xsetup_#* |これらは chooser やログインインタフェースが表示される前に自動的に実行されるアプリケーションです。 それぞれのディスプレイに対して、[.filename]#Xsetup_*# (`*` はローカルのディスプレイ番号) という名前のついたスクリプトがあります。 典型的な使い方は `xconsole` のようなバックグラウンドで動かすプログラムを一つか二つ起動することです。 |[.filename]#xdm-config# |このマシンで動いているすべてのディスプレイのグローバルな設定 |[.filename]#xdm-errors# |このファイルにはサーバプログラムからのエラーが書き出されます。 XDM が起動しようとしているディスプレイがなんらかの理由でハングした場合、 このファイルのエラーメッセージを見てください。 これらのメッセージは各ユーザの [.filename]#~/.xsession-errors# ファイルにもセッション毎に書き出されます。 |[.filename]#xdm-pid# |現在動いている XDM のプロセス ID。 |=== === リモートアクセスの設定 デフォルトでは、XDM を使ってログインできるのは、同じシステムのユーザのみです。 あるディスプレイサーバに他のシステムのユーザが接続できるようにするためには、 アクセスコントロールのルールを編集し、 コネクションリスナを有効にする必要があります。 XDM が他のリモートコネクションを待ち受けるようにするためには、 [.filename]#/usr/local/etc/X11/xdm/xdm-config# の `DisplayManager.requestPort` 行を、行頭に `!` を置くことでコメントアウトしてください。 [source,bash] .... ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0 .... 変更点を保存して、XDM を再起動してください。リモートアクセスを制限するには、 [.filename]#/usr/local/etc/X11/xdm/Xaccess# にある例を参考にしたり、詳細について man:xdm[1] を参照してください。 [[x11-wm]] == デスクトップ環境 この節では、良く使われている 3 つのデスクトップ環境を FreeBSD 上でにインストールする方法について解説します。 デスクトップ環境とは、 単なるウィンドウマネージャから完全なデスクトップアプリケーションスイートまでカバーします。 Ports Collection の [.filename]#x11-wm# カテゴリには、 100 を超えるデスクトップ環境が用意されています。 [[x11-wm-gnome]] === GNOME GNOME はユーザフレンドリなデスクトップ環境です。 アプリケーションを起動したりステータスを表示するパネル、 デスクトップ、ツールおよびアプリケーション群、 そしてアプリケーションが互いにうまくやり取りできるような仕組みが含まれています。 FreeBSD 上の GNOME に関するもっと詳しい情報は、link:https://www.FreeBSD.org/gnome[https://www.FreeBSD.org/gnome] で見ることができます。 このウェブサイトには、FreeBSD での GNOME のインストール、設定、管理に関する多くの情報があります。 このデスクトップ環境は、package からインストールできます。 [source,bash] .... # pkg install gnome3 .... ports から GNOME を構築するには、以下のコマンドを実行してください。 GNOME は大きなアプリケーションなので、 コンパイルには高速のコンピュータでも時間がかかります。 [source,bash] .... # cd /usr/ports/x11/gnome3 # make install clean .... GNOME を使用するには、 [.filename]#/proc# ファイルシステムをマウントする必要があります。 以下を [.filename]#/etc/fstab# に追加して、 システムの起動中にこのファイルシステムをマウントするように設定してください。 [.programlisting] .... proc /proc procfs rw 0 0 .... GNOME は、 メッセージバスおよびハードウェアアブストラクションに D-Bus および HAL を使います。 これらのアプリケーションは、GNOME の依存として自動的にインストールされます。 [.filename]#/etc/rc.conf# の中で、 システムの起動時にスタートするように有効にしてください。 [.programlisting] .... dbus_enable="YES" hald_enable="YES" .... インストール後、 GNOME を起動するように Xorg を設定してください。 最も簡単な方法は、GNOME ディスプレイマネージャ GDM を使うことです。 GDM は、 GNOME package または port の一部としてインストールされます。 有効にするには、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... gdm_enable="YES" .... GNOME のすべてのサービスを、 起動するようにしておくと良いでしょう。 このように設定するには、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... gnome_enable="YES" .... システムを再起動すると、GDM が自動的に起動します。 GNOME を起動するもう一つの方法は、 [.filename]#.xinitrc# を適切に設定した後で、 コマンドラインから `startx` と入力する方法です。 [.filename]#.xinitrc# が既にある場合には、 ウィンドウマネージャを起動する行を [.filename]#/usr/local/bin/gnome-session# を起動するように変更してください。 このファイルが存在しなければ、 次のコマンドで作成してください。 [source,bash] .... % echo "exec /usr/local/bin/gnome-session" > ~/.xinitrc .... 3 つめの方法は、XDM をディスプレイマネージャとして使う方法です。 この場合は、実行可能な [.filename]#.xsession# というファイルを作成してください。 [source,bash] .... % echo "exec /usr/local/bin/gnome-session" > ~/.xsession .... [[x11-wm-kde]] === KDE -KDE はもう一つの使いやすいデスクトップ環境です。 このデスクトップは、統一されたルックアンドフィール、 標準化されたメニューおよびツールバー、 キーバインディング、カラースキーム、国際化、 一元化されたダイアログベースのデスクトップ設定とともに、 アプリケーションのスイートを提供します。 KDE の詳細については http://www.kde.org/[http://www.kde.org/] をご覧ください。 KDE に関する FreeBSD 特有の情報については、link:http://freebsd.kde.org/[http://freebsd.kde.org] をご覧ください。 +KDE はもう一つの使いやすいデスクトップ環境です。 このデスクトップは、統一されたルックアンドフィール、 標準化されたメニューおよびツールバー、 キーバインディング、カラースキーム、国際化、 一元化されたダイアログベースのデスクトップ設定とともに、 アプリケーションのスイートを提供します。 KDE の詳細については link:http://www.kde.org/[http://www.kde.org/] をご覧ください。 KDE に関する FreeBSD 特有の情報については、link:http://freebsd.kde.org/[http://freebsd.kde.org] をご覧ください。 KDE package をインストールするには以下のように実行してください。 [source,bash] .... # pkg install x11/kde5 .... KDE port を構築するには、以下のコマンドを使ってください。 port のインストールでは、 インストールするアプリケーションを選択するためのメニューが表示されます。 KDE は大きなアプリケーションなので、 高速のコンピュータでもコンパイルには時間がかかります。 [source,bash] .... # cd /usr/ports/x11/kde5 # make install clean .... KDE では、 [.filename]#/proc# ファイルシステムをマウントする必要があります。 以下の行を [.filename]#/etc/fstab# に追加して、 システム起動時にこのファイルシステムが自動的にマウントされるように設定してください。 [.programlisting] .... proc /proc procfs rw 0 0 .... KDE は、 メッセージバスおよびハードウェアアブストラクションに D-Bus および HAL を使います。 これらのアプリケーションは、KDE の依存として自動的にインストールされます。 [.filename]#/etc/rc.conf# の中で、 システムの起動時にスタートするように有効にしてください。 [.programlisting] .... dbus_enable="YES" hald_enable="YES" .... KDE Plasma 5 から KDE のディスプレイマネージャ KDM の開発は終了しました。 かわりに推奨されているのが SDDM です。 インストールするには、以下を実行してください。 [source,bash] .... # pkg install x11/sddm .... その後、以下の行を [.filename]#/etc/rc.conf# に追加してください。 [.programlisting] .... sddm_enable="YES" .... KDE Plasma を起動するもう一つの方法は、 コマンドラインから `startx` を実行する方法です。 このコマンドを実行するには、[.filename]#~/.xinitrc# に以下の行を追加してください。 [.programlisting] .... exec ck-launch-session startplasma-x11 .... KDE Plasma を起動する 3 つめの方法は、 XDM を利用する方法です。 この方法を使うには、以下のようにして実行可能な [.filename]#~/.xsession# を作成してください。 [source,bash] .... % echo "exec ck-launch-session startplasma-x11" > ~/.xsession .... KDE Plasma を起動した後は、 ビルトインヘルプシステムから、 さまざまなメニューおよびアプリケーションの使用方法などのより詳しい情報を参照できます。 [[x11-wm-xfce]] === Xfce -Xfce は GNOME で使われている GTK+ ツールキットをベースにしたデスクトップ環境ですが、より軽量、 シンプルでかつ効率的でありながら使いやすいデスクトップ環境です。 すべての設定が可能で、メニュー、 アプレットおよびアプリケーションランチャを含むメインパネル、 ファイルマネージャ、サウンドマネージャを提供し、 テーマに対応しています。 速くて軽く、効率的なため、古いマシンや遅いマシン、 メモリの限られたマシンに向いています。 Xfce に関する詳しい情報は http://www.xfce.org/[http://www.xfce.org] で得られます。 +Xfce は GNOME で使われている GTK+ ツールキットをベースにしたデスクトップ環境ですが、より軽量、 シンプルでかつ効率的でありながら使いやすいデスクトップ環境です。 すべての設定が可能で、メニュー、 アプレットおよびアプリケーションランチャを含むメインパネル、 ファイルマネージャ、サウンドマネージャを提供し、 テーマに対応しています。 速くて軽く、効率的なため、古いマシンや遅いマシン、 メモリの限られたマシンに向いています。 Xfce に関する詳しい情報は link:http://www.xfce.org/[http://www.xfce.org] で得られます。 Xfce package をインストールするには、次のように実行してください。 [source,bash] .... # pkg install xfce .... また、port を構築するには以下のようにしてください。 [source,bash] .... # cd /usr/ports/x11-wm/xfce4 # make install clean .... Xfce は、 メッセージバスに D-Bus を使います。 これらのアプリケーションは Xfce の依存として自動的にインストールされます。 [.filename]#/etc/rc.conf# において、 システム起動時に起動するように有効にしてください。 [.programlisting] .... dbus_enable="YES" .... GNOME や KDE とは異なり、 Xfce は、 ログインマネージャを提供していません。 コマンドラインから `startx` を実行して Xfce を起動するには、 以下のコマンドを使って、 [.filename]#~/.xinitrc# を作成してください。 [source,bash] .... % echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc .... もう一つの方法は XDM を用いる方法です。この方法を使うには、 実行可能な [.filename]#.xsession# を作成してください。 [source,bash] .... % echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xsession .... [[x-compiz-fusion]] == Compiz Fusion のインストール 魅力的な 3D 効果を使うと、 デスクトップコンピュータを使う楽しさがさらに増えることでしょう。 Compiz Fusion のインストールは簡単ですが、設定の際には、port の文書には記載されていないような作業が必要となることがあります。 [[x-compiz-video-card]] === FreeBSD nVidia ドライバの設定 デスクトップ効果は、 グラフィックカードに極めて高い負荷をかけることがあります。 nVidia ベースのグラフィックカードにおいて、 良いパフォーマンスを出すには、 プロプリエタリなドライバが必要となります。 他のグラフィックカードを使っているユーザは、この節を飛ばし、 [.filename]#xorg.conf# の設定に進んでください。 必要となる nVidia ドライバについては、 link:{faq}#idp59950544[この問題に関する FAQ ] を参照して決めてください。 使用しているカードに対する適切なドライバが決まれば、 インストール作業は他の package をインストールするのと同じように簡単です。 たとえば、 最新のドライバをインストールするには以下のように実行してください。 [source,bash] .... # pkg install x11/nvidia-driver .... このドライバはカーネルモジュールを作成するので、 このモジュールをシステムの起動時に読み込むように設定してください。 以下の行を [.filename]#/boot/loader.conf# に追加してください。 [.programlisting] .... nvidia_load="YES" .... [NOTE] ==== 動作しているカーネルに、 カーネルモジュールを今すぐ読み込ませるには、 `kldload nvidia` のようなコマンドを実行してください。 しかしながら、Xorg のバージョンによっては、 起動時にドライバが読み込まれていないと正しく動かないもありますので、 注意してください。[.filename]#/boot/loader.conf# を編集後は、再起動してください。 ==== 読み込まれたカーネルモジュールを使うには、 通常は、[.filename]#xorg.conf# ファイルの一つの行をプロプリエタリなドライバを使うように変更するだけです。 [.filename]#/etc/X11/xorg.conf# において、 以下の行を探し出してください。 [.programlisting] .... Driver "nv" .... この行を以下のように変更してください。 [.programlisting] .... Driver "nvidia" .... いつものように GUI を起動すると、nVidia のスプラッシュが表示されます。 すべてはこれまで通りに動作するはずです。 [[xorg-configuration]] === デスクトップ効果のための xorg.conf の設定 Compiz Fusion を有効にするには [.filename]#/etc/X11/xorg.conf# を変更する必要があります。 コンポジット効果を有効にするには、 以下のセクションを追加してください。 [.programlisting] .... Section "Extensions" Option "Composite" "Enable" EndSection .... 以下のような "Screen" セクションの場所を見つけてください。 [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" ... .... ("Monitor" の後に) 次の二つの行を追加してください。 [.programlisting] .... DefaultDepth 24 Option "AddARGBGLXVisuals" "True" .... あなたが使用したいと考えているスクリーン解像度に対応する "Subsection" を探してください。 たとえば、1280x1024 を使用する予定であれば、 次のようなセクションを探してください。 もし希望の解像度の subsection がなければ、 手動でそのエントリを追加してください。 [.programlisting] .... SubSection "Display" Viewport 0 0 Modes "1280x1024" EndSubSection .... デスクトップコンポジットで 24 ビットのカラーが必要であれば、上述の subsection を以下のように変更してください。 [.programlisting] .... SubSection "Display" Viewport 0 0 Depth 24 Modes "1280x1024" EndSubSection .... 最後に、"Module" セクションに "glx" および "extmod" モジュールが読み込まれるように設定されていることを確認してください。 [.programlisting] .... Section "Module" Load "extmod" Load "glx" ... .... -前述の設定は、 package:x11/nvidia-xconfig[] を (root 権限で) 実行することで自動的に設定できます。 +前述の設定は、 package:x11/nvidia-xconfig[] を (`root` 権限で) 実行することで自動的に設定できます。 [source,bash] .... # nvidia-xconfig --add-argb-glx-visuals # nvidia-xconfig --composite # nvidia-xconfig --depth=24 .... + [[compiz-fusion]] === Compiz Fusion のインストールおよび設定 Compiz Fusion のインストールは、 他の package と同様に簡単です。 [source,bash] .... # pkg install x11-wm/compiz-fusion .... インストールが終了したら、グラフィックデスクトップを起動して、 端末から以下のコマンドを通常のユーザで実行してください。 [source,bash] .... % compiz --replace --sm-disable --ignore-desktop-hints ccp & % emerald --replace & .... 使っているウィンドウマネージャ (GNOME では、Metacity) が、 Compiz Fusion に置き換えられるため、 画面は数秒間ちらつきます。 Emerald がウィンドウデコレーション (たとえば、閉じる、最小化、最大化ボタンタイトルバーなど) を取り扱います。 このコマンドをスクリプトに変換して、 (たとえば GNOME デスクトップの "Sessions" に追加して) 起動時に自動的に実行されるようにすることもできます。 [.programlisting] .... #! /bin/sh compiz --replace --sm-disable --ignore-desktop-hints ccp & emerald --replace & .... これを、たとえば [.filename]#start-compiz# という名前でホームディレクトリに保存して、 以下のように実行可能にしてください。 [source,bash] .... % chmod +x ~/start-compiz .... GUI を使って、このスクリプトを (GNOME デスクトップの [.guimenuitem]#System#, [.guimenuitem]#Preferences#, [.guimenuitem]#Sessions# にある) [.guimenuitem]#Startup Programs# に追加してください。 すべての希望する効果と設定を選択するには、 (もう一度通常のユーザで) Compiz Config Settings Manager を実行してください。 [source,bash] .... % ccsm .... [NOTE] ==== GNOME では、 [.guimenuitem]#System#, [.guimenuitem]#Preferences# メニューから選択することも出来ます。 ==== ビルドの際に "gconf support" を選択していたのであれば、 `gconf-editor` を使って `apps/compiz` 以下を見ることで、 これらの設定を確認することも出来ます。 [[x11-troubleshooting]] == トラブルシューティング もしマウスが動作しなければ、 先へ進む前にマウスの設定を行う必要があります。 最近の Xorg では、デバイスの自動認識のため、 [.filename]#xorg.conf# の `InputDevice` セクションは無視されます。 古い設定の記述を利用するには、 このファイルの `ServerLayout` もしくは、 `ServerFlags` セクションに以下の行を追加してください。 [.programlisting] .... Option "AutoAddDevices" "false" .... これで、以前のバージョンのように、入力デバイスを (キーボードレイアウトの変更のように) 必要なオプションを用いて設定できるようになります。 [NOTE] ==== すでに説明したように、デフォルトで hald デーモンがキーボードを自動的に認識します。 キーボードレイアウトやモデルを正しく認識しない場合でも、 GNOME, KDE もしくは Xfce のようなデスクトップ環境が、 キーボードの設定ツールを提供しています。 しかしながら、 man:setxkbmap[1] ユーティリティや hald の設定ルールを利用することで、 キーボードのプロパティを直接設定できます。 たとえば、フランス語のレイアウトの PC 102 キーボードを使いたい場合には、 hald のキーボード設定ファイル [.filename]#x11-input.fdi# を作成し、 [.filename]#/usr/local/etc/hal/fdi/policy# ディレクトリに保存してください。 このファイルは以下を含んでいる必要があります。 [.programlisting] .... pc102 fr .... このファイルがすでに存在する場合には、 キーボードの設定に関する部分をただ単にコピーし、 ファイルに追加してください。 hald がこのファイルを読み込むように、 コンピュータを再起動してください。 X 端末やスクリプトから以下のコマンドラインを実行することでも、 同様に設定できます。 [source,bash] .... % setxkbmap -model pc102 -layout fr .... -[.filename]#/usr/local/shared/X11/xkb/rules/base.lst# には、利用可能なキーボード、 レイアウトおよびオプションの一覧があります。 +[.filename]#/usr/local/share/X11/xkb/rules/base.lst# には、利用可能なキーボード、 レイアウトおよびオプションの一覧があります。 ==== [.filename]#xorg.conf.new# 設定ファイルを好みに合うように調整できます。 man:emacs[1] や man:ee[1] のようなテキストエディタでファイルを開いてください。 古いモニタや、通常とは異なるモデルで、 同期周波数の自動認識に対応していない場合には、 以下のような設定を [.filename]#xorg.conf.new# の `"Monitor"` セクションの下に加えてください。 [.programlisting] .... Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection .... ほとんどのモニタは同期周波数の自動認識に対応しているので、 これらの値を手動で入力する必要はありません。 自動認識に対応していないモニタでは、 ダメージの可能性を避けるため、 メーカーが提供している値のみを入力してください。 X はモニタが対応していれば DPMS (Energy Star) 機能を使うことができます。 man:xset[1] プログラムでタイムアウトをコントロールしたり、 強制的にスタンバイ、サスペンドや電源オフにすることができます。 モニタの DPMS 機能を有効にしたい場合は、 `"Monitor"` セクションに次の行を加えてください。 [.programlisting] .... Option "DPMS" .... [.filename]#xorg.conf.new# 設定ファイルはエディタで開いたままにしておき、 デフォルトの解像度と色数を好みで選んでください。 `"Screen"` セクションで定義されます。 [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection .... `DefaultDepth` というキーワードは 実行時のデフォルトの色数について記述するためのものです。 man:Xorg[1] のコマンドラインスイッチ `-depth` が使用された場合はそちらが優先されます。 `Modes` というキーワードは、 与えられた色数におけるデフォルトの解像度を記述しておくためのものです。 ターゲットのシステムのグラフィックハードウェアによって定義されている、 VESA スタンダードモードのみがサポートされていることに注意してください。 上の例ではデフォルトの色数はピクセルあたり 24 ビットであり、 この色数での解像度は 1024 ピクセル× 768 ピクセルです。 最後に、設定ファイルを保存し、 上の例にあるようにテストしてみてください。 [NOTE] ==== トラブルシューティングの過程で助けとなるツールのひとつに Xorg のログファイルがあります。 これには、Xorg サーバが検知したデバイスそれぞれについての情報があります。 Xorg のログファイル名は [.filename]#/var/log/Xorg.0.log# という形式です。実際のログファイル名は [.filename]#Xorg.0.log# から [.filename]#Xorg.8.log# のように変わります。 ==== すべてうまくいったなら、設定ファイルを man:Xorg[1] が見つけることができる共通の場所に置きます。 これは、通常は [.filename]#/etc/X11/xorg.conf# や [.filename]#/usr/local/etc/X11/xorg.conf# です。 [source,bash] .... # cp xorg.conf.new /etc/X11/xorg.conf .... これで Xorg の設定は完了です。 man:startx[1] ユーティリティで Xorg を起動できます。 man:xdm[1] を使って Xorg サーバを起動することもできます。 === Intel(R) `i810` グラフィックチップセットの設定 Intel(R) i810 統合チップセットを設定するには、 Xorg にカードを制御させるために AGP プログラミングインタフェースである [.filename]#agpgart# が必要になります。 詳しくは、man:agp[4] ドライバのマニュアルページをご覧ください。 このドライバを用いることで、 他のグラフィックボードと同様に設定を行うことができるようになります。 カーネルに man:agp[4] ドライバが組み込まれていないシステムでは、 このモジュールを man:kldload[8] を使って読み込もうとしても動作しないことに注意してください。 このドライバは、 起動時にカーネル内に存在するようにカーネル内部に組み込むか、 [.filename]#/boot/loader.conf# を使わなければなりません。 === ワイドスクリーンフラットパネルの追加 この節では、設定に関する幾分高度な知識を必要とします。 これまでに述べた標準ツールを使って設定に失敗する場合は、 ログファイルを参照してください。 ログファイルには、 設定のために有用な情報が十分含まれています。 テキストエディタを使用する必要があるでしょう。 現在のワイドスクリーン (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+ など) は、 16:10 や 10:9 形式、または (問題を含む可能性のある) 他のアスペクト比に対応しています。 以下は、16:10 アスペクト比のスクリーン解像度の例です。 * 2560x1600 * 1920x1200 * 1680x1050 * 1440x900 * 1280x800 これらの解像度のひとつを以下のように `"Screen" セクション` の 可能な `Mode` に追加してください。 [.programlisting] .... Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1680x1050" EndSubSection EndSection .... Xorg は、I2C/DDC 情報を通してワイドスクリーンの解像度に関する情報を取得できるので、 モニタの周波数や解像度の範囲を把握しています。 もし、これらの `ModeLines` がドライバに存在しないのであれば、 Xorg にヒントを与えなけれならないでしょう。 `ModeLine` を手動で設定するのに十分な情報を [.filename]#/var/log/Xorg.0.log# から得ることができます。 以下のような情報を探してください。 [.programlisting] .... (II) MGA(0): Supported additional Video Mode: (II) MGA(0): clock: 146.2 MHz Image Size: 433 x 271 mm (II) MGA(0): h_active: 1680 h_sync: 1784 h_sync_end 1960 h_blank_end 2240 h_border: 0 (II) MGA(0): v_active: 1050 v_sync: 1053 v_sync_end 1059 v_blanking: 1089 v_border: 0 (II) MGA(0): Ranges: V min: 48 V max: 85 Hz, H min: 30 H max: 94 kHz, PixClock max 170 MHz .... これは EDID と呼ばれる情報です。 この情報を用いて `ModeLine` を作成するには、 正しい順番に数字を入力するだけです。 [.programlisting] .... ModeLine <4 horiz. timings> <4 vert. timings> .... この例では `Monitor セクション` の `ModeLine` は以下のようになります。 [.programlisting] .... Section "Monitor" Identifier "Monitor1" VendorName "Bigname" ModelName "BestModel" ModeLine "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089 Option "DPMS" EndSection .... 以上の簡単な編集作業が終わったら、 新しいワイドスクリーンモニタ上で X が動作するでしょう。 [[compiz-troubleshooting]] === Compiz Fusion 使用時のトラブルシューティング ==== Compiz Fusion をインストールし、説明されたようにコマンドを実行すると、 ウィンドウのタイトルバーやボタンが表示されません。 何が問題でしょうか? おそらく [.filename]#/etc/X11/xorg.conf# の設定が行われていていないのでしょう。 このファイルを詳細に確認してください。特に `DefaultDepth` および `AddARGBGLXVisuals` ディレクティブを確認してください。 ==== Compiz Fusion を起動するコマンドを実行すると、X サーバがクラッシュし、 コンソールに戻ります。何が問題でしょうか? [.filename]#/var/log/Xorg.0.log# ファイルを確認すると、 X の起動時のエラーメッセージを探し出すことができます。 多くの場合は、以下のようなものです。 [source,bash] .... (EE) NVIDIA(0): Failed to initialize the GLX module; please check in your X (EE) NVIDIA(0): log file that the GLX module has been loaded in your X (EE) NVIDIA(0): server, and that the module is the NVIDIA GLX module. If (EE) NVIDIA(0): you continue to encounter problems, Please try (EE) NVIDIA(0): reinstalling the NVIDIA driver. .... これは通常 Xorg をアップグレードした時に起きる現象です。 package:x11/nvidia-driver[] package をインストールして glx を再構築してください。