<!-- $Id: kerberos.sgml,v 1.4 1997/02/22 13:01:19 peter Exp $ -->
<!-- The FreeBSD Japanese Documentation Project -->
<!-- Original revision: 1.10 -->

<sect><heading>Kerberos<label id="kerberos"></heading>

<p><em>原作: &a.markm; (&a.md; からの寄稿に基づいています).</em>

   <em>訳: &a.arimura;.</em>

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

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

    FreeBSDのKerberosは, オリジナルの4.4BSD-Liteの配布に含まれている
    ものではなく, FreeBSD 1.1.5.1のときに移植されたeBonesです. 
    これはアメリカ/カナダの外で作成されており, これら以外の国の人々にも
    手に入れられるものです. 

    このソフトウェアを合法的な配布物として得るために, アメリカも
    しくはカナダのサイトから<em>持ってこないでください</em>.  
    でないと, そのサイトが<em>大変な</em>問題に巻き込まれます. 
    合法的な配布は, 南アフリカの<tt>skeleton.mikom.csir.co.za</tt>から
    入手することができます. 

 <sect1>
 <heading>初期データベースの作成</heading>

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

<tscreen><verb>
grunt# cd /etc/kerberosIV
grunt# ls
README          krb.conf        krb.realms
</verb></tscreen>

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

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

<tscreen><verb>
grunt# 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
</verb></tscreen>

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

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

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

<tscreen><verb>
 grunt# 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
</verb></tscreen>

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

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

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

<tscreen><verb>
grunt# 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: 
</verb></tscreen>

 <p>ここで鍵を保存して, ローカルのマシンにあるサーバが取り出せるように
    します. それには<tt>kstash</tt>コマンドを使用します. 

<tscreen><verb>
grunt# kstash

Enter Kerberos master key: 

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
</verb></tscreen>

 <p>これで暗号化されたマスタパスワードが
    <tt>/etc/kerberosIV/master_key</tt>に保存されました. 

 <sect1>
  <heading>すべてが動くようにするための設定</heading>

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

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

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

<tscreen><verb>
grunt# 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:                  <---- 何も入力しないと終了します
</verb></tscreen>

 <sect1>
  <heading>サーバファイルの作成</heading>

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

<tscreen><verb>
grunt# ext_srvtab grunt

Enter Kerberos master key: 

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
Generating 'grunt-new-srvtab'....
</verb></tscreen>

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

<tscreen><verb>
grunt# mv grunt-new-srvtab srvtab
</verb></tscreen>

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

<tscreen><verb>
grumble# mv grumble-new-srvtab srvtab
grumble# chmod 600 srvtab
</verb></tscreen>

 <sect1>
  <heading>データベースへのユーザの追加</heading>

 <p>ここで, ユーザのエントリをデータベースに追加する必要があります. 
    始めに, ユーザ<it>jane</it>のエントリを作成してみましょう. 
    <tt>kdb_edit</tt>を用いて次のように作成してください:

<tscreen><verb>
grunt# 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:                  <---- 何も入力しないと終了します
</verb></tscreen>

 <sect1>
  <heading>すべてのテスト</heading>

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

<tscreen><verb>
grunt# kerberos &
grunt# 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
grunt# kadmind -n &
grunt# 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!
</verb></tscreen>

 <p>さあ, これで上で作成した<it>jane</it>というIDのチケットを
    <tt>kinit</tt>コマンドで得ることができます:

<tscreen><verb>
grunt$ kinit jane
MIT Project Athena (grunt.grondar.za)
Kerberos Initialization for "jane"
Password: 
</verb></tscreen>

 <p><tt>klist</tt>コマンドを用いてトークンを見て, きちんとチケットを持って
    いるかどうか確認してください: 

<tscreen><verb>
grunt$ 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
</verb></tscreen>

 <p><tt>passwd</tt>コマンドを用いてパスワードを変更して, kpasswdデーモ
    ンがKerberosデータベースに対して認証されるかどうかチェックして
    ください: 


<tscreen><verb>
grunt$ passwd
realm GRONDAR.ZA
Old password for jane:
New Password for jane:
Verifying password
New Password for jane:
Password changed.
</verb></tscreen>

 <sect1>
  <heading><tt>su</tt>特権の追加</heading>

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

<tscreen><verb>
grunt# 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:                  <---- 何も入力しないと終了します
</verb></tscreen>

 <p>実際にトークンをもらって, ちゃんと働いているかどうか確認しましょう:

<tscreen><verb>
grunt# kinit jane.root
MIT Project Athena (grunt.grondar.za)
Kerberos Initialization for "jane.root"
Password: 
 </verb></tscreen>

 <p>ここでrootユーザの<tt>.klogin</tt>ファイルにユーザを追加する必要が
    あります. 

<tscreen><verb>
grunt# cat /root/.klogin
jane.root@GRONDAR.ZA
</verb></tscreen>

 <p><tt>su</tt>してみましょう:

<tscreen><verb>
[jane@grunt 10407] su
Password: 
grunt#
</verb></tscreen>

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

<tscreen><verb>
grunt# 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
</verb></tscreen>

 <sect1>
  <heading>他のコマンドの使用</heading>

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

<tscreen><verb>
grunt# cat /root/.klogin
jane.root@GRONDAR.ZA
</verb></tscreen>

 <p>同様に, ユーザのホームディレクトリの<tt>.klogin</tt>ファイルに次の
    ような行がある場合には: 

<tscreen><verb>
[jane@grunt 10543] cat ~/.klogin
jane@GRONDAR.ZA
jack@GRONDAR.ZA
</verb></tscreen>

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

    例えば, Janeが他のシステムにKerberosを用いてloginします:

<tscreen><verb>
[jane@grumble 573] kinit
MIT Project Athena (grunt.grondar.za)
Password: 
[jane@grumble 574] 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

[jane@grunt 10567]
</verb></tscreen>

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

<tscreen><verb>
[jack@grumble 573] kinit
[jack@grumble 574] 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

[jane@grunt 10578]
</verb></tscreen>
