FreeBSD ハンドブック
Prev | Chapter 14. セキュリティ | Next

# 14.6. Kerberos

寄稿: Mark Murray. 基にした文書の執筆: Mark Dapoz.

訳: 有村 光晴 `<arimura@jp.FreeBSD.org>`.

Kerberosは、 サーバのサービスによってユーザが安全に認証を受けられる ようにするための、ネットワークの付加システム及びプロトコルです。 リモートログイン、リモートコピー、 システム間での安全なファイルのコピ ーやその他のリスクの高い仕事がかなり安全に、 そしてこれまでより制御 できるようになります。

以下の文章は、 FreeBSD用として配布されているKerberosをセットアップ する際のガイドとして読むことができます。しかし、 完全な説明が必要な場合には、マニュアルページを読んだ方がよい でしょう。

FreeBSDのKerberosは、 オリジナルの4.4BSD-Liteの配布に含まれているものではなく、 FreeBSD 1.1.5.1のときに移植されたeBonesです。 これはアメリカ/カナダの外で作成されており、そのため、アメリカか らの暗号技術の輸出制限があった時代でも、 これら以外の国の人々が手に入れられるものでした。

## 14.6.1. 初期データベースの作成

この作業はKerberosサーバだけでおこないます。まず、 古いKerberosの データベースが存在しないことを確認してください。 ディレクトリ`/etc/kerberosIV`に移って、 次のファイルだけが 存在することをチェックします。

    # cd /etc/kerberosIV
    # ls
    README          krb.conf        krb.realms

もし他のファイル (`principal.*` や `master_key`) が 存在する場合には、 `kdb_destroy`というコマンドで古い Kerberosデータベースを消してください。 Kerberosが走っていなければ、 単に余計なファイルを消せばよいです。

まず、`krb.conf` と `krb.realms`を編集してKerberosの 管理領域 (realm) を定義してください。 ここでは管理領域が`GRONDAR.ZA` で、 サーバ名が`grunt.grondar.za`であるとします。 `krb.conf` というファイルを次のように編集してください。

    # cat krb.conf
    GRONDAR.ZA
    GRONDAR.ZA grunt.grondar.za admin server
    CS.BERKELEY.EDU okeeffe.berkeley.edu
    ATHENA.MIT.EDU kerberos.mit.edu
    ATHENA.MIT.EDU kerberos-1.mit.edu
    ATHENA.MIT.EDU kerberos-2.mit.edu
    ATHENA.MIT.EDU kerberos-3.mit.edu
    LCS.MIT.EDU kerberos.lcs.mit.edu
    TELECOM.MIT.EDU bitsy.mit.edu
    ARC.NASA.GOV trident.arc.nasa.gov

この例にあるような他の管理領域は、実際には必要ありません。 この例は複数の管理領域を認識する方法を示したものですので、 これらの行は含めなくても結構です。

1行目はこのシステムが動いている管理領域の名前です。 他の行は管理領域とホスト名のエントリです。 行の1つめの単語が管理領域で、2つめがその管理領域の中で “鍵配布センター”(Key Distribution Center) として働くホスト名です。ホスト名の次に `admin server` と書いてある場合には、そのホストが 管理データベースサーバ (Administrative Database Server) も提供することを意味します。 これらの単語について詳しく知りたい場合には Kerberos のマニュアルページをご覧ください。

ここで、 `GRONDAR.ZA`という管理領域に`grunt.grondar.za` およびその他の`.grondar.za` ドメインのすべてのホストを追加し なければなりません。 `krb.realms`は次のようになります。

    # cat krb.realms
    grunt.grondar.za GRONDAR.ZA
    .grondar.za GRONDAR.ZA
    .berkeley.edu CS.BERKELEY.EDU
    .MIT.EDU ATHENA.MIT.EDU
    .mit.edu ATHENA.MIT.EDU

もう一度注意しますが、他の管理領域を書く必要はありません。 これらは複数の管理領域を認識できるようにマシンを設定する方法を 示した例ですので、これらの行は消して構いません。

1行目は名前をつけた管理領域に 特定の システムを含めるための ものです。 残りの行は名前をつけた管理領域にサブドメインのデフォルトの システムを含めるためのものです。

これでデータベースを作成する準備ができました。 この操作はKerberos サーバ (鍵配布センター) を起動するだけです。 `kdb_init`コ マンドを次のように実行してください。

    # kdb_init
    Realm name [default  ATHENA.MIT.EDU ]:  GRONDAR.ZA
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.

    Enter Kerberos master key:

