Novell(クラウドコンピューティングのセキュリティ・仮想化ソリューションを実現)

 

アプリケーションコアダンプの取得

This document (3054866) is provided subject to the disclaimer at the end of this document.

環境

すべてのNovell Linux製品

問題の状況

トラブルシューティングのために、プロセスのコアダンプをキャプチャする必要があります。

解決策

コアダンプのキャプチャを準備するには、次の手順を実行する必要があります。

  • コアダンプファイルの最大サイズの制限を無効にします。
  • コアダンプの保存用に固定の場所を設定します。
  • AppArmorを無効にします。
  • setuidおよびsetgidプロセスに対してコアダンプを有効にします。

以下はこれを行うためのクイックステップガイドです

  1. 次を実行します

    ulimit -c unlimited

  2. 次を実行します

    install -m 1777 -d /var/local/dumps

  3. 次を実行します

    echo "/var/local/dumps/core.%e.%p" > /proc/sys/kernel/core_pattern

  4. 次を実行します

    rcapparmor stop

  5. 次を実行します

    sysctl -w kernel.suid_dumpable=2

  6. 問題のあるプロセスを起動(再起動)します。

これらのステップについては下記で詳しく説明します。

追加情報

用語

Unixシステムでは、「コアダンプ」という用語は通常、個別プロセスの状態のダンプを指します。「コアダンプ」という用語はまた、NetWareのコンテキストでも使用されますが、このコンテキストではシステム全体の状態のダンプを意味します。UnixシステムではNetWareコアダンプと同等なものについて、通常「システムクラッシュダンプ」または「カーネルクラッシュダンプ」と呼ばれています。

コアダンプ分析

