訳: 有村 光晴 <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#lsREADME 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.confEXAMPLE.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.realmsgrunt.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_initRealm name [default ATHENA.MIT.EDU ]:EXAMPLE.COMYou will be prompted for the database Master Password. It is important that you NOT FORGET this password.Enter Kerberos master key:
ここで鍵を保存して、
ローカルのマシンにあるサーバが取り出せるように します。
それにはkstashコマンドを使用します。
#kstashEnter 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_editOpening 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:passwdInstance:grunt<Not found>,Create [y] ?yPrincipal: passwd, Instance: grunt, kdc_key_ver: 1New Password:<---- ここは「RANDOM」と入力してください Verifying passwordNew Password:<---- ここは「RANDOM」と入力してくださいRandom password [y] ?yPrincipal'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:rcmdInstance: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 gruntEnter 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_editOpening 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:janeInstance:<Not found>,Create [y] ?yPrincipal: 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 janeMIT Project Athena (grunt.example.com) Kerberos Initialization for "jane"Password:
klist コマンドを用いてトークンを見て、
きちんとチケットを持って いるかどうか確認してください。
%klistTicket 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
データベースに対して認証されるかどうかチェックして
ください。
%passwdrealm 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_editOpening 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:janeInstance: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.rootMIT Project Athena (grunt.example.com) Kerberos Initialization for "jane.root"Password:
ここで root ユーザの
.klogin
ファイルにユーザを追加する必要があります。
#cat /root/.kloginjane.root@EXAMPLE.COM
su してみましょう。
%suPassword:
どのトークンを持っているか見てみましょう。
#klistTicket 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/.kloginjane.root@EXAMPLE.COM
同様に、ユーザのホームディレクトリの
.kloginファイルに次の
ような行がある場合には
%cat ~/.kloginjane@EXAMPLE.COM jack@EXAMPLE.COM
jane または jack
という名前で (前述のkinit によって)
認証されている EXAMPLE.COM
という管理領域のユーザ なら誰でもrlogin や
rsh, rcp等によってこ
のシステム (grunt)
のjaneのアカウントまたはファ
イルにアクセスできます。
たとえば、jane が他のシステムに
Kerberos を用いて login します。
%kinitMIT Project Athena (grunt.example.com)Password:%rlogin gruntLast 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 janeMIT 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> まで電子メールを (英語で) 送ってください。