2


WDR での Solaris WBEM Services の使用方法


Solaris WBEM Services の概要

Solaris WBEM Services では、WDR アプリケーション開発者に対して、Solaris 8 2/02 または Solaris 9 オペレーティング環境のいずれかが実行されているドメイン上でさまざまな WBEM サービスを提供しています。Solaris WBEM Services は Solaris ソフトウェアに含まれており、WBEM を使用して Solaris ソフトウェアが実行されているシステムを管理するアプリケーションを簡単に作成できるようになります。

この開発者向けマニュアルには、WDR アプリケーション開発者が理解しておかなければならない Solaris WBEM Services に関する情報のみを記載しています。Solaris WBEM Services についての詳細は、以下の Web サイトを参照してください。

http://www.sun.com/solaris/wbem

Solaris WBEM Services を使用すれば、管理対象リソース情報に安全にアクセスできるので、WDR を使用するアプリケーションでシステムリソース情報の取得とシステムリソースの管理を行えるようになります。管理対象リソース情報とは、ハードウェアおよびソフトウェアの状態情報、パフォーマンスメトリクス、または負荷均衡の実行やデバイスのフェイルオーバーに対する応答を行うときに管理アプリケーションで必要となるその他のデータなどのことです。この管理対象リソース情報にアクセスできるようにするプログラムが、Solaris WBEM Services に組み込まれている Solaris プロバイダです。

Solaris WBEM Services では、Common Information Model (CIM) を使用して、Solaris ソフトウェアが実行されているシステムにある管理対象オブジェクトを表すスキーマを作成します。CIM オブジェクトは Managed Object Format (MOF) ファイルに指定されています。このファイルは WDR で提供され、WDR のインストール時にコンパイルされます。

Solaris WBEM Services の層

Solaris WBEM Services は、以下の 3 つの層に存在するソフトウェアパッケージです。各層には、WDR アプリケーション開発者にとって重要なソフトウェアコンポーネントが存在しています。


Solaris WBEM Services のアプリケーション層

WDR アプリケーション開発者にとって特に役立つ、以下の Solaris WBEM Services アプリケーション層のソフトウェアプログラムについて、この章で詳しく説明します。

Sun WBEM User Manager と SMC ユーザーツール

Sun WBEM User Manager および SMC ユーザーツールアプリケーションを使用すると、システム管理者は、承認ユーザーの追加と削除、管理対象リソースに対する承認ユーザーのアクセス権の設定を行うことができます。

Solaris ソフトウェアが実行されているドメインでセキュリティーを管理するメカニズムには、WBEM アクセス制御リスト (ACL) と Solaris 役割によるアクセス制御 (RBAC) という異なる 2 つのメカニズムがあります。

ユーザーを既存の ACL に追加し、そのユーザーに読み取りアクセス権または読み取り・書き込みアクセス権のいずれかを与えるときには、WBEM User Manager を使用します。

RBAC を使ってユーザーを追加して、そのユーザーの役割と特権を与えるときには、Solaris Management Console (SMC) のユーザーツールを使用します。

ACL と RBAC によるシステムセキュリティーの詳細を含めた、WBEM セキュリティーの管理方法についての詳細は、WBEM セキュリティーサービスを参照してください。

Solaris Management Console (SMC) WBEM ログビューア

SMC WBEM ログビューアには、コマンドを発行したユーザー名、コマンドが発行されたクライアントコンピュータなどの情報が記録されているログファイルが表示されます。

Solaris WBEM Services には、システムイベントのロギングを使用可能にする API が含まれています。ログファイル、ログファイルに関連する規則、ログファイル形式、開発者がシステムイベントの記録に使用するクラス、およびログサービスを使用可能にする API の使用方法についての詳細は、Solaris WBEM ロギングサービス(およびそれ以降の節) を参照してください。

Managed Object Format (MOF) コンパイラ

MOF ファイルのコンパイルには MOF コンパイラを使用します。この MOF ファイルは、Solaris ソフトウェアが実行されているシステムの管理対象オブジェクトを表すオブジェクトが CIM スキーマで指定されている ASCII テキストファイルです。

WDR には MOF ファイルが 3 つ含まれており、これらファイルで、管理対象リソースを表すオブジェクトから構成されるスキーマを定義します。MOF ファイルの 1 つは、すべての Sun Fire システムに対して使用されます。もう 1 つのファイルは Sun Fire 15K および 12K システム用で、3 つめのファイルは Sun Fire 6800、4810、4800 または 3800 システム用です。

MOF コンパイラは、クラスとインスタンスが定義されている MOF ファイルのステートメントを読み取ってから、そのステートメントを CIM Object Manager Repository に追加します。これは、管理データに関する情報が集められている記憶領域です。

mofcomp コマンド

MOF コンパイラを起動し、MOF ファイルをコンパイルするには、mofcomp コマンドを使用します。

/usr/sadm/bin/mofcomp [-help] [-v] [-sc] [-si] [-sq] [-version] [-c cimom_ホスト名] [-u ユーザー名] [-p パスワード] ファイル名

コマンドの各引数は以下を意味します。

表 2-1 mofcomp コマンドの引数

引数

説明

-help

mofcomp コマンドの引数を一覧表示します。

-v

すべてのコンパイラメッセージが表示される冗長モードで、コンパイラを実行します。

-sc

"set class" オプションを付けてコンパイラを実行します。このオプションは、クラスがすでに存在していて、そのクラスにインスタンスが含まれていない場合はクラスを更新し、クラスが存在していない場合はエラーを返します。-sc オプションを指定しないときは、コンパイラでは接続されているネームスペースに CIM クラスを追加し、クラスがすでに存在している場合にエラーを返します。

-si

