この記事では AFS および Kerberos の基本的な概要を紹介した後、OpenAFS 安定版リリース 1.4.14 を使用して RedHat Enterprise Linux 6 で AFS を構成しますが、この構成手順は他の Linux ディストリビューションや他の OpenAFS リリースでもほとんど、あるいはまったく変わりません。この記事では最初に Kerberos 5 サービス、次に OpenAFS の順で構成します。
IBM AFS (および OpenAFS) は、連携して動作するホストの間でファイルシステム・リソースを共有し、クライアントが LAN (Local Area Network) と WAN (Wide Area Network) の両方でこれらのリソースを使用できるようにするという、クライアント・サーバー・アーキテクチャーでのネットワーク・ベースの分散ファイルシステムです。AFS は当初、ペンシルバニア州ピッツバーグにあるカーネギー・メロン大学の Information Technology Center で開発されました。AFS には以下の主要な長所があります。
- グローバル名前空間
- ロケーションの透過性
- キャッシング機能
- スケーラビリティー
- セキュリティー機能
- 堅牢な通信プロトコル
これらの特徴により、AFS は開発されてからかなり長い年月が経った今でも、分散ファイルシステムの草分けとして知られています。現在使用されているすべての主要なプラットフォームでは、AFS を使用することができます。
アーキテクチャーについて言うと、AFS のコンポーネントにはサーバーとクライアントの 2 つがあります。以下に、AFS アーキテクチャーについて簡単に説明します。
- サーバー・コンポーネント (Vice) — AFS サーバーは、BOS Server (Basic OverSeer Server) と呼ばれるスーパー・サーバーによって監視されます。マシン上での AFS プロセスの正常性を監視する BOS Server は、これらのプロセスを開始、停止、中断、再開したり、新しいサーバー・バイナリーを更新したりするためにも使用される場合があります。BOS Server 以外のサーバーは、データベースとファイルという 2 つのカテゴリーに分かれます。
- データベース・サーバー — 以下のサーバーは、データベース・サーバーのカテゴリーに属します。
- バックアップ・サーバー (buserver) — バックアップ・データベースの保守を行い、データベース・サーバー上でのすべてのバックアップ操作を管理します。
- ボリューム・ロケーション・サーバー (vlserver) — ボリューム・ロケーション・データベース (VLDB) の保守を行い、すべてのボリュームとそのファイル・サーバー上でのロケーションに関する情報を追跡します。AFS ボリュームについては、以下の説明を参照してください。vlserver がサポートする操作には、ボリュームのロケーションおよびステータスのクエリー、ボリューム ID の管理、VLDB エントリーの作成、削除、変更などがあります。
- 保護サーバー (ptserver) — 保護データベース (PDB) の保守を行います。PDB は、ユーザー名またはグループ名を、数値による内部 AFS ID にマッピングするデータベースです。ptserver は、所有権およびメンバーシップを作成、破棄、変更、照会する際にも使用されます。
- 認証サーバー (kaserver) — ユーザーの認証に使用する認証データベースの保守を行います。また、認証に成功したクライアントに対し、認証チケットで応答します。
- ファイル・サーバー
- ファイル・サーバー (fileserver) — 適切に認証されたクライアントのリクエストがアクセスできるように、AFS ボリューム内にあるファイルとディレクトリーに設定を行います。このサーバーは、フラット・ファイル・サービスを提供します。
- サルベージ・サーバー (salvager) — ファイル・サーバー上の AFS ボリュームに格納されたデータを回復するための最大限の努力を行います。
- ボリューム・サーバー (volser) — AFS ボリュームに関する管理タスク (作成、再配置、削除、複製など) を許可します。
- クライアント・コンポーネント (Venus) — AFS クライアント (afsd) は、一連のデーモンの支援によって、AFS キャッシュの管理に対処します。クライアント・コンポーネントは、ローカル・ディスクへのキャッシングとメモリー内のキャッシングの両方をサポートします。
AFS サーバーはユーザー・レベルのアプリケーションですが、AFS には AFS 空間への呼び出しをインターセプトするカーネル・モジュールがあります。
運営管理上独立した組織が管理および操作する一連のサーバーおよびクライアント・マシンは、まとめて AFS セルと呼ばれます。AFS セル内のマシンのうち、少なくとも 1 つがデータベース・サーバーおよびファイル・サーバーのプロセスを実行している必要があります。残りのマシンが実行するのは、クライアント・コンポーネントのみにすることもできます。
AFS はファイルをボリュームに格納します。ボリュームは、AFS のファイル・サーバー・コンポーネントを実行するマシン上のストレージ域を使用します。AFS ボリュームは、ファイルとディレクトリーを格納するコンテナーと見なすことができます。これらのボリュームは、システム管理者がロード・バランシングを目的に、同じ AFS セル内でファイル・サーバー・プロセスを実行するマシンの間で移動できるように設計されています。AFS ボリュームで実行できる操作には、複製、データのダンプ、バックアップ、リストアなどがあります。ボリュームに関連する概念は、この記事で取り上げる以外にも多数あります。
AFS セル内のさまざまなマシンで実行されるデータベース・サーバーのプロセスは、データベース・サーバーのデータベースを同期された状態に維持するために Ubik プロトコルを使用します。Ubik プロトコルは、VLDB、ADB、PDB などのデータベースを一貫して複数のサーバー・マシンで複製してデータベースの可用性を向上させ、複製サイトの間でアクセス負荷を共有する場合に役立ちます。このプロトコルはクォーラム・アルゴリズムを使用してデータベース情報を同期します。
もう 1 つの重要な概念は、AFS サーバーと AFS クライアントのプロセスが AFS セル内または AFS セル間で使用する通信メカニズム、Rx です。Rx は 1 つの RPC (Remote Procedure Call) メカニズムであり、同じマシン上や LAN (Local Area Network) および WAN (Wide Area Network) 上で実行されるプロセス間の通信には、ハイパフォーマンスのマルチスレッド化されたセキュアなメカニズムとなります。Rx ライブラリーは、カーネルおよびユーザー空間アプリケーション内で同様の API インターフェースで使用できるように設計されています。
Kerberos は、MIT で開発されたネットワーク認証プロトコルです。このプロトコルは、共有対称鍵を使用して相互認証を確立します。メッセージの暗号化にも復号にも、同様の暗号鍵を使用できることから、通信する双方がそれぞれ正しい相手と通信していることが保証されます。
このセクションでは、記事で使用する Kerberos の基本概念を明確にします。その上で、Kerberos レルムを構成します。レルムとは、認証管理ドメインを表しています。つまりレルムによって、そのレルムの AS (Kerberos インフラストラクチャーのコンポーネントである認証サーバー) が認証を行う対象は、そのレルムに属するプリンシパルに制限されます。Kerberos でのプリンシパルは、認証サービスを必要とするユーザー、マシン、サービスなどのエンティティーです。レルムに属するプリンシパルは、それぞれの暗号鍵をレルムの認証サーバーと共有します。
プリンシパルに関連する重要な概念は、鍵とチケットの 2 つです。
- 鍵 — 鍵とは暗号データのことで、一般にはユーザーのパスワードから、特定の暗号化アルゴリズムを使用して生成されます。ユーザー以外のプリンシパルについては、鍵はランダムに生成されます。鍵には鍵バージョン番号 (kvno) を使ったタグが付けられます。
- チケット — チケットとは、クライアントがサービスのサーバーにその身元を証明するために提示する認証データのことです。認証サーバーがクライアントにチケットを提供する際には、そのクライアントがアクセスしようとしているサーバーの暗号鍵を使用します。したがって、クライアントはチケットの内容を覗いたり、その内容に干渉したりすることができないようになっています。
Kerberos のインフラストラクチャーでは、チケット配布機能を提供する鍵配布センター (KDC) というものを使用します。論理的に KDC が提供するサービスには、プリンシパル・データベースの保守、認証サーバー (AS)、およびチケット付与サーバー (TGS) の 3 つがあります。KDC は以下の 2 つの重要なデーモンを実行します。
kadmind
これは管理デーモンであり、プリンシパルのデータベース、プリンシパルの秘密鍵、ポリシー構成を管理します。KDC を実行するローカル・マシンまたはリモート・マシンでこの機能にアクセスするには、それぞれkadmin.localコマンド、kadminコマンドを使用します。krb5kdc
これは、認証リクエストを処理する重要なデーモンです。ユーザーからの認証チケットのリクエストは、最終的にこのデーモンが受け取ります。
構成に取り掛かる前に、Kerberos 5 に関連するバイナリーがマシンにインストールされていることを確実にする必要があります。Kerberos 5 でサポートされる OpenAFS をコンパイルして使用するには、以下の RPM がインストールされていなければなりません。
- krb5-workstation
- krb5-server
- krb5-libs
- krb5-devel
リスト 1 に、私のテスト・マシンにインストールされている RPM を示します。このマシンには、上記には挙げられていない RPM もインストールされています。以下のリストに、それぞれの RPM に関する概要を併せて記載します。
リスト 1. Kerberos 5 に関連する RPM
root@rhel6vm1 ~ # rpm -qa | grep krb5 krb5-workstation-1.8.2-3.el6.i686 <-- Basic Kerberos 5 related programs like kinit etc krb5-auth-dialog-0.13-3.el6.i686 <-- For getting dialog box for Krb5 Tickets krb5-appl-servers-1.0.1-1.el6.i686 <-- Kerberized application servers krb5-server-1.8.2-3.el6.i686 <-- KDC and related programs for Kerberos 5 krb5-libs-1.8.2-3.el6.i686 <-- Shared libraries used by Kerberos 5 krb5-pkinit-openssl-1.8.2-3.el6.i686 <-- PKINIT plugin for Kerberos 5 krb5-appl-clients-1.0.1-1.el6.i686 <-- Kerberized clients for application servers pam_krb5-2.3.11-1.el6.i686 <-- Pluggable Authentication Module for Kerberos 5 krb5-devel-1.8.2-3.el6.i686 <-- For developing Kerberos 5 based applications root@rhel6vm1 ~ # |
これから、VMKRB5 という名前の Kerberos レルムをセットアップします。使用するマシンのホスト名は、rhel6vm1.in.ibm.com です。Kerberos 5 の主要な構成ファイルは、/etc/krb5.conf です。この構成ファイルにはまず、ロギング・オプション、特定のレルムに関する管理サーバー・インスタンスと KDC サーバー・インスタンスの情報、Kerberos のオプションの値などを指定するセクションがあります。
次に続く realms セクションには、Kerberos レルム VMKRB5 の KDC および管理サーバーに関する情報が示されます。このセクションには、他のレルムに関する情報も指定することができます。ドメインごとのレルムは、domain_realm セクションに指定されます。このファイルの詳細については、krb5.conf のマニュアル・ページを参照してください。
リスト 2 に、/etc/krb5.conf のサンプルを記載します。このサンプルでは、以下の値を変更する必要があります。
- default_realm の値
- domain_realm の値
- kdc の値
- admin_server の値
上記の値を、皆さんが使用するそれぞれの Kerberos レルムに合わせて変更してください。
リスト 2. /etc/krb5.conf のサンプル・リスト
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = VMKRB5
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
allow_weak_crypto = true
[realms]
VMKRB5 = {
kdc = rhel6vm1.in.ibm.com:88
admin_server = rhel6vm1.in.ibm.com:749
}
[domain_realm]
.in.ibm.com = VMKRB5
in.ibm.com = VMKRB5
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
|
KDC サーバーの振る舞いを制御する構成ファイルは、/var/kerberos/krb5kdc/kdc.conf です。このファイルには、ACL (Access Control List) ファイル、KDC がサポートする暗号化タイプなど、KDC が必要とする Kerberos レルムのオプションを指定します。リスト 3 に、KDC のサンプル構成ファイルを記載します。realms セクションのレルム名は、それぞれのレルムの構成に合わせて変更する必要があります。
リスト 3. /var/kerberos/krb5kdc/kdc.conf のサンプル・リスト
[kdcdefaults]
v4_mode = nopreauth
kdc_tcp_ports = 88
[realms]
VMKRB5 = {
master_key_type = des-cbc-crc
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
}
|
注意する点として、KDC は暗号化タイプとして des-cbc-crc のバリエーションをサポートするように構成されています。それは、des-cbc-crc は OpenAFS との相性が良いという理由からですが、Kerberos 5 は他にも多数の暗号化タイプをサポートします。kdc.conf 構成ファイルの詳細については、kdc.conf のマニュアル・ページを参照してください。
リスト 4 は、ACL を定義するファイルの一例です。管理者はそれぞれの要件に応じて ACL を定義してください。以下に記載するアクセス制御リスト・ファイルでは、VMKRB5 レルムの admin インスタンスを持つすべてのプリンシパルに対し、すべてのアクセスを許可しています。
リスト 4. /var/kerberos/krb5kdc/kadm5.acl のサンプル・リスト
*/admin@VMKRB5 * |
最初に行う作業は、Kerberos データベース保守ユーティリティー kdb5_util を使用して、VMKRB5 レルムの Kerberos 5
データベースを初期化することです。リスト 5 に、kdb5_util を使用して Kerberos データベースを初期化する方法を示します。
リスト 5. Kerberos 5 データベースを初期化する
root@rhel6vm1 ~ # kdb5_util create -r VMKRB5 -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'VMKRB5',
master key name 'K/M@VMKRB5.' You will be prompted for the database Master Password.
It is important that you |
-s オプションは kdb5_util に対し、自身が本物であることを証明するための隠しファイル (秘密鍵のセットが含まれるファイル) を作成するように指定します。etc/krb5.conf に複数のレルムが定義されている場合にはオプション -r を使用して、どのレルムに対してデータベースを作成するのかを指定してください。
リスト 6 に、Kerberos 5 サービスを起動するためのコマンドを記載します。このサービスを特定のランレベルで実行するようにスケジューリングするには、chkconfig ツールを使用することもできます。
リスト 6. Kerberos 5 サービスを起動する
root@rhel6vm1 ~ # service kadmin start Starting Kerberos 5 Admin Server: [ OK ] root@rhel6vm1 ~ # service krb5kdc start Starting Kerberos 5 KDC: [ OK ] |
KDC を実行するマシンでは、kadmin.local コマンド・スイートを使用することができます。そのうちの
listprincs サブコマンドは、データベース内の既存のプリンシパルをリストアップする list_principals コマンドの別名です。
ポリシーを定義するには、サブコマンド add_policy または addpol を使用します。以下のリストでは、admin および service という名前の 2 つのポリシーを定義しています。これらのポリシーで規定しているのは、パスワードの最小長、そしてパスワードの文字クラス (英字、数字、特殊文字など) の最小数です。
listpol はすべての定義済みポリシーをリストアップするコマンドで、getpol は指定されたポリシーの詳細情報を表示するコマンドです。
リスト 7 に、これらのコマンドの基本的な使い方が示されています。
リスト 7. 定義されたポリシー
root@rhel6vm1 ~ # kadmin.local Authenticating as principal avinesh/admin@VMKRB5 with password. kadmin.local: listprincs K/M@VMKRB5 <-- Kerberos Master Key Principal kadmin/admin@VMKRB5 kadmin/changepw@VMKRB5 kadmin/history@VMKRB5 kadmin/rhel6vm1.in.ibm.com@VMKRB5 krbtgt/VMKRB5@VMKRB5 kadmin.local: add_policy -minlength 8 -minclasses 3 admin kadmin.local: addpol -minlength 8 -minclasses 4 service kadmin.local: listpols admin service kadmin.local: getpol admin Policy: admin Maximum password life: 0 Minimum password life: 0 Minimum password length: 8 Minimum number of password character classes: 3 Number of old keys kept: 1 Reference count: 0 Maximum password failures before lockout: 0 Password failure count reset interval: 0 Password lockout duration: 0 |
上記のリストで listprics の出力として示されているすべての kadmin/* プリンシパルは、それぞれに異なる管理タスクを目的とします。krbtgt/VMKRB5@VMKRB5 は、チケット付与サービスのプリンシパルです。
VMKRB5 レルムには、root/admin という名前のプリンシパルも作成します。このプリンシパルは、上記で定義した admin ポリシーに従います。このプリンシパルを
kadmin で使用して (リスト 8 を参照)、レルム内のあらゆるマシンからの管理要求に対処します。
リスト 8. プリンシパル
root/admin を追加するkadmin.local: addprinc -policy admin root/admin Enter password for principal "root/admin@VMKRB5": <r00t123$> Re-enter password for principal "root/admin@VMKRB5": <r00t123$> Principal "root/admin@VMKRB5" created. kadmin.local: q |
以下のリスト 9 に記載するスニペットでは、kadmin
コマンド・スイートを使用して、afs/krb5afs.in.ibm.com、admin、avinesh というプリンシパルを作成します。ktadd は、指定されたプリンシパルの鍵を所定の Kerberos 鍵テーブル (keytab) ファイルに追加します。この
keytab ファイルには afs/krb5afs.in.ibm.com の鍵エントリーだけを含めたいので、ktadd を発行する前にこのファイルが存在していないことを確実にしてください。ここで特に重要なのは、鍵バージョン番号 (kvno) 2 です。鍵を AFS で使用できるように KeyFile ファイルにインポートするには、これと同じ kvno を指定しなければなりません。
リスト 9.
kadmin コマンド・スイートを使用してプリンシパルを作成するroot@rhel6vm1 ~ # rm -f /etc/krb5.keytab.afs root@rhel6vm1 ~ # kadmin -p root/admin Authenticating as principal root/admin with password. Password for root/admin@VMKRB5: kadmin: addprinc -policy service -randkey -e des-cbc-crc:normal afs/krb5afs.in.ibm.com Principal "afs/krb5afs.in.ibm.com@VMKRB5" created. kadmin: ktadd -e des-cbc-crc:normal -k /etc/krb5.keytab.afs afs/krb5afs.in.ibm.com Entry for principal afs/krb5afs.in.ibm.com with kvno 2, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab.afs. kadmin: addprinc -policy admin admin Enter password for principal "admin@VMKRB5": <admin123$> Re-enter password for principal "admin@VMKRB5": <admin123$> Principal "admin@VMKRB5" created. kadmin: addprinc -policy admin avinesh Enter password for principal "avinesh@VMKRB5": <avinesh123$> Re-enter password for principal "avinesh@VMKRB5": <avinesh123$> Principal "avinesh@VMKRB5" created. kadmin: q |
klist は、keytab ファイルを読み取り、ファイル内に含まれるすべての鍵の詳細を表示します。
root@rhel6vm1 ~ # klist -kte /etc/krb5.keytab.afs Keytab name: WRFILE:/etc/krb5.keytab.afs KVNO Timestamp Principal ---- ----------------- -------------------------------------------------------- 2 01/26/11 23:14:27 afs/krb5afs.in.ibm.com@VMKRB5 (DES cbc mode with CRC-32) |
OpenAFS ソースの取得および OpenAFS のビルドの実行
OpenAFS のソースが必要となるので、wget (Linux マシン上のダウンロード用ツール) を使用して、OpenAFS の Web サイトから OpenAFS ソースを圧縮した tar ファイルをダウンロードします。
リスト 10. OpenAFS ソース安定版リリース 1.4.14 をダウンロードする
root@rhel6vm1 ~ # wget http://openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2 --2011-01-17 12:22:29-- http://openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2 Resolving openafs.org... 128.2.200.90 Connecting to openafs.org|128.2.200.90|:80... connected. HTTP request sent, awaiting response... 302 Found Location: http://dl.openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2 [following] --2011-01-17 12:22:30-- http://dl.openafs.org/dl/openafs/1.4.14/openafs-1.4.14-src.tar.bz2 Resolving dl.openafs.org... 128.2.201.26 Connecting to dl.openafs.org|128.2.201.26|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 11813993 (11M) [application/x-tar] Saving to: `openafs-1.4.14-src.tar.bz2' 82% [========================================> ] 9,709,310 22.4K/s eta 57s |
./configure --help の出力は一読の価値があります。この出力で、OpenAFS で選択可能な構成オプションを確認することができます。
以下のリストに、Kerberos 5 でサポートされる OpenAFS ソースを構成するためのコマンドを記載します。make はビルド用のコマンドです。make dest は、バイナリーで Transarc スタイルのディレクトリー構造を作成します。
リスト 11. Kerberos 5 でサポートされる OpenAFS ソースを構成する
root@rhel6vm1 openafs-1.4.14 # which krb5-config
/usr/bin/krb5-config
root@rhel6vm1 openafs-1.4.14 # ./configure --with-afs-sysname=i386_linux26
--enable-transarc-paths \
--with-krb5-conf=/usr/bin/krb5-config
root@rhel6vm1 openafs-1.4.14 # make
root@rhel6vm1 openafs-1.4.14 # make dest
|
OpenAFS はディスク・ベースとメモリー・ベース両方のキャッシングをサポートします。ローカル・ディスク・キャッシングを行うように構成された OpenAFS クライアントは、通常、キャッシング関連のデータを /usr/vice/cache ディレクトリーに格納します。キャッシュされるデータは、それ専用のパーティションに格納することをお勧めします。一般には、ユーザーがパーティションを作成し、ファイルシステム (Linux では通常、ext3) を作成して、そのファイルシステムを /usr/vice/cache ディレクトリーにマウントすることになります。AFS 管理者がこれとは異なるディレクトリーを使用することにした場合には、/usr/vice/etc/cacheinfo ファイルにそのディレクトリーを指定する必要があります。/usr/vice/etc/cacheinfo については、この後のセクション、「AFS クライアントのディスク・キャッシュを構成する」で詳しく説明します。
AFS ファイル・サーバーを実行するマシンには、AFS ボリュームを格納するためのパーティションまたは論理ボリュームが少なくとも 1 つ必要です。AFS ボリュームを格納する各パーティションは、/vicepxx (ここで、xx は 1 文字または 2 文字の小文字の英字) という名前のディレクトリーにマウントします。管理者は /vicepa から /vicepz まで、および /vicepaa から /vicepaz までをパーティションとして使用し、それでも必要な vice パーティションの数に足りない場合には、/vicepba から /vicepbz を使用するというのが通常です。OpenAFS は、通常のディレクトリー /vicepxx に AlwaysAttach という名前のファイルが格納されている場合には、ユーザーがそのディレクトリーに AFS ボリュームを格納することを許可します。しかし、AFS サーバーには通常のディレクトリーを使用するのではなく、別個のパーティションを設けることをお勧めします。
リスト 12. AFS バイナリーおよび構成ファイルの格納先ディレクトリーを作成する
root@rhel6vm1 openafs-1.4.14 # mkdir /afs root@rhel6vm1 openafs-1.4.14 # chmod 777 /afs root@rhel6vm1 openafs-1.4.14 # mkdir -p /usr/vice/etc root@rhel6vm1 openafs-1.4.14 # mkdir -p /usr/afs root@rhel6vm1 openafs-1.4.14 # mkdir -p /usr/afsws |
リスト 13. OpenAFS バイナリーをコピーする
root@rhel6vm1 openafs-1.4.14 # cd i386_linux26/dest root@rhel6vm1 dest # cp -rp root.client/usr/vice/etc/* /usr/vice/etc root@rhel6vm1 dest # cp -p root.client/usr/vice/etc/afs.rc /etc/rc.d/init.d/afs root@rhel6vm1 dest # cp root.client/usr/vice/etc/afs.conf /etc/sysconfig/afs root@rhel6vm1 dest # cp -rp root.server/usr/afs/* /usr/afs root@rhel6vm1 dest # cp -rp bin/ etc/ include/ lib/ /usr/afsws root@rhel6vm1 dest # ln -s /usr/afs/bin/bos /usr/bin/bos |
構成ファイル /etc/sysconfig/afs に含まれるのは、AFS クライアントおよびサーバーを実行するために調整が必要となるオプションと、キャッシュ・マネージャーのパラメーター (キャッシング・タイプ (ディスク上またはメモリー内) や、その他の重要な変数) です。AFS クライアントと AFS サーバーの両方を実行する場合には、/etc/sysconfig/afs ファイルの AFS_CLIENT および AFS_SERVER が両方とも「on」に設定されている必要があります。
このセクションでは、rhel6vm1.in.ibm.com マシンに、krb5afs.in.ibm.com という名前の AFS セルを構成します。
OpenAFS インストール時の便宜を図って、セル名および (ファイル・サーバーを実行する) マシンの名前を環境変数 CELLNAME、SERVERNAME にそれぞれ指定します。
root@rhel6vm1 ~ # export CELLNAME=krb5afs.in.ibm.com root@rhel6vm1 ~ # export SERVERNAME=rhel6vm1.in.ibm.com |
リスト 14 に示すように、bosserver を noauth モードで起動して、アクセス許可のプロセスが省略されるようにします。
リスト 14. bosserver を起動する
root@rhel6vm1 ~ # /usr/afs/bin/bosserver -noauth &
[1] 25631
root@rhel6vm1 ~ #
[1]+ Done /usr/afs/bin/bosserver -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos setcellname $SERVERNAME $CELLNAME -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos listhosts $SERVERNAME -noauth
Cell name is krb5afs.in.ibm.com
Host 1 is rhel6vm1.in.ibm.com
|
bos setcellname でセル名を設定し、bos listhosts で AFS セル内のサーバー・マシンの情報を取得します。
リスト 15 のコード・スニペットに、AFS 保護サーバー (ptserver) と AFS ボリューム・ロケーション・サーバー (vlserver) のインスタンスを作成する方法を示します。
リスト 15. データベース・サーバー・インスタンスを作成する
root@rhel6vm1 ~ # /usr/afs/bin/bos create $SERVERNAME ptserver simple \
/usr/afs/bin/ptserver -cell $CELLNAME -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos create $SERVERNAME vlserver simple \
/usr/afs/bin/vlserver -cell $CELLNAME -noauth
|
前にエクスポートした、keytab ファイル /etc/krb5.keytab.afs に含まれる AFS サービス・プリンシパル afs/krb5afs.in.ibm.com の鍵を KeyFile ファイルにインポートすることで、その鍵を AFS が使用できるようにします。前述したように、kvno の値には同じ 2 を指定していることに注目してください。
リスト 16. asetkey を使用して鍵をインポートする
root@rhel6vm1 ~ # /usr/afs/bin/asetkey add 2 /etc/krb5.keytab.afs afs/krb5afs.in.ibm.com root@rhel6vm1 ~ # /usr/afs/bin/bos listkeys $SERVERNAME -cell $CELLNAME key 2 has cksum 4052960223 Keys last changed on Fri Jan 21 12:33:42 2011. All done. |
bos listkeys は、/usr/afs/etc/KeyFile ファイルに格納されている AFS サーバーの暗号化鍵情報を表示します。
リスト 17 のコマンドが定義する特権ユーザーには、この AFS セルで管理タスクを実行する権限が与えられます。これらの管理ユーザーに関する情報が格納される場所は、データベース・サーバー・マシン上の /usr/afs/etc/UserList ファイルです。
リスト 17. AFS セル内の管理ユーザーを定義する
root@rhel6vm1 ~ # /usr/afs/bin/bos adduser $SERVERNAME admin \
-cell $CELLNAME -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos adduser $SERVERNAME avinesh \
-cell $CELLNAME -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos listusers -s $SERVERNAME \
-cell $CELLNAME -noauth
SUsers are: admin avinesh
|
bos adduser はユーザー admin および avinesh
を特権ユーザーのリストに追加するコマンドであり、bos listusers は UserList ファイルのすべての特権ユーザーをリストアップするコマンドです。
リスト 18 では、pts ツールの createuser オプションを使用してユーザー admin および
avinesh を作成しています。作成したユーザーは、pts のオプション adduser を使用して、AFS システム管理者の定義済みグループ system:administrators に追加します。
リスト 18. ptserver データベース内にユーザーを作成する
root@rhel6vm1 ~ # /usr/afs/bin/pts createuser -name admin -noauth User admin has id 1 root@rhel6vm1 ~ # /usr/afs/bin/pts createuser -name avinesh -noauth User avinesh has id 2 root@rhel6vm1 ~ # /usr/afs/bin/pts adduser admin system:administrators -noauth root@rhel6vm1 ~ # /usr/afs/bin/pts adduser avinesh system:administrators -noauth root@rhel6vm1 ~ # /usr/afs/bin/pts membership admin -noauth Groups admin (id: 1) is a member of: system:administrators root@rhel6vm1 ~ # /usr/afs/bin/pts membership avinesh -noauth Groups avinesh (id: 2) is a member of: system:administrators root@rhel6vm1 ~ # /usr/afs/bin/pts listentries -c $CELLNAME -localauth Name ID Owner Creator anonymous 32766 -204 -204 admin 1 -204 32766 avinesh 2 -204 32766 |
membership オプションは、特定のユーザーのメンバーシップの詳細を示します。pts listentries は保護サーバーのデータベース内に存在する全ユーザーをそれぞれの ID と併せてリストアップします。
リスト 19 に、ファイル・サーバー・プロセスを作成し、起動するために使用するコマンドを記載します。作成したプロセスが実行中になっていることを確認するには、bos status コマンドを使用します。
リスト 19. ファイル・サーバー・プロセスを作成および起動する
root@rhel6vm1 ~ # /usr/afs/bin/bos restart $SERVERNAME -all -cell $CELLNAME -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos create $SERVERNAME fs fs \
/usr/afs/bin/fileserver \
/usr/afs/bin/volserver \
/usr/afs/bin/salvager \
-cell $CELLNAME -noauth
root@rhel6vm1 ~ # /usr/afs/bin/bos status $SERVERNAME fs -long -noauth
Instance fs, (type is fs) currently running normally.
Auxiliary status is: file server running.
Process last started at Fri Jan 21 10:45:11 2011 (2 proc starts)
Command 1 is '/usr/afs/bin/fileserver'
Command 2 is '/usr/afs/bin/volserver'
Command 3 is '/usr/afs/bin/salvager'
|
1 つのボリュームが、特定の組織の AFS ファイル・スペースのルートとして選択されます。慣例では、このボリュームの名前は root.afs となります。この組織内の各クライアントが、/afs 上でこのルート・ボリュームの UNIX mount() を実行して、AFS 名前空間全体をこのマウント・ポイントに関連付けます。
AFS キャッシュ・マネージャーは AFS ファイルシステムのルートを、通常は /afs (あるいは構成ファイル /usr/vice/etc/cacheinfo に定義されている場所) にマウントします。内部では、AFS キャッシュ・マネージャーは root.afs ボリュームをパス /afs にマウントします。root.afs ボリュームは、このクライアントに既知のすべてのセルのデータベースに記述された、すべてのセルのルート・ボリュームのマウント・ポイントを /usr/vice/etc/CellServDB ファイルに格納します。クライアントが外部セル (つまり、ローカル・セル以外のセル) へアクセスする必要がある場合には、このファイルに、そのセルのサーバーの詳細を提供する必要があります。
リスト 20. vos を使用して AFS ボリュームを作成する
root@rhel6vm1 ~ # /usr/afs/bin/vos create -s $SERVERNAME -pa a -name root.cell \
-maxq 30000 -c $CELLNAME -noauth
Volume 536870912 created on partition /vicepa of rhel6vm1.in.ibm.com
root@rhel6vm1 ~ # /usr/afs/bin/vos create -s $SERVERNAME -pa a -name root.afs \
-maxq 30000 -c $CELLNAME -noauth
Volume 536870915 created on partition /vicepa of rhel6vm1.in.ibm.com
root@rhel6vm1 ~ # /usr/afs/bin/vos listvol -s $SERVERNAME -c $CELLNAME -noauth
Total number of volumes on server rhel6vm1.in.ibm.com partition /vicepa: 2
root.afs 536870915 RW 2 K On-line
root.cell 536870912 RW 2 K On-line
Total volumes onLine 2 ; Total volumes offLine 0 ; Total busy 0
|
特定のセルに合わせて AFS クライアントおよびサーバーを構成する
デフォルトのインストール・プロセスでは、構成ファイル /usr/vice/etc/ThisCell が /usr/afs/etc/ThisCell へのシンボリック・リンクとして作成されます。この構成ファイルには、前の手順で構成ファイルの内容として選択したセルの名前が付けられます。/usr/vice/etc/ThisCell ファイルにはこの AFS クライアントのローカル・セル名が格納される一方、/usr/afs/etc/ThisCell ファイルには、このマシン上で稼働するデータベース・サーバーが属するセルの名前が格納されます。マシンは、AFS クライアントと AFS サーバーを同じセルに対して実行することも、異なるセルに対して実行することもできます。AFS クライアントと AFS サーバーをそれぞれ別の AFS セルに対して実行する必要がある場合には、/usr/vice/etc/ThisCell ファイルをシンボリック・リンクとしてではなく、別個のファイルとして用意し、目的のセル名をファイルに格納する必要があります。
リスト 21 に記載するコマンドでは、AFS クライアントと AFS サーバーの両方を同じセルに対して実行するマシンを構成していますが、それぞれの構成ファイルは /usr/afs/etc/ThisCell と /usr/vice/etc/ThisCell とに分けています。
リスト 21. マシンの AFS クライアントおよびサーバー・メンバーシップを構成する
root@rhel6vm1 ~ # ls -l /usr/vice/etc/ThisCell lrwxrwxrwx. 1 root root 21 Jan 21 10:31 /usr/vice/etc/ThisCell -> /usr/afs/etc/ThisCell root@rhel6vm1 ~ # cat /usr/afs/etc/ThisCell krb5afs.in.ibm.com root@rhel6vm1 ~ # rm -f /usr/vice/etc/ThisCell root@rhel6vm1 ~ # cp /usr/afs/etc/ThisCell /usr/vice/etc/ThisCell root@rhel6vm1 ~ # cat /usr/vice/etc/ThisCell krb5afs.in.ibm.comroot@rhel6vm1 ~ # cat /usr/afs/etc/ThisCell krb5afs.in.ibm.com |
構成ファイル /usr/vice/etc/CellServDB および /usr/afs/etc/CellServDB には、それぞれ AFS クライアント、AFS サーバーのデータベース・サーバー情報が格納されます。/usr/afs/etc/CellServDB ファイルに格納されるデータベース・サーバー情報は、ある特定のマシンが AFS サーバーの実行対象とする AFS セルのデータベース・サーバー情報です。したがって、このファイルには、1 つの AFS セルに関する情報しか含まれませんが、もう一方の /usr/vice/etc/CellServDB ファイルには、この AFS クライアントがアクセスする必要のあるすべての AFS セルのデータベース・サーバー情報の詳細が含まれます。
インストール・プロセスでは /usr/vice/etc/CellServDB も /usr/afs/etc/CellServDB へのシンボリック・リンクとして作成されますが、以下ではクライアントが他の AFS セルにアクセスしなければならない場合に備え、この 2 つのファイルは別のものにしておきます。したがって、ここでは単純に /usr/vice/etc/CellServDB ファイルにセルの情報を追加してください。
リスト 22. CellServDB ファイルを作成する
root@rhel6vm1 ~ # cat /usr/afs/etc/CellServDB >krb5afs.in.ibm.com #Krb5 AFS Test Cell 192.168.110.129 #rhel6vm1.in.ibm.com root@rhel6vm1 ~ # ls -l /usr/vice/etc/CellServDB lrwxrwxrwx 1 root root 23 Jan 21 10:31 /usr/vice/etc/CellServDB -> /usr/afs/etc/CellServDB root@rhel6vm1 ~ # rm -f /usr/vice/etc/CellServDB root@rhel6vm1 ~ # cp /usr/afs/etc/CellServDB /usr/vice/etc/CellServDB |
AFS は、データをローカル・ディスクまたはメモリーにキャッシュするように構成することができます。これを指定できる場所は、AFS 構成ファイル /etc/sysconfig/afs です。構成ファイル /usr/vice/etc/cacheinfo には、AFS ファイルシステムのマウント・ポイント、AFS がデータを格納するパス (ディスク・キャッシングを行う場合)、およびキャッシュ・サイズに使用するブロック数に関する情報が格納されます。以下のリストでは、キャッシュ・サイズを 8,15,000 KB に指定しています。
root@rhel6vm1 ~ # cat /usr/vice/etc/cacheinfo /afs:/usr/vice/cache:815000 |
この時点で構成はほぼ完了していますが、現在実行中の AFS サービスを停止する必要がまだ残っています。それには、service afs
stop コマンドを使用します。AFS キャッシュ・マネージャーによって、root.afs ボリュームが /afs (または、構成ファイル /usr/vice/etc/cacheinfo に定義されている場所) にマウントされます。ここで、前に作成した root.cell ボリュームをマウントします。
慣例では、/afs 配下にある、セル名と同じ名前のディレクトリーにマウントすることになっているので、root.cell ボリュームは
/afs/krb5afs.in.ibm.com にマウントします。ここで非常に重要な点は、AFS クライアント (afsd) に対して dynroot オプションを無効にすることです。それには、/etc/sysconfig/afs
ファイルを変更して、ENABLE_DYNROOT=off に設定する必要があります。dynroot によって、/afs ディレクトリーには /usr/vice/etc/CellServDB ファイルに定義された AFS セル名を持つサブディレクトリーが取り込まれます。この場合、AFS クライアントはファイル・サーバーから root.afs ボリュームをロードするのではなく、root.cell ボリュームを直接読み込みます。しかもそれは、root.cell ボリュームがマウントされているディレクトリーに対して、ユーザーがアクセスしようとする場合に限られます。
ここで使用しているレルム名は AFS セル名とは異なるため、/usr/afs/etc/krb.conf ファイルにレルム名を設定する必要もあります。リスト 23 に、/usr/afs/etc/krb.conf にレルム名を設定し、AFS サービスを起動し、/afs に ACL を設定して root.cell ボリュームをマウントする一連のコマンドを示します。
リスト 23. レルム名を構成する
root@rhel6vm1 ~ # service afs stop
Stopping AFS services.....
Stopping AFS bosserver
root@rhel6vm1 ~ #
root@rhel6vm1 / # echo "VMKRB5" > /usr/afs/etc/krb.conf
root@rhel6vm1 ~ # service afs start
Starting AFS services.....
afsd: All AFS daemons started.
root@rhel6vm1 / # /usr/afs/bin/fs setacl /afs system:anyuser rl
root@rhel6vm1 / # cd /afs
root@rhel6vm1 /afs # /usr/afs/bin/fs mkm krb5afs.in.ibm.com -vol root.cell \
-c krb5afs.in.ibm.com
root@rhel6vm1 /afs # ln -s krb5afs.in.ibm.com krb5afs
|
これで、AFS および Kerberos 5 の構成は完了しました。構成手順を終えた後は、マシンを再起動します。マシンが稼働状態になったら、Kerberos 5 および
AFS サービスを起動します。この時点で、afsd に対して dynroot を有効に設定し、それから AFS サービスを起動することもできます。
リスト 24 では kinit を使用して、プリンシパル avinesh の Kerberos 5
チケットを取得しています。kinit は、キャッシュされたすべての Kerberos 5 チケットのリストを表示します。
リスト 24. Kerberos 5 チケットを取得する
root@rhel6vm1 ~ # kinit avinesh
Password for avinesh@VMKRB5:
root@rhel6vm1 ~ # klist -5f
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: avinesh@VMKRB5
Valid starting Expires Service principal
01/26/11 23:18:35 01/27/11 23:18:35 krbtgt/VMKRB5@VMKRB5
renew until 01/26/11 23:18:35, Flags: FRI
|
Kerberos 5 チケットに基づいて AFS トークンを設定するには、aklog を使用します。オプション -d
は、実行状況に関する詳細情報を表示するので、使用するかどうかはお任せします。tokens は、AFS キャッシュ・マネージャーが保有する AFS トークンを表示します (リスト 25 を参照)。AFS クライアントが AFS 空間にアクセスしようとする場合、トークン・データを提供しなければ、要求するデータにアクセスすることはできません。
リスト 25. AFS トークン
root@rhel6vm1 ~ # service afs start Starting AFS services..... afsd: All AFS daemons started. root@rhel6vm1 ~ # root@rhel6vm1 ~ # aklog -d Authenticating to cell krb5afs.in.ibm.com (server rhel6vm1.in.ibm.com). Trying to authenticate to user's realm VMKRB5. Getting tickets: afs/krb5afs.in.ibm.com@VMKRB5 Using Kerberos V5 ticket natively About to resolve name avinesh to id in cell krb5afs.in.ibm.com. Id 2 Set username to AFS ID 2 Setting tokens. AFS ID 2 / @ VMKRB5 root@rhel6vm1 ~ # root@rhel6vm1 ~ # tokens Tokens held by the Cache Manager (UID Based Tokens): User's (AFS ID 1) tokens for afs@krb5afs1.in.ibm.com [Expires Feb 8 07:00] --End of list-- root@rhel6vm1 ~ # |
この記事で説明したのは、OpenAFS および Kerberos 5 KDC 認証を使用した広大な AFS の世界に足を踏み入れる方法です。これまで 20 年以上にわたり、AFS ではこの記事で取り上げた機能の他にも、システム管理者が使用できる機能を数多く提供してきました。AFS および Kerberos 5 についての詳細は、以下の「参考文献」に目を通し、記載されている資料へのリンクを辿ってください。
この記事の内容を良くするための有益なコメントおよび情報を提供するために、忙しいスケジュールのなかから時間を割いてくれた IBM AFS Support and Development の Anthony Todd DeSantis 氏に、ここで感謝の意を表します。
学ぶために
- OpenAFS.org: IBM AFS のこの外部委託バージョンについて詳しく学んでください。
- 「OpenAFS
Documentation」は、ユーザーおよび管理者向けのマニュアルです。
- MIT Kerberos Consortium の優れた記事、「For understanding Kerberos 5
Protocol」で、Fulvio Ricciardi が Kerberos 5 プロトコルの詳細を説明しています。
- developerWorks の記事、「Easy
migration to OpenAFS with Kerberos-5 support」では、Kaserver ベースのセットアップと Kerberos 5 ベースのセットアップの違いについて包括的に検討しています。
- 「Resources on
the IBM Network Authentication Service and related technologies for AIX」は、IBM developerWorks Master Author の Sandeep Ramesh Patil による、多数の IBM Network Authentication Service 関連の記事の 1 つです。
- developerWorks podcasts: ソフトウェア開発者向けの興味深いインタビューとディスカッションを聞いてください。
- Technical events and
webcasts: developerWorks Live! briefings で時代の流れに乗ってください。
- Twitter での
developerWorks: developerWorks をフォローして最新ニュースを入手してください。
- 興味深いイベント: 世界中で近日中に予定されている IBM オープンソース開発者を対象とした会議、見本市、ウェブキャストをチェックしてください。
- developerWorks Open source
ゾーン: オープンソース技術による開発、そして IBM
製品でオープンソース技術を使用するときに役立つ広範囲のハウツー情報、ツール、プロジェクト・アップデート、そして人気の高い記事とチュートリアルを調べてください。
- developerWorks オンデマンド・デモ: 無料のオンライン・デモで、IBM およびオープンソースの技術と製品機能を試してみてください。
製品や技術を入手するために
- IBM ソフトウェアの試用版: 試用版ソフトウェアを使用して、次のオープンソース開発プロジェクトを革新してください。ダウンロード、あるいは DVD で入手できます。
議論するために
- developerWorks コミュニティー: ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。
Avinesh Kumar は、インド・プネの IBM Software Labs で、Andrew File System Team の技術主任を務めています。IBM での勤務年数は 5 年を数え、彼の現在のプロジェクトには、新機能による IBM AFS の強化、新しい RedHat Enterprise Linux への IBM AFS の移植などがあります。彼は、ダンプおよびクラッシュのカーネル・レベルおよびユーザー・レベルのデバッグ、そして Linux、AIX、および Solaris プラットフォームでレポートされたバグに取り組んでいます。彼は University of Pune でコンピューター・サイエンス学部の MCA を取得しました。Linux の熱狂的ファンである彼は、余暇は自分の Maverick Ubuntu マシンで Linux カーネルの研究に費やしています。