Solaris のシステム管理 (セキュリティサービス)

第 26 章 Kerberos アプリケーションの使用 (手順)

この章は、Kerberos サービスが構成されているシステムのユーザーを対象としています。この章では、提供されている Kerberos コマンドとサービスの使用方法について説明します。この章を読み進めるには、これらのコマンド (Kerberos 以外) にすでに慣れ親しんでいる必要があります。

この章は一般的なユーザーを対象としているため、 チケットの取得、表示、および廃棄について説明します。また、Kerberos パスワードの選択または変更についても説明します。

この章の内容は次のとおりです。

Solaris Kerberos 製品の概要については、第 21 章Kerberos サービスについてを参照してください。

Kerberos チケットの管理

この節では、チケットの取得、表示、および破棄を行う方法を説明します。チケットの概要については、「Kerberos サービスの動作」を参照してください。

チケットを意識する必要があるか

すべての SEAM リリースまたは Solaris 10 リリースがインストールされている場合、Kerberos は login に組み込まれており、チケットの取得はログイン時に自動的に行われます。Kerberos に対応するコマンドの rshrcprdisttelnet、および rlogin は通常、チケットのコピーをほかのマシンに転送するように設定されています。そうすると、ユーザーがチケットを明示的に要求しなくても、それらのマシンにアクセスできるようになるからです。これがデフォルトの動作ですが、特定のユーザーの構成はこの自動転送を含んでいない場合があります。チケットの転送については、「Kerberos コマンドの概要」および 「Kerberos チケットの転送」を参照してください。

チケットの有効期限については、「チケットの有効期限」を参照してください。

Kerberos チケットの作成

通常、PAM が適切に設定されている場合、ログインするとチケットが自動的に作成されるため、チケットを取得するために特別な作業をする必要はありません。ただし、チケットが期限切れになった場合は、チケットを作成する必要があります。また、デフォルトの主体のほかに別の主体を使用する必要がある場合 (たとえば、rlogin -l を使って他人としてマシンにログインする) があります。

チケットを作成するには、kinit コマンドを使用します。


% /usr/bin/kinit
 

kinit コマンドからはパスワードの入力を求めるプロンプトが表示されます。kinit コマンドの詳細な構文については、kinit(1) のマニュアルページを参照してください。


例 26–1 Kerberos チケットの作成

次の例では、ユーザー jennifer が自分のシステムにチケットを作成します。


% kinit
Password for jennifer@ENG.EXAMPLE.COM:  <Type password>
 

次の例では、ユーザー david-l オプションを使用して 3 時間有効なチケットを作成します。


% kinit -l 3h david@EXAMPLE.ORG
Password for david@EXAMPLE.ORG:  <Type password>
 

次の例では、ユーザー david は、-f オプションを使用して、転送可能チケットを作成します。たとえば、この転送可能チケットを使用して、2 つ目のシステムにログインして、3 つ目のシステムに telnet を実行できます。


% kinit -f david@EXAMPLE.ORG
Password for david@EXAMPLE.ORG:     <Type password>
 

転送チケットをどのように使用するかについては、「Kerberos チケットの転送」および 「チケットの種類」を参照してください。


Kerberos チケットの表示

すべてのチケットが同じ属性を持つわけではありません。チケットの属性には、「転送可能 (Forwardable)」、「遅延 (Postdated)」などがあります。また、1 つのチケットに「転送可能」と「遅延」の両方が指定されていることもあります。現在のチケットが何で、どのような属性を持つかを知るには、klist コマンドで -f オプションを使用します。


% /usr/bin/klist -f

次の記号はチケットに関連付けられる属性です。klist によって表示されます。

A

事前認証済み

D

遅延可能 (Postdatable)

d

遅延 (Postdated)

F

転送可能 (Forwardable)

f

転送済み (Forwarded)

I

初期 (Initial)

i

無効 (Invalid)

P

プロキシ可能 (Proxiable)

p

プロキシ (Proxy)

R

更新可能 (Renewable)

チケットに指定できる属性については、「チケットの種類」を参照してください。


例 26–2 Kerberos チケットの表示

次の例は、ユーザー jennifer の初期チケットが転送可能 (F) と遅延 (d) のプロパティーを持っていて、まだ検証されていないこと (i) を示します。