"set instance" オプションを付けてコンパイラを実行します。このオプションは、インスタンスがすでに存在している場合はインスタンスを更新し、インスタンスが存在していない場合はエラーメッセージを返します。-si オプションを指定しないときは、コンパイラでは接続されているネームスペースに CIM インスタンスを追加し、インスタンスがすでに存在している場合にエラーを返します。

-sq

"set qualifier types" オプションを付けてコンパイラを実行します。このオプションは、修飾子がすでに存在している場合は修飾子を更新し、修飾子が存在していない場合はエラーメッセージを返します。-sq オプションを指定しないときは、コンパイラでは接続されているネームスペースに CIM 修飾子を追加し、修飾子がすでに存在している場合にエラーを返します。

-version

MOF コンパイラのバージョン番号を表示します。

-c cimom_ホスト名

CIM Object Manager を実行しているシステムを指定します。

-u ユーザー名

CIM Object Manager に接続する際のユーザー名を指定します。CIM Object Manager へのアクセス権を要求するコンパイルでは、-u ユーザー名 オプションを使用してください。

 

-p と -u の両方を指定する場合は、セキュリティーに危険をもたらす可能性があるので、コマンド行にパスワードを入力する必要があります。より安全にパスワードを指定する方法は、コンパイラからパスワードを入力するプロンプトが表示されるように、-p ではなく -u を指定する方法です。mofcomp のパスワード保護のアドバイスを参照してください。

-p パスワード

CIM Object Manager に接続する際のパスワードを指定します。CIM Object Manager へのアクセス権を要求するコンパイルでは、このオプションを使用してください。

 

-p と -u の両方を指定する場合は、セキュリティーに危険をもたらす可能性があるので、コマンド行にパスワードを入力する必要があります。より安全にパスワードを指定する方法は、コンパイラからパスワードを入力するプロンプトが表示されるように、-p ではなく -u を指定する方法です。mofcomp のパスワード保護のアドバイスを参照してください。

ファイル名

コンパイルする MOF ファイルの名前。


MOF ファイルのコンパイル

MOF ファイル名に .mof という拡張子が含まれていてもいなくても、MOF ファイルをコンパイルできます。CIM スキーマと Solaris スキーマが記述されている MOF ファイルは、/usr/sadm/mof にあります。


procedure icon  MOF ファイルのコンパイル方法

1. オプションを付けないで MOF コンパイルを実行するときは、以下のコマンドを入力します。

# mofcomp ファイル名

以下に例を示します。

# mofcomp /usr/sadm/mof/Solaris_Application1.0.mof

Solaris_Application1.0.mof という名前の MOF ファイルが、CIM Object Manager Repository にコンパイルされます。

mofcomp のパスワード保護のアドバイス

mofcomp コマンドを、-p オプション、または -p と -u オプションを付けて実行し、コマンド行にパスワードを入力した場合には、他のユーザーが後で ps コマンドまたは history コマンドを実行して、その前に入力されたパスワードを表示する可能性があります。このときシステムからは、セキュリティー警告は表示されません。



注 - コマンド行でパスワードを入力するよう求めるコマンドを実行したときは、そのコマンドの実行後、ただちにパスワードを変更してください。これにより、自分の現在のパスワードを他のユーザーが表示することはありません。



安全ではない (セキュリティーが保護されない) コマンドの使用例を以下に示します。

% mofcomp -p Log8Rif

% mofcomp -up molly Log8Rif

上記のいずれかの方法で mofcomp コマンドを使用する場合は、コマンド実行後、ただちにパスワードを変更してください。


Solaris WBEM Services の管理層

WDR アプリケーション開発者にとって役立つ Solaris WBEM Services の管理層のソフトウェアプログラムは、Common Information Model (CIM) Object Manager です。

CIM Object Managerとは

Solaris WBEM Services には、WBEM 対応システムでオブジェクトを管理する CIM Object Manager が組み込まれています。個々の CIM オブジェクトは、CPU、入出力ボード、接続点などの管理対象システムオブジェクトを表します。

まず CIM Object Manager では、RMI または XML/HTTP プロトコルのいずれかを使用して、管理アプリケーションへの接続を受け付けて、CIM Object Manager Repository への接続を設定してから、クライアントアプリケーションからのサービス要求を待ちます。サービスには以下のものがあります。

WBEM クライアントは WBEM 対応システムに接続されると、WBEM 操作を要求できます。要求する WBEM 操作には、CIM クラスとインスタンスの作成、表示、および削除、プロパティー値の取り出し、指定したクラス階層内のクラスまたはそのインスタンスの列挙などがあります。

手動による CIM Object Manager の起動と停止

通常、CIM Object Manager は、インストール時と、/etc/init.d/init.wbem というユーティリティーによりドメインを起動するたびに、自動的に起動されます。このコマンドは、CIM Object Manager だけでなく Solaris Management Console (SMC) も起動します。両者はそれぞれ単一のプロセスとして実行されます。

CIM Object Manager を手動で起動したり停止したりする必要はありませんが、その必要が生じたときには手動で行うこともできます。init.wbem ユーティリティーの構文は次の通りです。

/etc/init.d/init.wbem start|stop|status

start オプションを指定すると、このコマンドによって呼び出されたドメイン上で CIM Object Manager が起動します。stop オプションを指定すると、そのドメイン上で CIM Object Manager が停止します。status オプションを指定すると、そのドメイン上での CIM Object Manager の状態が表示されます。


procedure icon  CIM Object Manager を起動する

1. システムプロンプトで以下のコマンドを入力し、スーパーユーザーとなります。

% su

