Solaris 7 のシステム管理 (追補)

コアファイル管理の強化 (coreadm)

この機能は、Solaris 7 - 8/99 ソフトウェアリリースで更新されました。

Solaris 7 ソフトウェアリリースの更新には、coreadm コマンドを含む、強化されたコアファイル生成機能が含まれます。この情報は、『Solaris のシステム管理 (第 2 巻)』の「ソフトウェアの問題解決の概要」に記載されている、ソフトウェアの問題解決に関する情報の補足です。

このリリースで導入される coreadm コマンドでは、ユーザーによるコアファイルの命名規則の設定により、柔軟なコアファイル管理が提供されます。たとえば、coreadm コマンドでは、すべてのプロセスコアファイルを 1 つのシステムディレクトリに置くようにシステムを構成できます。したがって、Solaris のプロセスやデーモンが異常終了した場合には、特定のディレクトリのコアファイルを調べればよいため問題の追跡が容易になります。

これまでの Solaris プロセスコアダンプ機能には、次のような制約がありました。

構成可能なコアファイルパス

次の 2 つの構成可能な新しいコアファイルパスは、個別に有効または無効にできます。

プロセスが異常終了すると、これまでの Solaris リリースと同じように、このプロセスは現在のディレクトリにコアファイルを生成します。しかし、グローバルコアファイルパスが有効で、たとえば、/corefiles/core に設定されていると、異常終了した各プロセスは、2 つのコアファイルを生成します。1 つは現在の作業ディレクトリに、もう 1 つは /corefiles ディレクトリに生成します。

デフォルトでは、以下のようにこれまでの Solaris のコアファイル生成機能と変わらないように設定してあります。

コアファイル名の拡張

グローバルコアファイルディレクトリが有効な場合、コアファイルは次の表に示す変数を使用してそれぞれ区別されます。

変数名 

変数の定義 

%p

プロセス ID 

%u

実効ユーザー ID 

%g

実効グループ ID 

%f

実効可能ファイル名 

%n

システムノード名。uname -n 出力と同じ

%m

マシン名。uname -m 出力と同じ

%t

time(2) システムコールの 10 進数値 

%%

リテラル % 

たとえば、グローバルコアファイルパスが次のように設定されているとします。


/var/core/core.%f.%p

このとき、PID 12345sendmail プロセスが異常終了すると、次のコアファイルが生成されます。


/var/core/core.sendmail.12345

コアファイル名パターンの設定

コアファイル名パターンを、グローバルにでも、プロセス別にでも設定できます。さらに、システムをリブートしてもこれらの設定値が保存されるようにするかどうかを指定することもできます。

たとえば、次の coreadm コマンドでは、init プロセスによって起動されるすべてのプロセスのグローバルコアファイルパターンを設定します。このパターンは、システムをリブートしても有効です。


$ coreadm -i /var/core/core.%f.%p

設定したグローバルコアの値は /etc/coreadm.conf ファイルに格納されます。つまり、これらの設定値はシステムをリブートしても保存されます。

次の coreadm コマンドでは、すべてのプロセスのプロセス別コアファイル名パターンを設定します。


$ coreadm -p /var/core/core.%f.%p $$

$$ 記号は、動作しているシェルのプロセス ID を表す可変部分です。プロセス別コアファイル名パターンは、そのプロセス自身のすべての子プロセスに継承されます。

グローバルまたはプロセス別コアファイル名パターンが設定されると、coreadm -e コマンドで有効にしなければなりません。詳細は、次の手順を参照してくだ さい。

ユーザーの $HOME/.profile または $HOME/.login ファイルに上記のコマンドを指定すると、ユーザーのログインセッションで実行されるすべてのプロセスのコアファイル名パターンを設定できます。

setuid プログラムがコアファイルを生成するように設定する

coreadm コマンドを使用して、setuid プログラムがコアファイルを生成するかどうかを設定します。またこの設定は、すべてのシステムプロセスに適用するか、プロセス別に適用するかも選択できます。

デフォルトでは、両方のフラグが無効となっています。セキュリティ上の理由により、グローバルコアファイルパスは、/ で始まる完全パス名でなければなりません。スーパーユーザーがプロセス別コアファイルを無効にすると、各ユーザーはコアファイルを取得できなくなります。

setuid コアファイルは、スーパーユーザー専用の読み取り/書き込みアクセス権をもつスーパーユーザーによって所有されます。setuid コアファイルを生成したプロセスが通常ユーザーに所有されていた場合でも、通常ユーザーがこのファイルにアクセスすることはできません。

詳細は、coreadm(1M) のマニュアルページを参照してください。

現在のコアダンプ構成を表示するには

現在のコアダンプ構成を表示するには、coreadm コマンドをオプションなしで使用します。


$ coreadm
               global core file pattern: /var/core/core.%f.%p
                 init core file pattern: core
                      global core dumps: enabled
                 per-process core dumps: enabled
                global setid core dumps: enabled
           per-process setid core dumps: disabled
               global core dump logging: disabled

コアファイル名パターンを設定するには

  1. プロセス別コアファイルを設定するのか、グローバルコアファイルを設定するのかを決めます。次の a、b のどちらかを選択します。

    1. プロセス別コアファイル名パターンを設定します。


      # coreadm -p $HOME/corefiles/%f.%p $$
      
    2. グローバルコアファイル名パターンを設定します。

      スーパーユーザーになります。


      # coreadm -g /var/core/core.%f.%p
      

コアファイル名パターンを表示するには

現在のプロセスのコアファイル設定値を照会するには、次の coreadm コマンドを使用します。$$ 記号は、動作しているシェルのプロセス ID を表す可変部分です。


$ coreadm $$
278:    core.%f.%p

スーパーユーザーは、coreadm process ID を使用して、任意のユーザーのコアファイル設定値を照会できます。通常ユーザーは、自身のプロセスのコアファイル設定値しか照会できません。

プロセス別コアファイルパスを有効にするには

  1. スーパーユーザーになります。

  2. プロセス別コアファイルパスを有効にします。


    # coreadm -e process
    
  3. 現在のプロセスコアファイルパスを表示して、構成を確認します。


    $ coreadm $$
    1180:   /home/kryten/corefiles/%f.%p

グローバルコアファイルパスを有効にするには

  1. スーパーユーザーになります。

  2. グローバルコアファイルパスを有効にします。


    # coreadm -e global -g /var/core/core.%f.%p
    

  3. 現在のプロセスコアファイルパスを表示して、構成を確認します。


    # coreadm
         global core file pattern: /var/core/core.%f.%p
           init core file pattern: core
                global core dumps: enabled
           per-process core dumps: enabled
          global setid core dumps: disabled
     per-process setid core dumps: disabled
         global core dump logging: disabled

コアファイルで発生する問題の解決

エラーメッセージ

NOTICE: 'set allow_setid_core = 1' in /etc/system is obsolete
NOTICE: Use the coreadm command instead of 'allow_setid_core'
原因:

setuid コアファイルを指定する古いパラメータが /etc/system ファイルにあります。

解決方法:

/etc/system ファイルから allow_setid_core=1 を削除します。次に、coreadm コマンドでグローバル setuid コアファイルパスを有効にします。