訳: 有村 光晴 <arimura@jp.FreeBSD.org>
.
Kerberosは、 サーバのサービスによってユーザが安全に認証を受けられる ようにするための、ネットワークの付加システム及びプロトコルです。 リモートログイン、リモートコピー、 システム間での安全なファイルのコピ ーやその他のリスクの高い仕事がかなり安全に、 そしてこれまでより制御 できるようになります。
以下の文章は、 FreeBSD用として配布されているKerberosをセットアップ する際のガイドとして読むことができます。しかし、 完全な説明が必要な場合には、マニュアルページを読んだ方がよい でしょう。
Kerberos は選択が任意な FreeBSD のコンポーネントです。 もっとも簡単なインストール方法は、FreeBSD のインストール時に sysinstall で 'krb4' または 'krb5' 配布物を選択することです。 そうすると、Kerberos の 'eBones' (KerberosIV) または 'Heimdal' (Kerberos5) 実装がインストールされます。 これらの実装が入っているのは、 これがアメリカ合衆国およびカナダの外で開発されたものであるため、 アメリカ合衆国からの暗号ソフトウェアの輸出が制限されていた時代でも アメリカ合衆国およびカナダ以外の国に住んでいるシステム所有者の手に入るものだったからです。
ほかに、MIT で実装された Kerberos が Ports Collection の security/krb5 から利用できます。
この作業は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) を定義してください。
ここでは管理領域が EXAMPLE.COM
で、サーバ名が grunt.example.com
であるとします。
krb.conf
というファイルを次のように編集してください。
#
cat krb.conf
EXAMPLE.COM EXAMPLE.COM grunt.example.com 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
のマニュアルページをご覧ください。
ここで、EXAMPLE.COM
という管理領域に
grunt.example.com
およびその他の .example.com
ドメインのすべてのホストを追加しなければなりません。
krb.realms
は次のようになります。
#
cat krb.realms
grunt.example.com EXAMPLE.COM .example.com EXAMPLE.COM .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 ]:
EXAMPLE.COM
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
に保存されました。
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: 1New Password:
<---- ここは「RANDOM」と入力してください Verifying passwordNew Password:
<---- ここは「RANDOM」と入力してくださいRandom password [y] ?
y
Principal's new key version = 1Expiration 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: 1New Password:
<---- ここは「RANDOM」と入力してください Verifying passwordNew Password:
<---- ここは「RANDOM」と入力してくださいRandom password [y] ?
Principal's new key version = 1Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.Principal name:
<---- 何も入力しないと終了します
次に、各マシンにおけるサービスを定義している、
すべてのインスタンスを展開します。
これには 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
ここで、
ユーザのエントリをデータベースに追加する必要があります。
始めに、
ユーザ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: 1New Password:
<---- 安全なパスワードを入れてください Verifying passwordNew Password:
<---- もう一度パスワードを入れてください Principal's new key version = 1Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.Principal name:
<---- 何も入力しないと終了します
まず始めに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: EXAMPLE.COM#
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.example.com) Kerberos Initialization for "jane"Password:
klist
コマンドを用いてトークンを見て、
きちんとチケットを持って いるかどうか確認してください。
%
klist
Ticket file: /tmp/tkt245 Principal: jane@EXAMPLE.COM Issued Expires Principal Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM
passwd
コマンドを用いてパスワードを変更して、
kpasswd デーモンが Kerberos
データベースに対して認証されるかどうかチェックして
ください。
%
passwd
realm EXAMPLE.COMOld password for jane:
New Password for jane:
Verifying passwordNew Password for jane:
Password changed.
Kerberos は 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: 1New Password:
<---- 安全なパスワードを入れます Verifying passwordNew Password:
<---- もう一回パスワードを入れます Principal's new key version = 1Expiration 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.example.com) Kerberos Initialization for "jane.root"Password:
ここで root
ユーザの
.klogin
ファイルにユーザを追加する必要があります。
#
cat /root/.klogin
jane.root@EXAMPLE.COM
su
してみましょう。
%
su
Password:
どのトークンを持っているか見てみましょう。
#
klist
Ticket file: /tmp/tkt_root_245 Principal: jane.root@EXAMPLE.COM Issued Expires Principal May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM
ここまでの例では、jane
という principal
を root
とい
うインスタンス付きで作成しました。
これはユーザと同じ名前をprincipalと しており、
Kerberosのデフォルトの値です;
<username>.
root
という形式の
<principal>.<instance>
で、
必要なエントリが root
のホームディレクトリの
.klogin
ファイルにあれば、
<username>
が
root
に
su
できます。
#
cat /root/.klogin
jane.root@EXAMPLE.COM
同様に、ユーザのホームディレクトリの
.klogin
ファイルに次の
ような行がある場合には
%
cat ~/.klogin
jane@EXAMPLE.COM jack@EXAMPLE.COM
jane
または jack
という名前で (前述のkinit
によって)
認証されている EXAMPLE.COM
という管理領域のユーザ なら誰でもrlogin
や
rsh
, rcp
等によってこ
のシステム (grunt
)
のjane
のアカウントまたはファ
イルにアクセスできます。
たとえば、jane
が他のシステムに
Kerberos を用いて login します。
%
kinit
MIT Project Athena (grunt.example.com)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.example.com)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
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。