2. root システムプロンプト (#) に、ドメインのスーパーユーザーのパスワードを入力します。

3. 以下のコマンドを入力して、CIM Object Manager を起動します。

# /etc/init.d/init.wbem start


procedure icon  CIM Object Manager を停止する

1. システムプロンプトで以下のコマンドを入力し、スーパーユーザーとなります。

% su

2. プロンプトが表示されたら、root システムプロンプト (#) に、ドメインのスーパーユーザーのパスワードを入力します。

3. 以下のコマンドを入力して、CIM Object Manager を停止します。

# /etc/init.d/init.wbem stop


Solaris WBEM Services のプロバイダ層

Solaris WBEM Services のプロバイダ層には、WDR アプリケーション開発者に特に役立つ Solaris プロバイダというソフトウェアプログラムが含まれています。

Solaris プロバイダ

Solaris プロバイダは、管理対象オブジェクトと通信するクラスです。プロバイダは、CIM Object Manager に Solaris オペレーティング環境が実行されているシステム上の管理対象リソースのインスタンスを提供し、管理対象デバイスの情報を取り出して設定します。

WDR アプリケーションが管理対象リソースに関する CIM データにアクセスするときには、まず WBEM でドメイン上のユーザーログイン情報を確認します。デフォルトでユーザーに与えられているのは、Read Only (読み取り専用) アクセス権です。WBEM システムのセキュリティーについての詳細は、WBEM セキュリティーサービスを参照してください。

CIM Object Manager では、オブジェクトプロバイダ API を使用してプロバイダと通信します。アプリケーションから CIM Object Manager の動的データの要求があると、CIM Object Manager はプロバイダ API 経由で応答し、要求された情報をプロバイダに渡します。

プロバイダは、マシン固有の独自のプロバイダであっても、Java Native Interface (JNI) を使って記述した移植性がある (マシンに依存しない) ものでも構いません。なお、Java Native Interface (JNI) は、Javatrademark Development Kit (JDKtrademark) に含まれています。


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

WBEM 対応システム上で不正アクセスから CIM オブジェクトを保護する主なセキュリティー機能には、以下の 3 つがあります。

認証

認証とは、Sun Fire システムにおいて、ユーザー、デバイスなどのエンティティーの識別情報を確認するプロセスのことです。正当なユーザーにはシステムリソースへのアクセスを許可し、認証できないユーザーにはアクセスを拒否する場合、認証がよく使用されます。

ユーザーがログインして、ユーザー名とパスワードを入力すると、クライアントではそのパスワードを使って、サーバーで確認される暗号化ダイジェストを生成します。ユーザーが認証されると、CIM Object Manager は MAC トークンを与えて、クライアントセッションを確立します。それ以降の操作はすべてセキュリティー保護されたクライアントセッション内で行われ、すべての操作には、認証プロセス時にネゴシエートされたセッションキーを使用する MAC トークンが含まれます (MAC トークンとは、メッセージを認証するときに使用されるセキュリティー情報が格納され、遠隔呼び出しに追加されるトークンパラメタのことです)。

承認

承認とは、ユーザー、プログラム、プロセスに対し、システムリソースにアクセスする権利を与えるプロセスのことです。承認は、認証に続いて行われます。

CIM Object Manager でユーザーの識別情報が認証された後、その識別情報を使用して、ユーザーがアプリケーションや関連タスクの実行を許可されているかどうか確認できます。CIM Object Manager では、機能ベースの承認をサポートしています。この承認では、特権ユーザーが他のユーザーに読み取り・書き込みアクセス権を割り当てることができます。このようにして承認されたユーザーは、既存の Solaris ユーザーアカウントに追加されます。

再実行保護

再実行保護は、セッションキーを確認することにより、未承認クライアントが、他のクライアントのメッセージを受信してサーバーに送信するのを防止するサービスです。

クライアントは、他のクライアントから CIM Object Manager に送信された最新のメッセージをコピーすることはできません。CIM Object Manager は、認証時にネゴシエートされたセッションキーに基づいて、すべてのメッセージで MAC を使用することにより、そのセッションを開始してクライアントサーバー認証に加わっていたクライアントとの間で、クライアントサーバーセッションの全通信が確かに行われていることを保証します。

MAC を使用して、メッセージがそのセッションに対してもともと認証を受けていたクライアントから送信されたものであること、およびそのメッセージが他のクライアントによって再実行されたものでないことを確認します。このタイプのメカニズムは、RMI メッセージを検証するときに WBEM で使用されます。ユーザー認証の交換中にネゴシエートされたセッションキーは、メッセージの MAC トークンのセキュリティー情報の暗号化に使用されます。

デジタル署名

WBEM セキュリティーサービスでは、メッセージのデジタル署名は実行されません。

セキュリティーの実装

Solaris オペレーティング環境内でセキュリティーを管理するときは、WBEM アクセス制御リストを使用します。

WBEM アクセス制御リスト

アクセス制御リストによるセキュリティーは、Solaris_Acl1.0.mof ファイルに定義されているクラスを使って実装します。Solaris WBEM Services 固有のアクセス制御リストによるセキュリティーは、Solaris WBEM Services のデフォルトの承認方式であり、すべての CIM 操作に適用されます。定義されているクラスのインスタンスによって、WBEM ユーザーやネームスペース、あるいはその両方に割り当てられるデフォルトの承認が決定されます。

ユーザーを既存のアクセス制御リストに追加して、そのユーザーに読み取りアクセス権または読み取り・書き込みアクセス権のいずれかを割り当てるときは、Sun WBEM User Manager を使用します。これについては、「Sun WBEM User Manager」の節で説明します。Sun WBEM User Manager は、/usr/sadm/bin/wbemadmin ディレクトリにあります。

詳細は、Sun WBEM User Manager の使用方法を参照してください。


Sun WBEM User Manager の使用方法

Sun WBEM User Manager を使用すると、特権ユーザーは、承認ユーザーの追加と削除、および承認ユーザーの CIM オブジェクトへのアクセス権の設定を、WBEM 対応システム上で行うことができます。すべてのユーザーは Solaris ユーザーアカウントを持っている必要があります。

Sun WBEM User Manager では、個々のネームスペースで、またはユーザーとネームスペースの組み合わせで、アクセス権を設定できます。ユーザーを追加してネームスペースを選択すると、ユーザーは指定したネームスペース内の CIM オブジェクトへの読み取りアクセス権をデフォルトで持つことができます。

1 つのネームスペースに対するすべてのユーザーのアクセスを制限してから、ユーザーごとに、そのネームスペースに対する読み取り、読み取り・書き込み、または書き込みアクセスを許可することができます。

個々の管理対象オブジェクトにはアクセス権を設定できません。ただし、ネームスペース内と各ユーザーについては、すべての管理対象オブジェクトのアクセス権を設定できます。

スーパーユーザーとしてログインしている場合は、WBEM User Manager を使用して、以下のような CIM オブジェクトに対するアクセス権を設定できます。


procedure icon  Sun WBEM User Manager を起動する

1. スーパーユーザーとして、以下のコマンドをコマンド行に入力します。

# /usr/sadm/bin/wbemadmin

Sun WBEM User Manager が読み込まれ、「ログイン」ダイアログボックスが表示されます。コンテキストヘルプを使用するには、ダイアログのフィールドをクリックして、「コンテキストヘルプ」パネルを表示します。

2. 「ログイン」ダイアログボックスの「ユーザー名」フィールドにユーザー名を入力します。

ログインするには、root\security ネームスペースへの読み取りアクセス権を持っている必要があります。デフォルトでは、Solaris ユーザーは guest アクセス権を持っています。このアクセス権は、ユーザーにデフォルトのネームスペースへの読み取りアクセスを許可します。読み取りアクセス権を持っているユーザーは、ユーザー特権を表示することはできますが、変更はできません。

ユーザーにアクセス権を与えるには、スーパーユーザーか、または root\security ネームスペースへの書き込みアクセス権を持っているユーザーとしてログインする必要があります。

3. 「ログイン」ダイアログボックスの「パスワード」フィールドに、ユーザーアカウントのパスワードを入力します。

4. 「了解」をクリックします。

「User Manager」ダイアログボックスが表示されます。ここには、ユーザーの一覧と、現在のドメイン上のネームスペース内の WBEM オブジェクトに対する各ユーザーのアクセス権が表示されています。


procedure icon  ユーザーにデフォルトのアクセス権を与える

1. Sun WBEM User Manager を起動します。

2. 「User Manager」ダイアログボックスの「ユーザーアクセス」部分で「追加」をクリックします。

ドメイン上で使用可能なネームスペースがすべて表示されているダイアログボックスが表示されます。

3. 「ユーザー名」フィールドに Solaris ユーザーのアカウント名を入力します。

4. 使用可能なネームスペースのリストからネームスペースを 1 つ選択します。

5. 「了解」をクリックします。

「User Manager」ダイアログボックスに表示されているユーザーのリストに、そのユーザー名が追加されます。

6. 「了解」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。または、「適用」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。

これで、指定したユーザーに、選択したネームスペースの CIM オブジェクトに対する読み取り専用アクセス権が与えられました。


procedure icon  ユーザーのアクセス権を変更する

1. Sun WBEM User Manager を起動します。

2. ユーザーのアクセス権が表示されているリストから、変更するユーザーを選択します。

3. そのユーザーに読み取り専用アクセス権を与えるには、「読み取り」チェックボックスをクリックします。そのユーザーに書き込みアクセス権を与えるには、「書き込み」チェックボックスをクリックします。

4. 「了解」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。または、「適用」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。


procedure icon  ユーザーのアクセス権を削除する

1. Sun WBEM User Manager を起動します。

2. 「User Manager」ダイアログボックスの「ユーザーアクセス」部分で、ユーザーのアクセス権が表示されているリストから、アクセス権を削除するユーザーを選択します。

3. 「削除」をクリックし、そのユーザーのネームスペースに対するアクセス権を取り消します。

確認を求めるダイアログボックスが表示され、そのユーザーのアクセス権を取り消してよいか確認を求められます。「了解」をクリックして、次に進みます。

4. 「了解」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。または、「適用」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。


procedure icon  ネームスペースへのアクセス権を設定する

1. Sun WBEM User Manager を起動します。

2. 「User Manager」ダイアログボックスの「ネームスペースへのアクセス」部分で「追加」をクリックします。

ドメインで使用可能なネームスペースがすべて表示されているダイアログボックスが表示されます。

3. アクセス権を設定するネームスペースを選択します。

ユーザーにはデフォルトでネームスペースへの読み取り専用アクセスが許可されており、「読み取り」チェック ボックスがチェックされています。書き込みアクセス権を与えるには、「書き込み」チェックボックスをクリックします。読み取り・書き込みアクセス権を与えるには、「読み取り」と「書き込み」チェックボックスをクリックします。ネームスペースへのアクセスを許可しないときは、「読み取り」と「書き込み」の両方のチェックボックスがチェックされていないことを確認します。

4. 「了解」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。または、「適用」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。


procedure icon  ネームスペースへのアクセス権を削除する

1. Sun WBEM User Manager を起動します。

2. 「User Manager」ダイアログボックスの「ネームスペースへのアクセス」部分で、アクセス権を削除するネームスペースを選択し、「削除」をクリックします。

これにより、選択したネームスペースからアクセス権が削除され、「User Manager」ダイアログボックスに表示されているネームスペースのリストからそのネームスペースが削除されます。

3. 「了解」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。または、「適用」をクリックして変更を保存し、「User Manager」ダイアログボックスを閉じます。


API を使用したアクセス制御の設定

Sun WBEM SDK API を使用して、ネームスペースでのアクセス制御や、ユーザーごとのアクセス制御を設定することができます。以下のセキュリティークラスが root\security ネームスペースに格納されています。

Solaris_UserACL クラスのインスタンスを作成してから、API を使用してそのインスタンスのアクセス権を変更すると、ネームスペース内の CIM オブジェクトに対するアクセス制御を、ユーザーごとに設定できます。同様に、Solaris_NameSpaceACL クラスのインスタンスを作成してから、API (setInstance メソッドなど) を使用して、そのインスタンスのアクセス権を設定すると、ネームスペースでのアクセス制御を設定することができます。

この 2 つのクラスを効果的に組み合わせて使用するには、まず Solaris_NameSpaceACL クラスを使って、ネームスペースのオブジェクトに対するすべてのユーザーのアクセスを制限し、次に Solaris_UserACL クラスを使って、選択したユーザーにそのネームスペースへのアクセスを許可する方法があります。



注 - アクセス制御リスト (ACL) は、DMTF が作成中の標準規格によって管理されます。現在 Solaris ACL スキーマは CIM に準拠していますが、DMTF により ACL 標準規格が最終的に策定されたときには、このスキーマを変更する必要があります。Solaris ACL スキーマクラスを使用して記述しているプログラムも、この変更の対象となる可能性があります。



Solaris_UserAcl クラス

Solaris_UserAcl クラスは Solaris_Acl 基底クラスを拡張したもので、この基底クラスから "r" (Read Only) のデフォルト値を持つ文字列プロパティー capability を継承します。

Solaris_UserAcl クラスの capability プロパティーを以下のいずれかの値に設定すると、アクセス権を設定できます。

表 2-2 capability プロパティーの設定

アクセス権

説明

r

Read Only (読み取り専用)

rw

Read/Write (読み取り・書き込み)

w

Write (書き込み)

none

Only (単独使用)


Solaris_UserAcl クラスでは、capability プロパティーのほかにも以下の 2 つの主要なプロパティーが定義されます。1 つのネームスペースに存在できるのは、この 2 つの namespace-username ACL でどちらか 1 つのインスタンスだけです。

表 2-3 Solaris_UserAcl クラスの主要プロパティー

プロパティー

データ型

目的

nspace

文字列

この ACL が適用されるネームスペースを特定する。

username

文字列

この ACL が適用されるユーザーを特定する。



procedure icon  ユーザーごとにアクセス制御を設定する

1. 以下のコードを使用して、Solaris_UserAcl クラスのインスタンスを作成します。

...

/* Create a namespace object initialized with root\security (name of namespace) on the local host. */

CIMNameSpace cns = new CIMNameSpace("", "root\security");

// Connect to the root\security namespace as root.

cc = new CIMClient(cns, "root", "root_password");

// Get the Solaris_UserAcl class

cimclass = cc.getClass(new CIMObjectPath("Solaris_UserAcl");

// Create a new instance of the Solaris_UserAcl

class ci = cimclass.newInstance(); ...

2. 以下のコードを使用して、capability プロパティーを目的のアクセス権に設定します。

...

/* Change the access rights (capability) to read/write for user Guest

on objects in the root\molly namespace.*/

ci.setProperty("capability", new CIMValue(new String("rw"));

ci.setProperty("nspace", new CIMValue(new String("root\
molly"));

ci.setProperty("username", new CIMValue(new String("guest"));

...

3. 以下のコードを使用して、新規作成したインスタンスを更新します。

...

// Pass the updated instance to the CIM Object Manager

cc.setInstance(new CIMObjectPath(), ci);

...

Solaris_NamespaceAcl クラス

Solaris_NamespaceAcl クラスは Solaris_Acl 基底クラスを拡張したもので、この基底クラスから "r" (GUEST と全ユーザーに対する読み取り専用アクセス権) のデフォルト値を持つ文字列プロパティー capability を継承します。Solaris_NamespaceAcl クラスでは、以下の主要なプロパティーが定義されます。

プロパティー

データ型

目的

nspace

文字列

このアクセス制御リスト (ACL) が適用されるネームスペースを特定する。1 つのネームスペースに存在できるのは、namespace ACL で 1 つのインスタンスだけです。



procedure icon  ネームスペースでのアクセス制御を設定する

1. 以下のコードを使用して、Solaris_namespaceACL クラスのインスタンスを作成します。

...

/* Create a namespace object initialized with root\security (name of namespace) on the local host. */

CIMNameSpace cns = new CIMNameSpace("", "root\security");

// Connect to the root\security namespace as root.

cc = new CIMClient(cns, "root", "root_password");

// Get the Solaris_namespaceAcl class

cimclass = cc.getClass(new CIMObjectPath("Solaris_namespaceAcl");

// Create a new instance of the Solaris_namespaceAcl

class ci = cimclass.newInstance();

...

2. 以下のコードを使用して、目的のアクセス権を許可するよう capability プロパティーを設定します。

...

/* Create a namespace object initialized with root\security (name of namespace) on the local host. */

CIMNameSpace cns = new CIMNameSpace("", "root\security");

// Connect to the root\security namespace as root.

cc = new CIMClient(cns, "root", "root_password");

// Get the Solaris_namespaceAcl class

cimclass = cc.getClass(new CIMObjectPath("Solaris_namespaceAcl");

// Create a new instance of the Solaris_namespaceAcl

class ci = cimclass.newInstance();

...

3. 以下のコードを使用して、新しく作成したインスタンスを更新します。

// Pass the updated instance to the CIM Object Manager

cc.setInstance(new CIMObjectPath(), ci);


Solaris Management Console (SMC) ユーザーツールの起動

SMC ユーザーツールを使用すると、ユーザーを既存の役割に追加し、既存のユーザーに RBAC 権を許可することができます。RBAC 権は、SMC ユーザーツールの「権利」部分で管理されます。


procedure icon  SMC ユーザーツールを起動する

1. 以下のコマンドを入力して、SMC 起動コマンドの場所に移動します。

# cd /usr/sbin

2. 以下のコマンドを入力して、SMC を起動します。

# smc

3. アプリケーションが読み込まれ、ユーザーインタフェースが表示されたら、左側の「ナビゲーション」パネルの「このコンピュータ」をダブルクリック (または、「このコンピュータ」の横にある展開・縮少アイコンをクリック) して、「このコンピュータ」の下位のツリーを展開します。

4. 左側の「ナビゲーション」パネルの「システム構成」をダブルクリック (または、「システム構成」の横にある展開・縮少アイコンをクリック) して、「システム構成」の下位のツリーを展開します。「ユーザー」アイコンが表示されます。

5. 「ユーザー」アイコンをクリックして、ユーザーツールを起動します。



注 - Solaris Management Console の使用方法の詳細は、smc (1m) マニュアルページを参照してください。




Solaris WBEM ロギングサービス

WBEM ロギングサービスを使用すると、システム管理者はシステムイベントを監視し、その発生状況を判定することができます。

ロギングサービスでは、サービスプロバイダから返されるようにプログラムされているアクションと、Solaris WBEM Services コンポーネントが実行するアクションをすべて記録します。また、情報とエラーメッセージもログに記録できます。

たとえば、ユーザーがシリアルポートを使用不可にしたときに、シリアルポートプロバイダによって自動的にこの情報をログに記録することができます。あるいは、システムエラーなどの障害が発生したときには、管理者はログを調べて、その障害の原因を突き止めることができます。

イベントに応じて、すべてのコンポーネント、アプリケーション、およびプロバイダが自動的にロギングを開始します。たとえば、CIM Object Manager はインストールされて起動されると、自動的にイベントを記録します。

WBEM 環境用に開発するアプリケーションとプロバイダでログを記録するよう設定することができます。詳細は、API を使用した Solaris WBEM ロギングの有効化を参照してください。

Solaris Management Console (SMC) ログビューアにログデータを表示して、設定したログ機能をデバッグすることができます。ログファイルの表示方法の詳細は、Solaris WBEM ログビューアと smc(1m) マニュアルページを参照してください。


Solaris WBEM Services のログファイル

イベントを記録するようにアプリケーションやプロバイダを設定すると、そのイベントはログファイルに記録されます。ログの記録はすべて /var/sadm/wbem/log のパスに格納されます。ログファイルでは、次の命名規則が使用されます。

wbem_log.#

ここで、# はログファイルのバージョンを示すために追加される数字です。

wbem_log.1 のように ".1" が付いているログファイルが最後に保存されたバージョンです。".2" が付いているログファイルはその前のバージョンで、このように順に番号が付いています。すべてのバージョンのログファイルは、/var/sadm/wbem/log にアーカイブとしてまとめて入れられています。

以下の 2 つの条件のいずれかが満たされたときに、ログファイルは .1 というファイル拡張子付きで名前変更され、保存されます。

ログファイルの使用方法を Solaris_LogServiceProperties クラスのプロパティーがどのように制御するかについては、Solaris WBEM Services のログファイル規則を参照してください。

Solaris_LogService クラスとそのメソッドについては、Solaris_LogService クラスを参照してください。

Solaris WBEM Services のログファイル規則

Solaris_LogServiceProperties クラスは Solaris_Core1.0.mof で定義されています。Solaris_LogServiceProperties クラスには、以下のログファイルの属性を制御するプロパティーがあります。

これらの属性のいずれかを、ログファイルにデータを書き込むアプリケーションで指定するには、Solaris_LogServiceProperties クラスの新しいインスタンスを作成し、その関連プロパティーの値を設定します。新しいインスタンスのプロパティー値の設定方法についての詳細は、Solaris WBEM ロギングプロパティーの設定を参照してください。

Solaris WBEM Services のログファイル形式

ロギングサービスには、アプリケーション、システム、およびセキュリティーという 3 つのログ記録のカテゴリがあります。ログ記録は、情報であることも、エラーや警告から生成された記録データであることもあります。ログに記入可能なデータについて、標準的なフィールド設定が定義されていますが、必ずしもログではすべてのフィールドを使用する必要はありません。たとえば、情報ログの場合は、イベントを表す簡潔なメッセージを記録することができます。エラーログの場合は、より詳細なメッセージを記録することができます。

一部のログデータフィールドでは、CIM Repository のデータを特定する必要があります。これらのフィールドは、Solaris_LogRecord クラスの読み取り専用キー修飾子でフラグが立てられているプロパティーです。これらのフィールドには値を設定することはできません。ただし、ログファイルの以下のフィールドであれば、いずれも値を設定できます。


Solaris WBEM ログクラス

Solaris WBEM ロギングサービスでは、Solaris_LogRecord と Solaris_LogService の 2 つの Solaris スキーマクラスを使用します。

Solaris_LogRecord クラス

Solaris_LogRecord クラスは、Solaris_Core1.0.mof ファイルで定義され、ログファイルのエントリをモデル化します。イベントに応じてアプリケーションやプロバイダにより Solaris_LogRecord クラスが呼び出されると、Solaris_LogRecord クラスでは、イベントによって生成されたすべてのデータをログファイルに書き込みます。Solaris プロバイダの一部として Solaris_LogRecord クラスの定義を見るには、テキストエディタに Solaris_Core1.0.mof ファイルを表示します。Solaris_Core1.0.mof ファイルは /usr/sadm/mof にあります。

Solaris_LogRecord クラスでは、プロパティーのベクトルとキー修飾子を使用して、イベント、システム、ユーザー、およびデータを生成するアプリケーションまたはプロバイダの属性を指定します。読み取り専用修飾子の値は、アプリケーションと CIM Repository との間で使用するために透過的に生成されます。たとえば、RecordID という値はログエントリを一意に特定しますが、生成されたデータを見るときには、ログ形式の一部としては表示されません。

書き込み可能な修飾子の値を設定できます。たとえば、イベントが発生したシステムを特定する、ClientMachineName や ServerMachineName といったプロパティーの修飾子の値を設定することができます。

SysLogFlag プロパティーを真に設定すると、ログ記録の詳細メッセージが自動的に UNIX システムの syslog デーモンに送信されます。

Solaris_LogService クラス

Solaris_LogService クラスは、ロギングサービスの操作を制御し、ログデータの処理方法を定義します。このクラスには、発行元アプリケーションから CIM Object Manager に特定のイベントに関するデータを配布するときにアプリケーションで使用できる 1 組のメソッドがあります。そのデータが CIM Object Manager からの応答を生成するトリガーとなり、CIM Repository からのデータの取得などが行われます。

Solaris_LogService クラスでは、以下のメソッドを使用します。

Solaris_LogServiceProperties クラスを使用すると、ロギングのプロパティーを設定できます。Solaris WBEM ロギングプロパティーの設定を参照してください。

Solaris_LogService クラスの定義は、/usr/sadm/mof にある Solaris_Core1.0.mof ファイルで見ることができます。


API を使用した Solaris WBEM ロギングの有効化

現在、ログファイルの内容はログビューアで見ることができます。しかし、カスタマイズされた方法でのログファイルの表示を望む場合は、独自のログビューアを開発することができます。ロギングアプリケーションプログラミングインタフェース (API) を使用すると、ログビューアを開発できます。この API では、以下のことを実行できます。

Solaris WBEM ログファイルへのデータの書き込み

アプリケーションでログファイルにデータを書き込めるようにするには、以下の主なタスクが必要です。


procedure icon  Solaris_LogRecord のインスタンスを作成してデータを書き込む

1. 必要な Java クラスをすべてインポートします。以下に挙げるクラスは最小限必要なクラスです。

import java.rmi.*; 
import com.sun.wbem.client.CIMClient; 
import com.sun.wbem.cim.CIMInstance; 
import com.sun.wbem.cim.CIMValue; 
import com.sun.wbem.cim.CIMProperty; 
import com.sun.wbem.cim.CIMNameSpace; 
import com.sun.wbem.cim.CIMObjectPath; 
import com.sun.wbem.cim.CIMClass; 
import com.sun.wbem.cim.CIMException; 
import com.sun.wbem.solarisprovider.*; 
import java.util.*; 

2. public クラス CreateLog を宣言し、CIMClient、CIMObjectPath、および CIMNameSpace クラスのインスタンスを作成します。

public class CreateLog {
		public static void main(String args[]) throws CIMException {
	if ( args.length != 3) {
		System.out.println("Usage: CreateLog host username password"); 
		System.exit(1);
}
CIMClient cc = null;
CIMObjectPath cop = null;
try {
		CIMNameSpace cns = new CIMNameSpace(args[0]);
		cc = new CIMClient(cns, args[1], args[2]);

3. 返されるプロパティーのベクトルを指定します。修飾子のプロパティーの値を設定します。

Vector keys = new Vector();    
CIMProperty logsvcKey;   
logsvcKey = new CIMProperty("category");   
logsvcKey.setValue(new CIMValue(new Integer(2)));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("severity");   
logsvcKey.setValue(new CIMValue(new Integer(2)));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("AppName");   
logsvcKey.setValue(new CIMValue("SomeApp"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("UserName");   
logsvcKey.setValue(new CIMValue("molly"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("ClientMachineName");   
logsvcKey.setValue(new CIMValue("dragonfly"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("ServerMachineName");   
logsvcKey.setValue(new CIMValue("spider"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("SummaryMessage");   
logsvcKey.setValue(new CIMValue("brief_description"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("DetailedMessage");   
logsvcKey.setValue(new CIMValue("detailed_description"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("data");   
logsvcKey.setValue(new CIMValue("0xfe 0x45 0xae 0xda"));   
keys.addElement(logsvcKey);   
logsvcKey = new CIMProperty("SyslogFlag");   
logsvcKey.setValue(new CIMValue(new Boolean(true)));   
keys.addElement(logsvcKey); 

4. ログ記録に対して、CIMObjectPath クラスの新しいインスタンスを宣言します。

CIMObjectPath logreccop = new CIMObjectPath("Solaris_LogRecord", keys);

5. Solaris_LogRecord の新しいインスタンスを宣言します。ファイルに書き込むプロパティーのベクトルを設定します。

CIMInstance ci = new CIMInstance();
	ci.setClassName("Solaris_LogRecord");
	ci.setProperties(keys);
	//System.out.println(ci.toString());
	cc.setInstance(logreccop,ci);
}
catch (Exception e) {
		System.out.println("Exception: "+e);
	e.printStackTrace();
}

6. データがログファイルに書き込まれたならば、セッションを閉じます。

// close session.
if(cc != null) {
	cc.close();
}

Solaris WBEM ログファイルからのデータの読み取り

アプリケーションでログファイルからログビューアにデータを読み取れるようにするには、以下のタスクが必要です。


procedure icon  Solaris_LogRecord クラスのインスタンスを取得してデータを読み取る

1. 必要な Java クラスをすべてインポートします。以下に挙げるクラスは最小限必要なクラスです。

import java.rmi.*;
import com.sun.wbem.client.CIMClient;
import com.sun.wbem.cim.CIMInstance;
import com.sun.wbem.cim.CIMValue;
import com.sun.wbem.cim.CIMProperty;
import com.sun.wbem.cim.CIMNameSpace;
import com.sun.wbem.cim.CIMObjectPath;
import com.sun.wbem.cim.CIMClass;
import com.sun.wbem.cim.CIMException;
import com.sun.wbem.solarisprovider.*;
import java.util.*;
import java.util.Enumeration;

2. クラス ReadLog を宣言します。

public class ReadLog 
	{
	public static void main(String args[]) throws 
	CIMException 
	{
	if ( args.length != 3) 
{
	System.out.println("Usage: ReadLog host username password"); 
	System.exit(1);
}

3. ReadLog クラスの CIMClient、CIMObjectPath、および CIMNameSpace の値を設定します。

CIMClient cc = null; 
CIMObjectPath cop = null; 
try { CIMNameSpace cns = new CIMNameSpace(args[0]); 
cc = new CIMClient(cns, args[1], args[2]); 
cop = new CIMObjectPath("Solaris_LogRecord"); 

4. Solaris_LogRecord のインスタンスを列挙します。

Enumeration e = cc.enumInstances(cop, true);
	for (; e.hasMoreElements(); ) {

5. 出力デバイスにプロパティー値を送信します。

System.out.println("---------------------------------");
CIMObjectPath op = (CIMObjectPath)e.nextElement();
CIMInstance ci = cc.getInstance(op);
System.out.println("Record ID : " + 
	(((Long)ci.getProperty("RecordID").getValue().getValue()).longValue()));
System.out.println("Log filename : " + ((String)ci.getProperty("FileName").getValue().getValue())); 
int categ = 0 (((Integer)ci.getProperty("category").getValue().getValue()).intValue());
if (categ == 0) 
	System.out.println("Category : Application Log");
else if (categ == 1)
	System.out.println("Category : Security Log");
else if (categ == 2)
	System.out.println("Category : System Log");
int severity = (((Integer)ci.getProperty("severity").getValue().getValue()).intValue());
if (severity == 0)
	System.out.println("Severity : Informational");
else if (severity == 1)
	System.out.println("Severity : Warning Log!");
else if (severity == 2)
	System.out.println("Severity : Error!!");
System.out.println("Log Record written by :" + ((String)ci.getProperty("AppName").getValue().getValue()));
System.out.println("User : " + ((String)ci.getProperty("UserName").getValue().getValue()));
System.out.println("Client Machine : " + ((String)ci.getProperty("ClientMachineName").getValue().getValue()));
System.out.println("Server Machine : " + ((String)ci.getProperty("ServerMachineName").getValue().getValue()));
System.out.println("Summary Message : " + ((String)ci.getProperty("SummaryMessage").getValue().getValue()));
System.out.println("Detailed Message : " + ((String)ci.getProperty("DetailedMessage").getValue().getValue()));
System.out.println("Additional data : " + ((String)ci.getProperty("data").getValue().getValue()));
boolean syslogflag =((Boolean)ci.getProperty("syslogflag").getValue().getValue()). booleanValue();
if (syslogflag == true) {
	System.out.println("Record was written to syslog as well");
} else {
	System.out.println("Record was not written to syslog");
}
System.out.println("---------------------------------");

6. エラー条件が発生した場合は、ユーザーにエラーメッセージを返します。

...
catch (Exception e) {
	System.out.println("Exception: "+e);
e.printStackTrace(); }
...

7. データがファイルから読み取られたならば、セッションを閉じます。

// close session.
	if(cc != null) {
cc.close();
		}
	}
}

Solaris WBEM ロギングプロパティーの設定

Solaris_LogServiceProperties クラスのインスタンスを作成して、そのインスタンスのプロパティー値を設定すると、アプリケーションやプロバイダがログを処理する方法を制御できます。


procedure icon  Solaris WBEM ロギングプロパティーを設定する

以下のコード例では、ロギングプロパティーの設定方法を示します。プロパティーは、/var/sadm/lib/wbem/WbemServices.properties ファイルに格納されます。

public class SetProps {
	public static void main(String args[]) throws CIMException {
if ( args.length != 3) {
	System.out.println("Usage: SetProps host username password"); 
	System.exit(1);
}
CIMClient cc = null;
try {
	CIMNameSpace cns = new CIMNameSpace(args[0]);
	cc = new CIMClient(cns, args[1], args[2]);
	CIMObjectPath logpropcop = new CIMObjectPath("Solaris_LogServiceProperties");
	Enumeration e = cc.enumInstances(logpropcop, true);
	for (; e.hasMoreElements(); ) {
		CIMObjectPath op = (CIMObjectPath)e.nextElement();
		CIMInstance ci = cc.getInstance(op);
		ci.setProperty("Directory", new CIMValue("/tmp/bar1/"));
		ci.setProperty("FileSize", new CIMValue("10"));
		ci.setProperty("NumFiles", new CIMValue("2"));
		ci.setProperty("SyslogSwitch", new CIMValue("off"));
		cc.setInstance(logpropcop,ci);
	}
}
catch (Exception e) {
	System.out.println("Exception: "+e);
	e.printStackTrace();
}
// close session.
if(cc != null) {
	cc.close();
	}
}


Solaris WBEM ログビューア

Solaris Management Console (SMC) ログビューアは、記録されたデータ表示用のグラフィカルユーザーインタフェースを提供するアプリケーションであり、このログビューアにログ記録の詳細をすべて表示することができます。SMC についての詳細は、マニュアルページ smc(1M) を参照してください。

ログ記録を作成した後、SMC を起動してから SMC ログビューアを起動します。


procedure icon  SMC と Solaris ログビューアを起動する

1. 以下のコマンドを入力して、SMC 起動コマンドの場所に移動します。

# cd /usr/sbin

2. 以下のコマンドを入力して SMC を起動します。

# smc

3. 「ナビゲーション」パネルの「このコンピュータ」をダブルクリック (または、「このコンピュータ」の横にある展開・縮少アイコンをクリック) して、「このコンピュータ」の下位のツリーを展開します。「システムステータス」をダブルクリックすると、「ログビューア」アイコンが表示されます。

4. 「ログビューア」アイコンをクリックして、ログビューアを起動します。