コアダンプは特定のトラブルシューティングシナリオで重要な情報源となることがあります。コアダンプの詳細な分析を行うには、問題のあるアプリケーション(およびそれが依存しているライブラリとプラグイン)が書かれているプログラミング言語の知識が必要であり、また、アーキテクチャ、アプリケーション、ライブラリ、プラグインのバージョンに関してコアダンプが取得された環境に一致する開発環境の知識が必要です。サポート設定ツール(http://www.novell.com/communities/node/2332)は、この環境情報をキャプチャするための便利な方法を提供します。
コアダンプ分析は専門的な技術を必要とし、ひじょうに複雑なプロセスになる可能性があるため、一般には、もっと単純なトラブルシューティング手順を使っても解決できなかった場合にのみ試行すべきです。

コアダンプが発生するのはどのようなときですか。

プロセスがシグナル(そのプロセスが無視していないシグナルまたは無視できないシグナル)を受信したとき、そのシグナルに対してシグナルハンドラルーチンがセットアップされていなければ、プロセスはクラッシュします。たとえば、多くのプロセスは通常、SIGSEGVを処理するためのシグナルハンドラをセットアップしておらず、不正なメモリアクセスを試行したことを示すためにカーネルからこのシグナルが送信されると、プロセスがクラッシュします。この状況が発生したとき、特定の環境設定が適切に行われていれば、カーネルはプロセスのコアダンプファイルを書き込みます。

準備ステップ: コアダンプファイルの最大サイズの制限の無効化

Unixシステムでは、プロセスに使用できるさまざまなリソースに制限を設定できます。これらの制限は「ulimit -a」によって表示できます。制限可能な値の1つはコアダンプのサイズです。コアダンプがすべて書き込まれたことを確認するには、コアダンプをキャプチャする必要があるアプリケーションを開始する前に、「ulimit -c unlimited」を実行します。制限の変更は実行中のプロセスに影響せず、現在のシェルを開始したプロセスのみに適用されます。

制限を永久に変更するには、ulimitパッケージをインストールし、/etc/sysconfig/ulimit設定ファイルで制限を設定してシステムを再起動し、変更した制限を有効にします。

準備ステップ: コアダンプの保管用に固定の場所を設定

デフォルトではカーネルは、クラッシュしたプロセスの現在の作業ディレクトリにコアダンプファイルを書き込みます(ファイルシステムパーミッションとACLによって許可される場合)。このため、コアダンプファイルの場所を見つけることが難しくなる可能性があります。コアダンプを固定のディレクトリに保管するには、まず、/var/local/dumpsなどの適切なディレクトリを作成します。

install -m 1777 -d /var/local/dumps

(1777は「全ユーザが書き込み可能、所有者のみ削除可能」に相当)、次に、コアダンプをこのディレクトリに保管するようカーネルに指示します。

echo"/var/local/dumps/core.%e.%p"> /proc/sys/kernel/core_pattern

カーネルは%eをクラッシュしているプロセスの名前に、%pをPIDに書き換えます。
さらに、再起動によってこの設定変更を永続的にするには、次の行、

kernel.core_pattern=/var/local/dumps/core.%e.%p

を/etc/sysctl.conf

設定ファイルに追加します。

core_patternパラメータのフォーマットに関する詳細については、カーネルソースの/usr/src/linux/Documentation/sysctl/kernel.txtを参照してください。

準備ステップ: AppArmorの無効化

AppArmorアプリケーションのセキュリティは、アプリケーションの正常で良好な動作を把握し、アプリケーションが正常ではない動作を行うのを防ぐことに基づいています。コアダンプの書き込みは通常、アプリケーションの正常で良好な動作に当てはまらないため、AppArmorはコアファイルが書き込まれることを阻止しようとする可能性があります。
AppArmorを選択的に無効にする方法の詳細については、AppArmorのマニュアルを参照するか、または

rcapparmor stop

を実行して、AppArmorを完全に無効にします(ただしこの場合AppArmorによる保護は失われます)。

準備ステップ: setuidおよびsetgidプロセスに対するコアダンプの有効化

Unixシステムではsetuidおよびsetgidビットというツールが提供されており、これによってプロセスを開始したユーザまたはグループのIDとは異なるユーザIDまたはグループIDを使用してプロセスを実行できます。こうしたプロセスは、開始したユーザまたはグループが直接アクセスできるべきではないデータを扱っていることがあり、このようなプロセスに対してコアダンプが書き込まれた場合、データがリークされる可能性があります。このため、デフォルトではカーネルはsetuid/setgidプロセスにはコアダンプを書き込みません。同様に、デフォルトではカーネルは、rootユーザとして実行しているプロセスにコアダンプを書き込むことが情報のリークにつながる恐れがある場合は、これを行いません。このデフォルトの動作は、次のコマンドによって上書できます。kernel.suid_dumpable sysctl:

sysctl -w kernel.suid_dumpable=2

さらに、再起動によってこの設定変更を永続的にするには、次の行、

kernel.suid_dumpable=2

を/etc/sysctl.conf設定ファイルに追加します。

このsysctlに関する詳細については、カーネルソースの/usr/src/linux/Documentation/sysctl/fs.txtを参照してください。

コアダンプの手動によるトリガ

トラブルシューティングのシナリオによっては、コアダンプの生成を手動でトリガする必要がある場合があります。これはたとえばSIGABRTなど、コアダンプを生成するシグナルをプロセスに送信することで実行できます。SIGABRTをプロセス1234に送信するには、

kill -ABRT 1234

を実行します。SIGABRTをすべての実行中のfirefox-bin

プロセスに送信するには、

kill -ABRT $(pidof firefox-bin)

を実行します。

システムクラッシュダンプ

システムクラッシュダンプについてはこのドキュメントでは扱いません。システムクラッシュダンプに関する詳細については、「TID 3374462 - カーネルコアダンプキャプチャの設定」を参照してください。

Change Log

20090312 ajohansson - suid_dumpable設定を再起動によって永続的にする方法について情報を追加

Disclaimer

この情報は、米国Novell, Inc.およびノベル株式会社の内外から発生したものです。本文書の内容または本文書を使用した結果について、いかなる保証、表明または約束も行っていません。また、本文書の商品性、および特定目的への適合性について、いかなる黙示の保証も否認し、排除します。

本文書に記載されている会社名、製品名はそれぞれ各社の商品、商標または登録商標です。

  • ドキュメントID: 3054866
  • 作成年月日: 13-MAR-2008
  • 修正年月日: 12-MAR-2009
  • ドキュメントリビジョン:
  • 分類:
  • 対象NOVELL製品およびバージョン: eDirectory, Open Enterprise Server, openSUSE, SUSE Linux Enterprise Desktop, SUSE Linux Enterprise Point of Service (NLPOS/SLEPOS), SUSE Linux Enterprise Server
  • カテゴリ: