# Compaq OpenVMS
V7.3 新機能説明書

前へ | 次へ | 目次 | 索引

## 5.11.6 プロセス・ダンプ: セキュリティとディスククォータに関するガイドライン

プロセス・ダンプには，完全なダンプと部分的なダンプがあります。 完全なプロセス・ダンプには，すべてのプロセス空間と，システム空間内のすべてのプロセス関連データが含まれます。 部分的なプロセス・ダンプ には，プロセス空間内でユーザが読み込むことができるデータと，システム空間内で機密情報でないと考えられるデータ構造だけが含まれます。サード・パーティ・ソフトウェアの暗号キーなど，特権の必要なデータや保護されているデータは機密情報であると考えられます。

一般に，非特権ユーザは完全なプロセス・ダンプを読み込むことができないようにしなければなりません。デフォルトではこのような設定になっています。しかし，場合によっては，非特権ユーザが完全なプロセス・ダンプを読み込むことができるようにしなければならないことがあります。また，ユーザが完全なプロセス・ダンプを読み込むことができないように禁止すると同時に，ユーザが完全なプロセス・ダンプを作成できるようにしなければならないこともあります。

デフォルト設定では，プロセス・ダンプはユーザの現在のデフォルト・ディレクトリに書き込まれます。ユーザは論理名 SYS$PROCDMP を定義することで，別のディレクトリ・パスを指定して，この設定を変更できます。プロセス・ダンプ・ファイルの名前は常に，プロセス・ダンプが書き込まれたときのメイン・イメージの名前と同じであり，ファイル拡張子は .DMP です。

### 5.11.6.1 特殊なライト識別子

新しいライト識別子 IMGDMP$READALL を使用すると，非特権ユーザは完全なプロセス・ダンプを読み込むことができるようになります。新しいライト識別子 IMGDMP$PROTECT を使用すると，プロセス・ダンプを作成したユーザが完全なプロセス・ダンプを読み込むことを禁止できます。このライト識別子は，OpenVMS バージョン 7.3 のインストール時に SYS$SYSTEM:IMGDMP_RIGHTS.EXE によって作成されます。また，システム・スタートアップ時にも自動的に実行され，これらのライト識別子が正しい値および属性に設定されるようになっています。

これらのライト識別子が削除された場合， SYS$SYSTEM:IMGDMP_RIGHTS.EXE を実行して再作成できます。次の例を参照してください。

        $ RUN SYS$SYSTEM:IMGDMP_RIGHTS
        %PROCDUMP-I-CREATED, rights identifier IMGDMP$READALL successfully created
        %PROCDUMP-I-CREATED, rights identifier IMGDMP$PROTECT successfully created

IMGDMP$READALL には属性がありませんが，IMGDMP$PROTECT は RESOURCE 属性を付けて作成されます。

### 5.11.6.2 特権ユーザとプロセス・ダンプ

ここで使用する特権ユーザという用語は，次のいずれかの条件を満たすユーザのことです。

- CMKRNL，CMEXEC，SYSPRV，READALL，BYPASS のうち，1 つ以上の特権を保有しているユーザ。

- システム UIC グループのメンバであるユーザ (デフォルトの [10,n] またはそれ以下)。このようなユーザは， SYSPRV 特権を保有しているものとして取り扱われます。

CMKRNL または CMEXEC 特権の保有者は，完全なプロセス・ダンプを書き込むことができます。他の特権の保有者は，書き込まれたプロセス・ダンプを読み込むことができます。

### 5.11.6.3 非特権ユーザとプロセス・ダンプ

非特権ユーザが完全なプロセス・ダンプの書き込みや読み込みを実行できるようにするには，ライト識別子 IMGDMP$READALL をユーザに与えます。IMGDMP$READALL ライト識別子が存在しない場合は，イメージ SYS$SYSTEM:IMGDMP_RIGHTS.EXE を実行して作成します ( 第 5.11.6.1 項 を参照)。その後， AUTHORIZE を使用してライト識別子をユーザに与えます。次の例を参照してください。

        $ DEFINE /USER SYSUAF SYS$SYSTEM:SYSUAF.DAT  !if necessary
        $ RUN SYS$SYSTEM:AUTHORIZE
        UAF> GRANT /IDENTIFIER IMGDMP$READALL <user>
        UAF> EXIT

ユーザがライト識別子を受け取るには，いったんログアウトして，再びログインしなければなりません。ライト識別子 IMGDMP$READALL が与えられた非特権ユーザは，無制限に完全なプロセス・ダンプの読み込みと書き込みを実行できます。

### 5.11.6.4 プロセス・ダンプの保護

