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

第 21 章 Kerberos サービスについて

この章では、Kerberos サービスについて説明します。この章の内容は次のとおりです。

Kerberos サービスとは

Kerberos サービス」は、セキュリティー保護されたネットワーク経由のトランザクションを提供するクライアントサーバー型のアーキテクチャーです。Kerberos サービスでは、強力なユーザー認証とともに、整合性とプライバシを提供します。「認証」により、ネットワークトランザクションの送信者と受信者の識別情報が正しいことが保証されます。さらに Kerberos サービスを使用して、送受信するデータの整合性が検証され(「整合性」)、伝送時にデータが暗号化されます(「プライバシ」) 。Kerberos サービスを使用して、他のマシンにログインしてコマンドを実行したり、データを交換したりファイルを安全に転送したりできます。Kerberos サービスは承認サービスも提供するため、システム管理者はサービスやマシンへのアクセスを制限できます。また、Kerberos ユーザーは、自分のアカウントに他人がアクセスするのを制限できます。

Kerberos サービスは「シングルサインオン」システムです。つまり、Kerberos サービスからセッションについて一度だけ認証を受ければ、そのセッションでは、それ以後のすべてのトランザクションが自動的に認証されます。いったん Kerberos サービスから認証されたユーザーは、ftprsh などの Kerberos に基づくコマンドを使用したり、NFS ファイルシステム上のデータにアクセスするたびに、自分自身を認証する必要はありません。つまり、これらのサービスを使用するたびに、ネットワークを介してパスワードを送り、傍受される危険を冒す必要がありません。

Solaris Kerberos サービスは、マサチューセッツ工科大学 (MIT) で開発された Kerberos V5 ネットワーク認証プロトコルに基づいています。そのため、Kerberos V5 製品を使用したことがあるユーザーは、Solaris バージョンにもすぐ慣れるはずです。Kerberos V5 プロトコルはネットワークセキュリティーの事実上の業界標準であるため、Solaris バージョンはほかのシステムとの相互運用性に優れています。つまり、Solaris Kerberos サービスは Kerberos V5 プロトコルを使用するシステムと協調して動作するため、異機種システム混在のネットワークであってもトランザクションのセキュリティーが保護されます。さらに Kerberos サービスでは、複数のドメイン間でも単一のドメイン内でも認証やセキュリティーの機能を使用できます。

Kerberos サービスには、Solaris アプリケーションを実行するための柔軟性が備わっています。NFS サービス、telnetftp などのネットワークサービスに関して、Kerberos に基づく要求と Kerberos 以外の要求に対応できるようにサービスを構成できます。このため、Kerberos サービスが有効になっていないシステムで動作する Solaris アプリケーションも正しく動作します。もちろん、Kerberos に基づくネットワーク要求だけを許可するように Kerberos サービスを設定することもできます。

Kerberos サービスは、Generic Security Service Application Programming Interface (GSS-API) を使用するアプリケーションの使用時に、認証、整合性、およびプライバシのために Kerberos を使用することができるセキュリティーメカニズムを備えています。ただし、ほかのセキュリティーメカニズムが開発されている場合には、アプリケーションで使用されるセキュリティーメカニズムを Kerberos サービスに限定しておく必要はありません。Kerberos サービスは、GSS-API にモジュールとして統合できるように設計されているため、GSS-API を使用するアプリケーションは、必要に応じたセキュリティーメカニズムを使用できます。

Kerberos サービスの動作

この節では Kerberos 認証システムの概要について説明します。詳細については、「Kerberos 認証システムの動作方法」を参照してください。

Kerberos セッションが起動されたあとは、ユーザーから見ると Kerberos サービスが意識されることはほとんどありません。rshftp などのコマンドは、ほぼ変わりなく動作します。Kerberos セッションの初期化には通常、ログインと Kerberos パスワードの入力しか必要ありません。

Kerberos システムは、「チケット」の概念を中心に動作します。チケットは、ユーザー、および NFS サービスなどのサービスを特定する一連の電子情報です。運転免許証が運転する人と免許の種類を表すのと同じように、チケットもユーザーとユーザーのネットワークアクセス権を表します。Kerberos に基づくトランザクションを実行する (ほかのマシンへの遠隔ログインなど) と、「鍵配布センター (KDC)」に対してチケットの要求が透過的に送信されます。KDC はデータベースにアクセスしてそのユーザーを認証し、そのマシンへのアクセスを許可するチケットを返します。「透過的」とは、チケットを明示的に要求する必要がないという意味です。この要求は rlogin コマンドの中で行われます。特定のサービスのチケットを取得できるのは認証されたクライアントだけで、別のクライアントが識別情報を仮定して rlogin を使用することはできません。

チケットには一定の属性が与えられています。たとえば、チケットには、新しい認証処理を行わなくても別のマシンで使用できる「転送可能」の属性があります。また、指定の日付まで有効にならない「遅延」の属性もあります。どのユーザーがどの種類のチケットを取得できるかを指定するなど、チケットをどのように使用するかは、「ポリシー」によって設定されます。ポリシーは、Kerberos サービスのインストールや管理の際に決定します。


注 –

資格」と「チケット」という用語は、頻繁に使用されます。広い意味の Kerberos では、これらの用語は同じ意味で使われることがありますが、技術的には資格は、チケットとそのセッションに対する「セッション鍵」からなります。この違いについては、 「Kerberos によるサービスへのアクセス」で詳しく説明します。


次の節では、Kerberos 認証プロセスについて詳細に説明します。

初期認証: チケット認可チケット (TGT)

Kerberos 認証には、後続の認証を準備する初期認証と、後続の認証の 2 つのフェーズが あります。 

次の図では、初期認証の手順を示します。

図 21–1 Kerberos セッションの初期認証

クライアントは、まず KDC に TGT を要求し、次に KDC から受け取った TGT を復号化します。

  1. クライアント (ユーザー、または NFS などのサービス) は、KDC に TGT を要求して Kerberos セッションを開始します。ほとんどの場合、この要求はログイン時に自動的に実行されます。

    TGT は、ほかの特定のサービスのチケットを取得するために必要です。TGT は、パスポートに似ています。パスポートと同様に、TGT はユーザーを識別して、さまざまなビザの取得をユーザーに許可します。ここでいうビザ (チケット) は、外国に入国するためのものではなく、遠隔マシンやネットワークサービスにアクセスするためのものです。パスポートやビザと同様に、TGT などのチケットには有効期限があります。ただし、Kerberos コマンドは、ユーザーがパスポートを所有していることを通知し、ユーザーに代わってビザを取得します。ユーザー自身がトランザクションを実行する必要はありません。

    チケット認可チケットに類似した例として、4 つのスキー場で使える 3 日間のスキーパスを挙げます。ユーザーは、パスが期限切れになるまで、このパスを任意のスキー場で提示して、そのスキー場のリフトチケットを受け取ります。リフトチケットを入手したら、そのスキー場で好きなだけスキーをすることができます。翌日別のスキー場に行った場合は、またパスを提示して、そのスキー場のリフトチケットを入手します。ただし、Kerberos に基づくコマンドは、ユーザーが週末スキーパスを所有していることをユーザーに通知し、ユーザーに代わってリフトチケットを入手します。したがって、ユーザー自身がトランザクションを実行する必要はありません。

  2. KDC は TGT を作成し、それを暗号化してクライアントに送信します。クライアントは、自身のパスワードを使用して TGT を復号化します。

  3. クライアントは、有効な TGT を入手したので、TGT が期限切れになるまで、rlogintelnet などあらゆる種類のネットワーク操作チケットを要求できます。この TGT の有効期限は通常、数時間です。クライアントは一意のネットワーク操作を実行するたびに、TGT は KDC にその操作のチケットを要求します。

初期認証後の Kerberos 認証

クライアントが初期認証を受け取ると、後続の認証はそれぞれ次の図のように実行されます。

図 21–2 Kerberos 認証を使用してサービスへのアクセスを取得する

クライアントは、まず KDC にチケットを要求するため TGT を送り、次に受け取ったチケットを使用してサーバーにアクセスします。

  1. クライアントは、別のマシンに遠隔ログインするなど、特定のサービスのチケットを KDC に要求するために、識別情報の証拠として自身の TGT を KDC に送信します。

  2. KDC は、そのサービスのチケットをクライアントに送信します。

    たとえば、ユーザー joe が、krb5 認証を要する共有を行っている NFS ファイルシステムにアクセスするとします。このユーザーはすでに認証されている (すでに TGT を持っている) ため、そのファイルにアクセスを試みると、NFS クライアントシステムは NFS サービスのチケットを KDC から自動的および透過的に取得します。

    たとえば、ユーザー joe がサーバー boston 上で rlogin を使用するとします。このユーザーはすでに認証されている (つまり、すでにチケット認可チケットを持っている) ため、rlogin コマンドの一部として自動的かつ透過的にチケットを取得します。このチケットが期限切れになるまで、このユーザーは必要に応じて boston に遠隔ログインできます。joe がマシン denver に遠隔ログインする場合は、手順 1 の方法で別のチケットを取得します。

  3. クライアントはサーバーにチケットを送信します。

    NFS サービスを使用している場合、NFS クライアントは自動的および透過的に NFS サービスのチケットを NFS サーバーに送信します。

  4. サーバーはクライアントにアクセス権を許可します。