% /usr/bin/klist -f
Ticket cache: /tmp/krb5cc_74287
Default principal: jennifer@EXAMPLE.COM
 
Valid starting                 Expires                 Service principal
09 Mar 04 15:09:51  09 Mar 04 21:09:51  nfs/EXAMPLE.COM@EXAMPLE.COM
        renew until 10 Mar 04 15:12:51, Flags: Fdi
 

次の例は、ユーザー david が別のホストから自分のホストに転送済み (f) チケットを 2 つ持っていることを示します。これらのチケットは転送可能 (F) です。


% klist -f
Ticket cache: /tmp/krb5cc_74287
Default principal: david@EXAMPLE.COM
 
Valid starting                 Expires                 Service principal
07 Mar 04 06:09:51  09 Mar 04 23:33:51  host/EXAMPLE.COM@EXAMPLE.COM
        renew until 10 Mar 04 17:09:51, Flags: fF
 
Valid starting                 Expires                 Service principal
08 Mar 04 08:09:51  09 Mar 04 12:54:51  nfs/EXAMPLE.COM@EXAMPLE.COM
        renew until 10 Mar 04 15:22:51, Flags: fF

次の例は、-e オプションを使用してセッション鍵の暗号化タイプとチケットを表示させる方法を示しています。-a オプションを使用すると、ネームサービスが変換を行える場合、ホストアドレスをホスト名に変換できます。


% klist -fea
Ticket cache: /tmp/krb5cc_74287
Default principal: david@EXAMPLE.COM
 
Valid starting                 Expires                 Service principal
07 Mar 04 06:09:51  09 Mar 04 23:33:51  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        renew until 10 Mar 04 17:09:51, Flags: FRIA
        Etype(skey, tkt): DES cbc mode with RSA-MD5, DES cbc mode with CRC-32
        Addresses: client.example.com

Kerberos チケットの破棄

現在のセッション中に取得したすべての Kerberos チケットを破棄するには、kdestroy コマンドを使用します。このコマンドは、資格キャッシュを破棄して、すべての資格とチケットを破棄します。通常、これは必要ありませんが、kdestroy コマンドを実行すると、ログインしていないときに資格キャッシュが継続して存在する可能性を減らすことができます。

チケットを破棄するには、kdestroy コマンドを使用します。


% /usr/bin/kdestroy

kdestroy コマンドは、そのユーザーのすべてのチケットを破棄します。このコマンドを使用して、特定のチケットを選択して破棄することはできません。

システムを離れるときに侵入者が権限を使用する危険がある場合は、kdestroy を使用してチケットを破棄するか、スクリーンセーバーを使って画面をロックする必要があります。

Kerberos パスワード管理

Kerberos サービスが構成されている場合、パスワードを 2 つ持つことになります。 通常の Solaris パスワードと Kerberos パスワードです。これらのパスワードは同じでも、異なっていても構いません。

パスワード選択のヒント

パスワードには、キーボードから入力できるほとんどの文字を使用できます。ただし、Ctrl キーと Return キーは使用できません。良いパスワードとは、覚えやすく、しかも他人が簡単に推定できないパスワードです。悪いパスワードの例を次に示します。

良いパスワードとは 8 文字以上の長さで、大文字、小文字、数字、句読記号などが混在しているものです。次に例を示します。


注意 – 注意 –

これらの例は使用しないでください。マニュアルの例に使用されているパスワードは侵入者が最初に試みるパスワードです。


パスワードの変更方法

PAM が適切に設定されている場合、Kerberos パスワードは次の 2 つの方法で変更できます。

パスワードを変更しても、変更がシステム全体に伝播されるまでには、ある程度の時間が必要です (特に大規模なネットワークでは)。システムの設定方法によりますが、この時間は数分から 1 時間以上になることがあります。パスワードを変更したあとすぐに新しい Kerberos チケットを取得する場合は、新しいパスワードをまず試してください。新しいパスワードが有効でない場合は、以前のパスワードを使用して再度試してください。

Kerberos V5 プロトコルでは、システム管理者が有効なパスワードの基準をユーザーごとに設定できます。この基準は、ユーザーごとの「ポリシー」に定義できます。デフォルトのポリシーを使用することもできます。ポリシーの詳細については、「Kerberos 主体の管理」を参照してください。