非特権ユーザが完全なプロセス・ダンプを書き込むことを許可し，同時に，書き込んだばかりのプロセス・ダンプを読み込むことを禁止することができます。その場合は，次の手順を実行します。

1. IMGDMP$PROTECT ライト識別子が存在しない場合は，イメージ SYS$SYSTEM:IMGDMP_RIGHTS.EXE を実行して作成します ( 第 5.11.6.1 項 を参照)。

2. ライト識別子 IMGDMP$PROTECT を使用して，保護されたディレクトリを作成します。次の例を参照してください。

       $ CREATE /DIRECTORY DKA300:[PROCDUMPS] -
          /PROTECTION=(S:RWE,O:RWE,G,W) /OWNER_UIC=IMGDMP$PROTECT
       $ SET SECURITY DKA300:[000000]PROCDUMPS.DIR -
          /ACL=((DEFAULT_PROTECTION,SYSTEM:RWED,OWNER:RWED,GROUP:,WORLD:), -
        (IDENTIFIER=IMGDMP$PROTECT,ACCESS=READ+WRITE), -
        (IDENTIFIER=IMGDMP$PROTECT,OPTIONS=DEFAULT, -
         ACCESS=READ+WRITE+EXECUTE+DELETE+CONTROL), -
        (CREATOR,ACCESS=NONE))

3. 保護されたディレクトリを指すように，保護された論理名 SYS$PROTECTED_PROCDMP を定義します。次の例を参照してください。

       $ DEFINE /SYSTEM /EXECUTIVE_MODE SYS$PROTECTED_PROCDMP DKA300:[PROCDUMPS]

   保護されたディレクトリを含むディスクで DISKQUOTA を使用する場合は，プロセス・ダンプに対して使用される最大ディスク容量を指定します。次の例を参照してください。

       $ RUN SYS$SYSTEM:SYSMAN
       SYSMAN> DISKQUOTA CREATE /DEVICE=DKA300  ! if necessary
       SYSMAN> DISKQUOTA ENABLE /DEVICE=DKA300  ! if necessary
       SYSMAN> DISKQUOTA ADD IMGDMP$PROTECT /DEVICE=DKA300 /PERMQUOTA=10000
       SYSMAN> DISKQUOTA REBUILD /DEVICE=DKA300 ! if necessary
       SYSMAN> EXIT

警告 IMGDMP$PROTECT はどのユーザにも与えないようにしてください。このライト識別子は，プロセス・ダンプを書き込んでいるときに，エグゼクティブ・モードから SYS$SHARE:IMGDMP.EXE によって必要に応じて与えられたり，撤回されたりします。このライト識別子をユーザに永久に与えると，そのユーザは保護されたディレクトリに書き込まれたすべてのプロセス・ダンプにアクセスできるようになります。

どのユーザがプロセス・ダンプの読み込みと書き込みを実行できるかを，さらに細かく制御するために，保護されたディレクトリに追加 ACL を設定することもできます。

高い特権でイメージがインストールされた場合や，保護されたサブシステムにイメージが属しているときに，プロセス・ダンプを実行するには，ユーザは CMKRNL 特権を保有し，特権ユーザとして定義されていなければなりません ( 第 5.11.6.2 項 を参照)。

# 5.12 RMS ロック機能の強化

ここでは，本リリースで提供された新しい Record Management Services (RMS) の機能強化について説明します。

## 5.12.1 RMS ロックのパフォーマンスの向上 (Alpha)

ここでは，OpenVMS Alpha バージョン 7.2-1H1 および OpenVMS バージョン 7.3 で導入された RMS ロックのパフォーマンス向上機能について説明します。

### 5.12.1.1 RMS グローバル・バッファ読み込みモード・ロック

RMS 実行時処理環境では，グローバル・バッファを使用することで，共用ファイルに対する I/O 操作の回数をできるだけ少なくすることができます。このリリースでは，グローバル・バッファへの共用アクセスのロックをできるだけ少なくする読み込みモード・バケット・ロックが導入されました。この新しい機能を使用すると，次のことが可能です。

- グローバル・バッファに対して同時に読み込みアクセスを実行できます。読み込みアクセスのために排他的ロックを取得する必要がなくなったため，アクセスはシリアル化されません。

- 読み込みモード・ロックは，システム・ロックとしてキャッシュに格納されます。このロックはアクセス間で保持され，ロックが排他的書き込み要求をブロックする場合にだけヌルに低下されます。この機能を使用すると，ローカル・ロック要求とリモート・ロック要求の両方のトラフィックを大幅に削減でき ($ENQ および $DEQ システム・サービス呼び出しの回数)，関連する IPL-8 スピンロック・アクティビティおよびクラスタの System Communications Services (SCS) メッセージの数も削減できます。

