訳: 有村 光晴 <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: 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: <---- 何も入力しないと終了します
次に、各マシンにおけるサービスを定義している、 すべてのインスタンスを展開します。 これには 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: 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: <---- 何も入力しないと終了します
まず始めに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.COM Old password for jane: New Password for jane: Verifying password New 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: 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.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> まで電子メールを (英語で)
送ってください。