ここで鍵を保存して、 ローカルのマシンにあるサーバが取り出せるように します。 それには`kstash`コマンドを使用します。

    # kstash

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!

これで暗号化されたマスタパスワードが `/etc/kerberosIV/master_key` に保存されました。

## 14.6.2. すべてが動くようにするための設定

Kerberosを導入する それぞれの システムのデータベースに、2つ のprincipal (主体名) を追加する必要があります。その名前は `kpasswd`と`rcmd`です。 これら2つのprincipalは、個々 のシステムにおいて、 システム名と同じ名前のインスタンスと組にして作成 されます。

これらの `kpasswd` と `rcmd` というデーモンによって、他の システムからKerberosのパスワードを変更したり、 `rcp`や `rlogin`, `rsh`といったコマンドを実行したりできるよ うになります。

それでは実際にこれらのエントリを追加しましょう。

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: passwd
    Instance: grunt

    <Not found>, Create [y] ? y

    Principal: passwd, Instance: grunt, kdc_key_ver: 1
    New Password:                    <---- ここは「RANDOM」と入力してください
    Verifying password

    New Password:                    <---- ここは「RANDOM」と入力してください

    Random password [y] ? y

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name: rcmd
    Instance: grunt

    <Not found>, Create [y] ?

    Principal: rcmd, Instance: grunt, kdc_key_ver: 1
    New Password:                    <---- ここは「RANDOM」と入力してください
    Verifying password

    New Password:                    <---- ここは「RANDOM」と入力してください

    Random password [y] ?

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:                  <---- 何も入力しないと終了します

## 14.6.3. サーバファイルの作成

次に、各マシンにおけるサービスを定義している、 すべてのインスタンス を展開します。 これには`ext_srvtab`というコマンドを使用しま す。このコマンドで作成されるファイルは、Kerberosの各クライアン トの/etc/kerberosIVディレクトリに 安全な方法でコピーまたは 移動する必要があります。このファイルはそれぞれのサーバとクラ イアントに存在しなければならず、 またKerberosの運用において重要なも のです。

    # ext_srvtab grunt

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Generating 'grunt-new-srvtab'....

このコマンドは一時的なファイルを作成するだけです。 ファイル名をすべ てのサーバが読めるような `srvtab` という名前に変更しな ければなりません。 `mv`コマンドを用いてシステムの場所に移動 してください。

    # mv grunt-new-srvtab srvtab

そのファイルがクライアントに配るためのもので、 ネットワークが安全で はないと思われる場合には、 ``client`-new-srvtab` を移動 可能なメディアにコピーして物理的に安全な方法で運んでください。 クラ イアントの`/etc/kerberosIV`ディレクトリで、 名前を `srvtab`に変更し、 modeを600にするのを忘れないでください。

    # mv grumble-new-srvtab srvtab
    # chmod 600 srvtab

## 14.6.4. データベースへのユーザの追加

ここで、 ユーザのエントリをデータベースに追加する必要があります。 始めに、 ユーザ`jane`のエントリを作成してみましょう。 `kdb_edit` を用いて次のように作成してください。

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: jane
    Instance:

    <Not found>, Create [y] ? y

    Principal: jane, Instance: , kdc_key_ver: 1
    New Password:                    <---- 安全なパスワードを入れてください
    Verifying password

    New Password:                    <---- もう一度パスワードを入れてください

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ?
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:                  <---- 何も入力しないと終了します

## 14.6.5. すべてのテスト

まず始めにKerberosデーモンを起動する必要があります。 `/etc/rc.conf` ファイルを正しく編集してあれば、マシンを再 起動することでに自動的にデーモンが起動します。 これはKerberosサー バでのみ必要です。 Kerberosクライアントは`/etc/kerberosIV`か ら必要なものを自動的に入手します。

    # kerberos &
    Kerberos server starting
    Sleep forever on error
    Log file is /var/log/kerberos.log
    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!

    Current Kerberos master key version is 1
    Local realm: GRONDAR.ZA
    # kadmind -n &
    KADM Server KADM0.0A initializing
    Please do not use 'kill -9' to kill this job, use a
    regular kill instead

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!