- システム上で管理されるロック・リソースの名前や，アクティブ・システムまたはプロセス・ロックの数が増大しません。

- Alpha コンピュータと VAX コンピュータが混在する複合バージョン・クラスタで互換性を維持できます。

この新しい機能は，順編成，相対編成，索引付き編成の 3 種類のすべてのファイル構造の読み込み操作 ($GET および $FIND サービスを使用) に適用されます。また，最初は書き込みのためにインデックス・ツリーを介してインデックス・バケットに対して使用される読み込みアクセスのための書き込み操作 ($PUT サービスを使用) にも適用されます。

読み込み専用グローバル・バケット・ロックをインプリメントするために，既存のアプリケーションを変更する必要はありません。しかし，この拡張機能を利用できるように，データ・ファイルでグローバル・バッファを設定しなければなりません。次の DCL コマンドを使用します。ただし， n はバッファの数です。

    $ SET FILE/GLOBAL_BUFFER=n <filename>

バッファの数の指定方法については，『Compaq OpenVMS DCL ディクショナリ』を参照してください。グローバル・バッファの使い方の一般的な説明については，『Guide to OpenVMS File Applications』の「Using Global Buffers for Shared Files」という項を参照してください。

特定のバケットが競合される可能性の高い複合クラスタ環境では，読み込みモード・グローバル・バケット・ロックを使用する Alpha ノードが書き込み共用ファイルへのアクセスを占有して，他のノードからのタイムリーなアクセスを妨害する可能性があります。

SET RMS_DEFAULT コマンドに追加された新しい /CONTENTION_POLICY=keyword 修飾子を使用すると，高い競合が発生する環境で，プロセス・レベルまたはシステム・レベルでロックの公平さのレベルを指定できます。

/CONTENTION_POLICY=keyword 修飾子の使用の詳細については，『Compaq OpenVMS DCL ディクショナリ』の「SET RMS_DEFAULT」の項を参照してください。

### 5.12.1.2 クエリ・レコード・ロックなしオプション

このリリースでは，共用ファイルへの読み込みアクセスに対してレコード・ロックを最小化できる新しい機能が導入されたため， Lock Manager に対するレコード・ロック呼び出しに関連する処理は行われなくなりました。

以前のリリースでは，書き込み共用を許可してファイルがオープンされると，すべてのレコード操作 (読み込みと書き込みの両方) に対して排他的レコード・ロックが実行されていました。アプリケーションは RAB$L_ROP フィールドに対して特定のオプションを指定することで，排他的ロック (デフォルト) ではなく，レコード・ロック・モードを取得できます。しかし，どのオプションにも何らかのレベルのレコード・ロックが含まれます。つまり，どのオプションでも，Lock Manager に対する $ENQ または $DEQ システム・サービス呼び出しが必要です。

ユーザ・レコード・ロック・オプションには， RAB$V_NLK (ロックなし) クエリ・ロック・オプションが含まれています。このオプションは，RMS に対して状態の確認にはロックを適用し，同期化のためにロックを保有しないように要求します。ロックが許可されず (排他的ロックが保有されているため)， read-regardless (RAB$V_RRL) オプションがセットされていない場合，レコードへのアクセスは失敗し，RMS$_RLK 状態が返されます。それ以外の場合は，次のいずれかの状態でレコードが返されます。

- RMS$_SUC --- 他に書き込みは要求されていません。

- RMS$_OK_RLK --- レコードの読み込みは可能ですが，書き込みはできません。

- RMS$_OK_RRL --- 排他的ロックが保有されていますが (ロック要求は拒否)，read-regardless (RAB$V_RRL) オプションがセットされています。

RAB$V_NLK オプションだけが指定された場合，レコードへのアクセスは拒否される可能性があります。 RAB$V_NLK オプションと RAB$V_RRL オプションの両方を指定すると，アプリケーションは正常終了または代替正常終了状態でレコードを確実に返すことができます。

このリリースでは， クエリ・レコード・ロックなしオプション が導入されました。このオプションを使用すると，アプリケーションはレコード・ロックを考慮せずに，レコードを読み込むことができます ($GET または $FIND サービスを使用)。このオプションを指定した場合の動作は次のようになります。

- Lock Manager は呼び出されません。

- RAB$V_NLK と RAB$V_RRL の両方を設定した場合と同じですが， RMS$_OK_RLK または RMS$_OK_RRL 状態は返されません。

この機能はバケット・ロックから独立しています。ローカル・バッファとグローバル・バッファの両方に適用され， 3 つのすべてのファイル構造 (順編成，相対編成，索引付き編成) に適用されます。