たとえば、ユーザー jenniferjenpol ポリシーでは、パスワードは 8 文字以上で、2 種類以上の文字で構成されると定義されているとします。その場合、パスワードとして「sloth」を入力すると、kpasswd によって拒否されます。


% kpasswd
kpasswd: Changing password for jennifer@ENG.EXAMPLE.COM.
Old password:   <Jennifer types her existing password>
kpasswd: jennifer@ENG.EXAMPLE.COM's password is controlled by
the policy jenpol
which requires a minimum of 8 characters from at least 2 classes 
(the five classes are lowercase, uppercase, numbers, punctuation,
and all other characters).
New password: <Jennifer types  'sloth'>
New password (again):  <Jennifer re-types 'sloth'>
kpasswd: New password is too short.
Please choose a password which is at least 4 characters long.

次に、jennifer はパスワードとして「slothrop49」を入力します。「slothrop49」は長さが 8 文字以上で、2 種類の文字 (数字と小文字) が混在しているため基準に合っています。


% kpasswd
kpasswd: Changing password for jennifer@ENG.EXAMPLE.COM.
Old password:  <Jennifer types her existing password>
kpasswd: jennifer@ENG.EXAMPLE.COM's password is controlled by
the policy jenpol
which requires a minimum of 8 characters from at least 2 classes 
(the five classes are lowercase, uppercase, numbers, punctuation,
and all other characters).
New password:  <Jennifer types  'slothrop49'>
New password (again):  <Jennifer re-types 'slothrop49'>
Kerberos password changed.

例 26–3 パスワードの変更方法

次の例では、ユーザー davidpasswd を使用して、UNIX および Kerberos のパスワードを変更します。


% passwd
	passwd:  Changing password for david
	Enter login (NIS+) password:                <Type the current UNIX password>
	New password:                        <Type the new UNIX password>
	Re-enter password:                   <Confirm the new UNIX password>
	Old KRB5 password:                   <Type the current Kerberos password>
	New KRB5 password:                   <Type the new Kerberos password>
	Re-enter new KRB5 password:          <Confirm the new Kerberos password>

passwd では、UNIX パスワードと Kerberos パスワードの両方が要求されることに注意してください。この動作は、デフォルトの設定です。この場合、ユーザー davidkpasswd を使用して、次の例で示すように Kerberos パスワードを変更する必要があります。

次の例では、ユーザー davidkpasswd を使用して、Kerberos パスワードだけを変更します。


% kpasswd
kpasswd: Changing password for david@ENG.EXAMPLE.COM.
Old password:           <Type the current Kerberos password>
New password:           <Type the new Kerberos password>
New password (again):   <Confirm the new Kerberos password>
Kerberos password changed.
 

次の例では、ユーザー david が、Kerberos 主体 david/admin (有効な UNIX ユーザーではない) のパスワードを変更します。kpasswd を使用する必要があります。


% kpasswd david/admin
kpasswd:  Changing password for david/admin.
Old password:           <Type the current Kerberos password>
New password:           <Type the new Kerberos password>
New password (again):   <Type the new Kerberos password>
Kerberos password changed. 
 

アカウントへのアクセス認可

他人があなたのアカウントを使用して (あなたとして) ログインする必要がある場合、Kerberos を使用すれば、パスワードを公表せずにそれを実現できます。それには、ホームディレクトリに .k5login ファイルを格納します。.k5login ファイルは、アクセス認可を与える各ユーザーに対応する、1 つ以上の Kerberos 主体の一覧です(1 つの主体を 1 行に入力する必要があります)。

ユーザー david が次のような .k5login ファイルをホームディレクトリに格納しているとします。


jennifer@ENG.EXAMPLE.COM
joe@EXAMPLE.ORG  

このファイルによって、ユーザー jenniferjoedavid として振る舞うことができます。ただしそれには、その二人がすでにそれぞれのレルムにおいて Kerberos チケットを取得している必要があります。たとえば、jennifer は david として、david のマシン (boston) に david 自身のパスワードを入力せずに遠隔ログインできます。

図 26–1 アカウントへのアクセスを認可する .k5login ファイルの使用

この図については、前の本文中で説明しています。