さあ、これで上で作成した `jane` というIDのチケットを `kinit`コマンドで得ることができます。

    % kinit jane
    MIT Project Athena (grunt.grondar.za)
    Kerberos Initialization for "jane"
    Password:

`klist` コマンドを用いてトークンを見て、 きちんとチケットを持って いるかどうか確認してください。

    % klist
    Ticket file:    /tmp/tkt245
    Principal:    jane@GRONDAR.ZA

      Issued           Expires          Principal
    Apr 30 11:23:22  Apr 30 19:23:22  krbtgt.GRONDAR.ZA@GRONDAR.ZA

`passwd` コマンドを用いてパスワードを変更して、 kpasswd デーモンが Kerberos データベースに対して認証されるかどうかチェックして ください。

    % passwd
    realm GRONDAR.ZA
    Old password for jane:
    New Password for jane:
    Verifying password
    New Password for jane:
    Password changed.

## 14.6.6. `su` 特権の追加

root 権限が必要なユーザは誰でも、 `su` コマンドのパスワードをユーザ毎に 別のもの として持つことができます。 `root` に `su` できる権利を与えられた id を追加します。これは、 principal に付いている `root` というインスタンスに よって制御されています。 `kdb_edit`を用いて `jane.root`というエントリを Kerberosデータベースに作成します。

    # kdb_edit
    Opening database...

    Enter Kerberos master key:

    Current Kerberos master key version is 1.

    Master key entered.  BEWARE!
    Previous or default values are in [brackets] ,
    enter return to leave the same, or new value.

    Principal name: jane
    Instance: root

    <Not found>, Create [y] ? y

    Principal: jane, Instance: root, kdc_key_ver: 1
    New Password:                    <---- 安全なパスワードを入れます
    Verifying password

    New Password:                    <---- もう一回パスワードを入れます

    Principal's new key version = 1
    Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
    Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- ここは短くしてください
    Attributes [ 0 ] ?
    Edit O.K.
    Principal name:                  <---- 何も入力しないと終了します

実際にトークンをもらって、 ちゃんと働いているかどうか確認しましょう。

    # kinit jane.root
    MIT Project Athena (grunt.grondar.za)
    Kerberos Initialization for "jane.root"
    Password:

ここで `root` ユーザの `.klogin` ファイルにユーザを追加する必要があります。

    # cat /root/.klogin
    jane.root@GRONDAR.ZA

`su`してみましょう。

    % su
    Password:

どのトークンを持っているか見てみましょう。

    # klist
    Ticket file:    /tmp/tkt_root_245
    Principal:  jane.root@GRONDAR.ZA

      Issued           Expires          Principal
    May  2 20:43:12  May  3 04:43:12  krbtgt.GRONDAR.ZA@GRONDAR.ZA

## 14.6.7. 他のコマンドの使用

ここまでの例では、`jane` という principal を `root` とい うインスタンス付きで作成しました。 これはユーザと同じ名前をprincipalと しており、 Kerberosのデフォルトの値です; `<username>.``root` という形式の `<principal>.<instance>`で、 必要なエント リが`root`のホームディレクトリの `.klogin`ファイルに あれば、 `<username>`がrootに `su`することができます。

    # cat /root/.klogin
    jane.root@GRONDAR.ZA

同様に、ユーザのホームディレクトリの `.klogin`ファイルに次の ような行がある場合には

    % cat ~/.klogin
    jane@GRONDAR.ZA
    jack@GRONDAR.ZA

`jane` または `jack` という名前で (前述の`kinit` によって) 認証されている `GRONDAR.ZA` という管理領域のユーザ なら誰でも`rlogin` や `rsh`, `rcp`等によってこ のシステム (`grunt`) の`jane`のアカウントまたはファ イルにアクセスできます。

たとえば、Janeが他のシステムにKerberos を用いてloginします。

    % kinit
    MIT Project Athena (grunt.grondar.za)
    Password:
    % rlogin grunt
    Last login: Mon May  1 21:14:47 from grumble
    Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

    FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

次の例では、Jackが同じマシンの Jane のアカウントにloginします。Janeは `.klogin` ファイルを前述のように設定しており、 Kerberosではjackというprincipal をインスタンスなしで設定してあります。

    % kinit
    % rlogin grunt -l jane
    MIT Project Athena (grunt.grondar.za)
    Password:
    Last login: Mon May  1 21:16:55 from grumble
    Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

    FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

Prev | Home | Next
S/Key | Up | ファイアウォール