クエリ・レコード・ロックなしオプションを指定するために，別の方法を使用することもできます。 表 5-2 を参照してください。

次のことに注意してください。

- 最初の方法では，オプションは外部から有効に設定でき，アプリケーションを変更する必要がありません。

- アプリケーションにとって適切な方法を選択してください。特に，既存のアプリケーションで代替正常終了状態 RMS$_OK_RLK または RMS$_OK_RRL に依存しているかどうかをチェックする必要があります。

表 5-2 クエリ・レコード・ロックなしを指定するために使用できる方法
目的 | 使用する方法
--- | ---
プロセス・レベルまたはシステム・レベルでクエリ・レコード・ロックを禁止する。 | 次の DCL コマンドを入力して，RAB$L_ROP フィールドに RAB$V_NLK オプションと RAB$V_RRL オプションの両方が設定された読み込み操作に対して，RMS がクエリ・レコード・ロックなし機能を使用するように要求する。
    $ SET RMS_DEFAULT/QUERY_LOCK=DISABLE[/SYSTEM]
既存のアプリケーションで RAB$V_NLK および RAB$V_RRL オプション上のキー。
レコード単位の読み込み操作でクエリ・レコード・ロックなしを有効にする。 | RAB$W_ROP_2 フィールドで RAB$V_NQL オプションを設定する。 RAB$V_NQL オプションは他のどのレコード・ロック・オプションより優先する。現在の読み込み ($GET または $FIND) 操作の後に， $UPDATE または $DELETE 呼び出しが実行されない場合にだけ使用する。
ファイル・レベルでクエリ・レコード・ロックなしを有効にする。 | FAB$B_SHR フィールドに FAB$V_NQL オプションを設定することで， RAB$L_ROP フィールドに RAB$V_NLK オプションと RAB$V_RRL オプションの両方を設定してファイルがレコード読み込み操作のためにオープンされている間，RMS がクエリ・ロックを使用しないように要求する。 このオプションは，使用できる他の FAB$B_SHR 共用オプションと任意の組み合わせで使用できる。アプリケーションで RAB$V_NLK および RAB$V_RRL オプションを入力する。

クエリ・レコード・ロックなしオプションに対する RMS での優先順位は次のとおりです。

- RAB$W_ROP_2 フィールドに設定された RAB$V_NQL オプション

- ファイル・オープン時に設定された次のオプション (および RAB$V_NLK と RAB$V_RRL が読み込み操作に対して設定されている場合):

  - FAB$B_SHR フィールドに設定された FAB$V_NQL オプション。

  - プロセス・レベルでの SET RMS_DEFAULT/QUERY_LOCK=DISABLE の設定。

  - システム・レベルでの SET RMS_DEFAULT/QUERY_LOCK=DISABLE の設定。プロセスの /QUERY_LOCK 設定が SYSTEM_DEFAULT の設定 (プロセスの作成時のデフォルト設定) と等しい場合，RMS はシステムで指定された値を使用します。

詳細については，『OpenVMS Record Management Services Reference Manual』を参照してください。

## 5.12.2 デッドロックの検出を制御するためのレコード・ロック・オプション

RMS では，レコード・ロックのために分散ロック・マネージャ ($ENQ システム・サービス) を使用します。

誤ったデッドロックの防止に役立つように，分散ロック・マネージャではロック要求に対して次のフラグを使用しています。

Flag1 | 目的
--- | ---
LCK$M_NODLCKWT | このフラグがセットされている場合，ロック管理サービスはデッドロック条件の検出時にこのロックを考慮しない。
LCK$M_NODLCKBLK | このフラグがセットされている場合，ロック管理サービスはデッドロック条件の検出時に，このロックを他のロックのブロックとして考慮しない。

1 これらのフラグを誤って使用すると，ロック管理サービスは真のデッドロックを無視する可能性があります。フラグ情報の詳細については，『OpenVMS System Services Reference Manual: A--GETUAI』の $ENQ の項を参照してください。

以前のリリースでは，RMS はレコード・ロック要求でこれらのフラグをセットしていませんでした。

本リリースでは，新しい RAB$W_ROP_2 フィールドに対応するオプション RAB$V_NODLCKWT と RAB$V_NODLCKBLK をセットすることで，RMS がレコード・ロック要求でこれらのフラグをセットするように任意に要求することができます。これらのオプションの使い方の詳細については，『OpenVMS System Services Reference Manual: A--GETUAI』の「$ENQ」の項のフラグの情報を参照してください。

前へ | 次へ | 目次 | 索引