david のホームディレクトリが、Kerberos V5 プロトコル経由で別の (3 つ目の) マシンから NFS マウントされている場合、jennifer がそのホームディレクトリにアクセスするには、彼女が転送チケットを所持している必要があります。転送可能チケットの使用例については、「Kerberos チケットの作成」を参照してください。

ネットワーク上のほかのマシンにログインする必要がある場合、それらのマシン上の .k5login ファイル内に自分の Kerberos 主体を追加します。

.k5login ファイルの使用は、次の理由により、パスワードを公表するよりも安全です。

.k5login ファイルの一般的な使い方の 1 つは、このファイルを root のホームディレクトリに格納し、ファイル内に記述された Kerberos 主体にそのマシンの root アクセス権限を与える、というものです。この設定により、システム管理者は、スーパーユーザーのパスワードを公表したり、そのパスワードをネットワーク上で入力したりせずに、ローカルで root になることも、root として遠隔ログインすることもできるようになります。


例 26–4 アカウントへのアクセスを認可する .k5login ファイルの使用

jennifer が、マシン boston.example.comroot としてログインするとします。彼女の主体名は boston.example.com 上の root ホームディレクトリ内の .k5login ファイルに含まれているため、彼女はここでもパスワードを入力する必要がありません。


% rlogin boston.example.com -l root -x
This rlogin session is using DES encryption for all data transmissions.
Last login: Thu Jun 20 16:20:50 from daffodil
SunOS Release 5.7 (GENERIC) #2: Tue Nov 14 18:09:31 EST 1998
boston[root]% 

Kerberos ユーザーコマンド

Kerberos V5 製品は「シングルサインオン」システムです。つまり、1 度だけパスワードを入力する必要があるという意味です。Kerberos V5 プログラムがユーザーに代わって認証 (オプションで暗号化も) 行います。これは、Kerberos が、既存のよく知られたネットワークプログラム群ごとに構築されているためです。Kerberos V5 アプリケーションは、既存の UNIX ネットワークプログラムに Kerberos 機能を追加したバージョンです。

たとえば、ある Kerberos プログラムを使って特定の遠隔ホストに接続する場合、そのプログラム、KDC、その遠隔ホストの 3 者は、一連のネゴシエーションをすばやく実行します。これらのネゴシエーションが正常終了した場合、そのプログラムは遠隔ホストに対し、そのユーザーの身元をユーザーに代わって証明したことになり、遠隔ホストはそのユーザーにアクセスを認可します。

Kerberos コマンドは最初に、Kerberos を使用して認証しようとする点に注意してください。Kerberos 認証が失敗すると、エラーが発生するか、UNIX 認証が試みられますが、どちらになるかは、コマンドに指定されるオプションによって決まります。詳細は、各 Kerberos コマンドのマニュアルページの「Kerberos Security」節を参照してください。

Kerberos コマンドの概要

Kerberos ネットワークサービスは、インターネット上のほかのマシンと接続するプログラムです。これらには、次のプログラムがあります。

これらのプログラムは、Kerberos チケットを透過的に使って認証 (と暗号化) のネゴシエーションを遠隔ホストと行うための機能も備えています。それらを使用する際の変化といえば、多くの場合、パスワードを入力する必要がなくなったことに気付くことぐらいです。このとき、Kerberos がユーザーに代わってユーザーの身元証明を行なってくれています。

Kerberos V5 ネットワークプログラムは、次の機能を実現するオプションを備えています。


注 –

この節では、読者がすでにこれらの Kerberos 以外のプログラムに慣れ親しんでいることを前提に、Kerberos V5 パッケージによって追加された Kerberos 機能だけに的を絞って説明しています。ここで説明するコマンドの詳細については、各コマンドのマニュアルページを参照してください。


次の Kerberos オプションが、ftprcprloginrsh、および telnet に追加されています。

-a

既存のチケットを使用して自動ログインしようとします。getlogin() によって返されたユーザー名を使用します。ただし、現在のユーザー ID と異なる場合には使用しません。詳細は、telnet(1) のマニュアルページを参照してください。

-f

「再転送不可能な」チケットを遠隔ホストに転送します。このオプションは、-F オプションと互いに排他の関係にあります。つまり、これらを同一コマンド内で同時に使用することはできません。