これらの手順では、サーバーと KDC 間の通信は発生していないように見えます。しかし、サーバーは KDC と通信していて、最初のクライアントと同様に、KDC に自身を登録しています。わかりやすくするために、その部分は省略しています。

Kerberos 遠隔アプリケーション

joe などのユーザーは、次の Kerberos に基づく (Kerberos 化された) コマンドを使用できます。

これらのアプリケーションは、同じ名前の Solaris アプリケーションと同じです。ただし、トランザクションを認証するときに Kerberos 主体を使用できるようにアプリケーションを拡張することにより、Kerberos に基づくセキュリティーを提供します。主体の詳細については、「Kerberos 主体」を参照してください。

これらのコマンドについては、「Kerberos ユーザーコマンド」で詳しく説明します。

Kerberos 主体

Kerberos サービス内のクライアントは、その「主体 (プリンシパル)」で識別されます。主体は、KDC がチケットを割り当てることができる一意の ID です。主体には、joe などのユーザー、または nfstelnet などのサービスがあります。

主体名は慣習により「一次」、「インスタンス」、「レルム」という 3 つの部分から なります。joe/admin@ENG.EXAMPLE.COM は一般的な Kerberos 主体の例です。上記の例では、

次に有効な主体名を示します。

Kerberos レルム

「レルム」とはドメインのようなもので、同じ「マスター KDC」の下にあるシステムをグループとして定義する論理ネットワークです。図 21–3 では、レルム間の関係を示します。階層構造のレルムでは、1 つのレルムがほかのレルムの上位集合になります。階層ではない (直接接続の) レルムでは、2 つのレルム間のマッピングを定義する必要があります。Kerberos サービスでは、レルム間で共通の認証が可能です。その場合、各レルムの KDC に、他のレルムの主体エントリだけが必要になります。Kerberos のこの機能は、「レルム間認証」と呼ばれます。

図 21–3 Kerberos レルム

図は、「ENG.EXAMPLE.COM」レルムが、「SEAMCO.COM」とは階層関係がなく、「EXAMPLE.COM」とは階層関係があることを示しています。

Kerberos サーバー

各レルムには、主体データベースのマスターコピーを保守するサーバーが含まれる必要があります。このサーバーを「マスター KDC サーバー」と呼びます。また各レルムには、主体データベースの重複コピーを保持する「スレーブ KDC サーバー」が少なくとも 1 つ必要です。マスター KDC サーバーおよびスレーブ KDC サーバーは、認証の確立に使用されるチケットを作成します。

レルムにはまた、Kerberos アプリケーションサーバー も含めることができます。このサーバーは、Kerberos サービス (ftptelnetrsh、NFS など) へのアクセスを提供します。SEAM 1.0 または 1.0.1 がインストールされている場合、レルムに Kerberos ネットワークアプリケーションサーバーが含まれている可能性がありますが、このソフトウェアはこれらのリリースには含まれていませんでした。

次の図では、レルムの構成例を示します。

図 21–4 一般的な Kerberos レルム

一般的な Kerberos レルム「EXAMPLE.COM」です。1 つのマスター KDC、3 つのクライアント、2 つのスレーブ KDC、および 2 つのアプリケーションサーバーからなっています。

Kerberos セキュリティーサービス

Kerberos サービスは、ユーザーの認証を行うほかに、次の 2 つのセキュリティーサービスを提供します。

開発者は、RPCSEC_GSS プログラミングインタフェースを使用することにより、セキュリティーサービスを選択可能な RPC ベースのアプリケーションを設計できます。

複数の Kerberos リリースの構成要素

Kerberos サービスの構成要素は、多数のリリースに組み込まれています。当初、Kerberos サービスと、Kerberos サービスをサポートするベースオペレーティングシステムへの変更は、“Sun Enterprise Authentication Mechanism” (SEAM) という製品名でリリースされました。SEAM 製品の大部分が Solaris ソフトウェアに組み込まれるようになると、SEAM リリースの内容は減りました。Solaris 10 リリースで、SEAM 製品のすべての構成要素が組み込まれたので、SEAM 製品の必要性はなくなりました。SEAM という製品名は、歴史的な理由で文書中に存在しています。

