この機能は、Solaris 7 - 8/99 ソフトウェアリリースで更新されました。
Solaris 7 ソフトウェアリリースの更新には、coreadm コマンドを含む、強化されたコアファイル生成機能が含まれます。この情報は、『Solaris のシステム管理 (第 2 巻)』の「ソフトウェアの問題解決の概要」に記載されている、ソフトウェアの問題解決に関する情報の補足です。
このリリースで導入される coreadm コマンドでは、ユーザーによるコアファイルの命名規則の設定により、柔軟なコアファイル管理が提供されます。たとえば、coreadm コマンドでは、すべてのプロセスコアファイルを 1 つのシステムディレクトリに置くようにシステムを構成できます。したがって、Solaris のプロセスやデーモンが異常終了した場合には、特定のディレクトリのコアファイルを調べればよいため問題の追跡が容易になります。
これまでの Solaris プロセスコアダンプ機能には、次のような制約がありました。
プロセスコアファイルは、プロセスの現在の作業ディレクトリに生成されます。したがって、Solaris のすべてのデーモンは、一般に初期化の過程で chdir を使ってルート (/) ディレクトリに移るため、相互のコアファイルが上書きされます。
statd など多くのシステムデーモンが setuid 操作を行いますが、セキュリティ上の理由により、問題が発生した場合にコアファイルを生成しません。
次の 2 つの構成可能な新しいコアファイルパスは、個別に有効または無効にできます。
プロセス別コアファイルパス
プロセス別コアファイルパスが有効な場合には、プロセスが異常終了するとコアファイルが生成されます。プロセス別コアファイルパスはプロセス自身の子プロセスに継承されます。このパスはデフォルトで有効になっており、パスには core が指定されています。
生成されたプロセス別コアファイルは、そのプロセスの所有者に、所有されます。このファイルを読み込むことができるのは、プロセスの所有者とスーパーユーザーだけです。
グローバルコアファイルパス
グローバルコアファイルパスが有効な場合には、追加のコアファイルが、指定したグローバルコアファイルパスのディレクトリにプロセス別コアファイルと同じ内容で、作成されます。このパスはデフォルトでは無効になっています。
生成されたグローバルコアファイルは、読み取り/書き込み可能ファイルとしてスーパーユーザーに所有されます。非特権ユーザーがこのファイルを表示することはできません。
プロセスが異常終了すると、これまでの Solaris リリースと同じように、このプロセスは現在のディレクトリにコアファイルを生成します。しかし、グローバルコアファイルパスが有効で、たとえば、/corefiles/core に設定されていると、異常終了した各プロセスは、2 つのコアファイルを生成します。1 つは現在の作業ディレクトリに、もう 1 つは /corefiles ディレクトリに生成します。
デフォルトでは、以下のようにこれまでの Solaris のコアファイル生成機能と変わらないように設定してあります。
setuid プロセスが、グローバルパスやプロセス別パスを使ってコアファイルを生成しない。
グローバルコアファイルパスが無効に設定されている。
プロセス別コアファイルパスが有効に設定されている。
プロセス別コアファイルパスが core に設定されている。
グローバルコアファイルディレクトリが有効な場合、コアファイルは次の表に示す変数を使用してそれぞれ区別されます。
変数名 |
変数の定義 |
---|---|
%p |
プロセス ID |
%u |
実効ユーザー ID |
%g |
実効グループ ID |
%f |
実効可能ファイル名 |
%n |
システムノード名。uname -n 出力と同じ |
%m |
マシン名。uname -m 出力と同じ |
%t |
time(2) システムコールの 10 進数値 |
%% |
リテラル % |
たとえば、グローバルコアファイルパスが次のように設定されているとします。
/var/core/core.%f.%p |
このとき、PID 12345 の sendmail プロセスが異常終了すると、次のコアファイルが生成されます。
/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 ファイルに上記のコマンドを指定すると、ユーザーのログインセッションで実行されるすべてのプロセスのコアファイル名パターンを設定できます。
coreadm コマンドを使用して、setuid プログラムがコアファイルを生成するかどうかを設定します。またこの設定は、すべてのシステムプロセスに適用するか、プロセス別に適用するかも選択できます。
グローバル setuid オプションを有効にすると、グローバルコアファイルパスでは、システムのすべての setuid プログラムがコアファイルを生成します。
プロセス別 setuid オプションを有効にすると、プロセス別コアファイルパスでは、特定の 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 |
現在のプロセスのコアファイル設定値を照会するには、次の coreadm コマンドを使用します。$$ 記号は、動作しているシェルのプロセス ID を表す可変部分です。
$ coreadm $$ 278: core.%f.%p |
スーパーユーザーは、coreadm process ID を使用して、任意のユーザーのコアファイル設定値を照会できます。通常ユーザーは、自身のプロセスのコアファイル設定値しか照会できません。
スーパーユーザーになります。
プロセス別コアファイルパスを有効にします。
# coreadm -e process |
現在のプロセスコアファイルパスを表示して、構成を確認します。
$ coreadm $$ 1180: /home/kryten/corefiles/%f.%p |
スーパーユーザーになります。
グローバルコアファイルパスを有効にします。
# coreadm -e global -g /var/core/core.%f.%p |
現在のプロセスコアファイルパスを表示して、構成を確認します。
# 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 コアファイルパスを有効にします。