3 つ目のホスト上のほかの Kerberos に基づくサービスに自身を認証する必要がある場合、チケットを転送します。たとえば、ほかのマシンに遠隔ログインして、そこから 3 つ目のマシンに遠隔ログインします。

遠隔ホスト上のホームディレクトリが Kerberos V5 を使用して NFS マウントされている場合、転送可能チケットを使用する必要があります。そうしなかった場合、ホームディレクトリにアクセスできません。つまり、最初、システム 1 にログインするものとします。システム 3 からホームディレクトリをマウントしたホームマシン、システム 2 にシステム 1 から遠隔ログインします。rlogin-f または -F オプションを使用しない場合、チケットがシステム 3 に転送されないため、ホームディレクトリを取得できません。

kinit はデフォルトで、転送可能なチケット認可チケット (TGT) を取得します。ただし、このような構成を変更することは可能です。

チケットの転送の詳細は、「Kerberos チケットの転送」を参照してください。

-F

「再転送可能な」TGT のコピーを遠隔システムに転送します。このオプションは、-f と似ていますが、さらに先のマシン (たとえば 4 つ目や 5 つ目のマシン) へのアクセスを可能とする点が異なります。したがって、-F オプションは -f オプションのスーパーセットであると考えられます。-F オプションと -f オプションは、互いに排他の関係にあります。つまり、これらを同一コマンド内で同時に使用することはできません。

チケットの転送の詳細は、「Kerberos チケットの転送」を参照してください。

-k realm

krb5.conf ファイルを使用してレルム自身を決定する代わりに、特定の realm 内の遠隔ホストのチケットを要求します。

-K

チケットを使用して遠隔ホストへの認証を行いますが、自動ログインは行いません。

-m mechanism

/etc/gss/mech ファイルの記載どおりに、使用する GSS-API セキュリティーメカニズムを指定します。デフォルトは kerberos_v5

-x

このセッションを暗号化します。

-X auth-type

auth-type タイプの認証を無効にします。

次の表は、コマンド固有のオプションを示します。「X」は、コマンドがそのオプションを持つことを示します。

表 26–1 ネットワークコマンドの Kerberos オプション

 

ftp

rcp

rlogin

rsh

telnet

-a

 

 

 

 

-f

 

-F

 

 

-k

 

-K

 

 

 

 

-m

 

 

 

 

-x

-X

 

 

 

 

さらに、ftp では、ftp のプロンプト対してコマンドを入力することでにセッションの保護レベルを設定できます。

clear

保護レベルを「clear」(保護なし) に設定します。この保護レベルがデフォルトです。

private

保護レベルを「private」に設定します。データ転送は、暗号化により機密性と完全性が保護されます。ただし、この機密サービスは、Kerberos ユーザーによっては利用できない可能性もあります。

safe

保護レベルを「safe」に設定します。データ転送は、暗号チェックサムによって完全性が保護されます。

ftp プロンプトで protect と入力したあとに上記に示した保護レベル (clearprivate、または safe) のいずれかを入力して、保護レベルを設定することもできます。

Kerberos チケットの転送

「Kerberos コマンドの概要」で説明したように、一部のコマンドで -f または -F オプションを使用するとチケットを転送できます。チケットを転送すると、ネットワークトランザクションの「チェーン化」が可能となります。たとえば、あるマシンに遠隔ログインして、そこから別のマシンに遠隔ログインできます。-f オプションではチケットを転送することができますが、-F オプションでは転送済みのチケットを再転送することが可能です。

図 26–2 で、ユーザー davidkinit を使用して、転送不可能なチケット認可チケット (TGT) を取得します。-f オプションを指定しなかったため、チケットは転送不可能なチケットです。シナリオ 1 では、マシン B に遠隔ログインできますが、それ以上遠隔ログインできません。シナリオ 2 の rlogin -f コマンドは失敗します。なぜなら、彼は転送不可能なチケットを転送しようとしているからです。

図 26–2 転送不可能なチケットの使用

この図については、前の本文中で説明しています。