次の表は、各リリースに組み込まれている構成要素の一覧です。それぞれの製品リリースは、時系列で示しています。次の節では、すべての構成要素について説明します。

表 21–1 Kerberos リリースの内容

リリース名 

内容 

Solaris Easy Access Server 3.0 の SEAM 1.0 

Solaris 2.6 および Solaris 7 用の Kerberos サービスの完全リリース 

Solaris 8 の Kerberos サービス 

Kerberos クライアントソフトウェアのみ 

Solaris 8 Admin Pack の SEAM 1.0.1 

Solaris 8 用の Kerberos KDC と遠隔アプリケーション 

Solaris 9 の Kerberos サービス 

Kerberos KDC とクライアントソフトウェアのみ 

SEAM 1.0.2 

Solaris 9 用の Kerberos 遠隔アプリケーション 

Solaris 10 の Kerberos サービス 

機能が拡張された Kerberos サービスの完全リリース 

Kerberos の構成要素

MIT から提供される Kerberos V5 製品と同様に、Solaris Kerberos サービスには次の構成要素が含まれます。

さらに、Solaris Kerberos サービスには次の構成要素が含まれています。

Solaris 10 5/08 リリースでの Kerberos の追加機能

Solaris 10 5/08 リリースから、次のような拡張機能が使用できます。

Solaris 10 8/07 リリースでの Kerberos の追加機能

Solaris 10 8/07 リリースでは、MIT Kerberos V5 アプリケーションプログラミングインタフェース (krb5-api) がサポートされています。詳細は、libkrb5(3LIB) および krb5-config(1) のマニュアルページを参照してください。また、mit.edu にある MIT Kerberos V5 プロジェクトの Web ページも参照し、詳細ドキュメントが利用可能になった時点でそれらを入手してください。

krb5-api が使用可能になりましたが、GSS-API は独立したセキュリティーメカニズムであり、IETF 標準でもあるため、GSS-API を使ってネットワークの認証、完全性、プライバシを実現することを強くお勧めします。詳細は、libgss(3LIB) のマニュアルページを参照してください。

Solaris 10 6/06 リリースでの Kerberos の追加機能

Solaris 10 6/06 リリースから、ktkt_warnd デーモンは、資格の有効期限が近づいてきたとき、ユーザーに警告するだけでなく、資格を自動的に更新するようになりました。資格を自動的に更新するには、ユーザーがログインしている必要があります。

Solaris 10 3/05 リリースでの Kerberos の拡張機能

Solaris 10 リリースに含まれる Kerberos の機能拡張は、次のとおりです。そのうちのいくつかは、以前の Software Express リリースで採用され、Solaris 10 Beta リリースで更新されたものです。

Solaris 9 の Kerberos 構成要素

Solaris 9 には、遠隔アプリケーションを除いて、「Kerberos の構成要素」の構成要素がすべて含まれています。

SEAM 1.0.2 の構成要素

SEAM 1.0.2 には、遠隔アプリケーションが含まれています。SEAM 1.0 の構成要素のうちで、Solaris 9 リリースに組み込まれていないのはこれらのアプリケーションだけです。遠隔アプリケーションの構成要素は次のとおりです。

Solaris 8 の Kerberos 構成要素

Solaris 8 に含まれている Kerberos サービスはクライアント側の部分だけで、Kerberos サービスの構成要素の多くは含まれていません。Solaris 8 が動作するシステムであれば、SEAM 1.0.1 を別にインストールしなくても Kerberos クライアントとしては動作します。これらの Kerberos クライアント機能を使用するには、Solaris Easy Access Server 3.0 または Solaris 8 Admin Pack、MIT ディストリビューション、あるいは Windows 2000 を使用する KDC をインストールする必要があります。チケットを配布するための構成済み KDC がないと、クライアント側の構成要素は十分に機能しません。Solaris 8 には、次の構成要素が含まれます。

SEAM 1.0.1 の構成要素

SEAM 1.0.1 には、Solaris 8 に含まれていない SEAM 1.0 の構成要素がすべて含まれています。次の構成要素が含まれています。

SEAM 1.0 の構成要素

SEAM 1.0 リリースには、「Kerberos の構成要素」のすべての項目のほか、次の項目が含まれています。