実際にはデフォルトで、kinit が転送可能なチケットを取得するように Kerberos 構成ファイルが設定されます。ただし、ユーザーの構成はこれと異なっても構いません。説明するために、TGT が kinit -f で起動されない限り、kinit は転送可能な TGT を取得できないと想定します。kinit には、-F オプションがないことに注意してください。TGT は、転送可能、転送不可能のいずれかです。

図 26–3 で、ユーザー david は、kinit -f を使用して、転送可能な TGT を取得します。シナリオ 3 では、rlogin で転送可能なチケットを使用するため、マシン C に到達できます。シナリオ 4 の 2 回目の rlogin は失敗します。なぜなら、このチケットは再転送可能ではないからです。シナリオ 5 のように -F オプションを代わりに使用すれば、2 回目の rlogin は成功し、チケットがマシン D に再転送されます。

図 26–3 転送可能チケットの使用

この図については、前の本文中で説明しています。

Kerberos コマンドの使用 (例)

次の例は、Kerberos コマンドのオプションの使用方法を示しています。


例 26–5 telnet-a-f、および -x オプションを使用する

この例では、ユーザー david はすでにログインしており、マシン denver.example.comtelnet しようとしています。彼は、-f オプションを使って既存のチケットを転送し、-x オプションを使ってセッションを暗号化し、-a オプションを使って自動ログインを実行します。3 つ目のホストのサービスを使用する予定はないため、ここでは -F ではなく -f を使用しています。


% telnet -a -f -x denver.example.com 
Trying 128.0.0.5... 
Connected to denver.example.com. Escape character is '^]'. 
[ Kerberos V5 accepts you as "david@eng.example.com" ] 
[ Kerberos V5 accepted forwarded credentials ] 
SunOS 5.9: Tue May 21 00:31:42 EDT 2004  Welcome to SunOS 
%

david のマシンが、Kerberos を使用して denver.example.com に対する彼の認証を行い、さらに自動ログインしている点に注意してください。彼は、暗号化されたセッションと、いつでも利用可能なチケットのコピーとを手に入れましたが、パスワードを入力する必要は一度もありませんでした。Kerberos 以外のバージョンの telnet を使用している場合、パスワードの入力を要求され、そのパスワードは暗号化されていないネットワーク上で送信されます。その時点で侵入者がネットワークトラフィックを監視していると、侵入者は david のパスワードを知ることになります。

Kerberos チケットを転送した場合、telnet (およびここで説明したその他のコマンド) は、終了時にそのチケットを破棄します。



例 26–6 rlogin-F オプションを使用する

ここでは、ユーザー jennifer が自身のマシン boston.example.com にログインするものとします。-F オプションを使用して既存のチケットを転送し、-x オプションを使用してセッションを暗号化します。-f ではなく -F を選択します。これは boston にログインしたあとで、再転送されるチケットが必要な別のネットワークトランザクションを実行するためです。また、既存のチケットを転送するので、パスワードを入力する必要はありません。


% rlogin boston.example.com -F -x
This rlogin session is using encryption for all transmissions.
Last login Mon May 19 15:19:49 from daffodil 
SunOS Release 5.9 (GENERIC) #2 Tue Nov 14 18:09:3 EST 2003 
%


例 26–7 ftp で保護レベルを設定する

joeftp を使用して、マシン denver.example.com のディレクトリ ~joe/MAIL から自分宛てのメールを取得します。ただし、セッションを暗号化します。やり取りは次のようになります。


% ftp -f denver.example.com
Connected to denver.example.com
220 denver.example.org FTP server (Version 6.0) ready.
334 Using authentication type GSSAPI; ADAT must follow
GSSAPI accepted as authentication type 
GSSAPI authentication succeeded Name (daffodil.example.org:joe) 
232 GSSAPI user joe@MELPOMENE.EXAMPLE.COM is authorized as joe
230 User joe logged in.
Remote system type is UNIX.
Using BINARY mode to transfer files.
ftp> protect private
200 Protection level set to Private
ftp> cd ~joe/MAIL
250 CWD command successful.
ftp> get RMAIL
227 Entering Passive Mode (128,0,0,5,16,49)
150 Opening BINARY mode data connection for RMAIL (158336 bytes).
226 Transfer complete. 158336 bytes received in 1.9 seconds (1.4e+02 Kbytes/s)
ftp> quit
% 

セッションを暗号化するために、joe は保護レベルを private に設定しています。