Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

RHEL でデーモンプロセス (サービス) のコアダンプを有効にする方法

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux (RHEL) 5
  • Red Hat Enterprise Linux (RHEL) 6
  • Red Hat Enterprise Linux (RHEL) 7
  • Red Hat Enterprise Linux (RHEL) 8

Issue

  • RHEL でデーモンプロセス (サービス) のコアダンプを有効にする方法とは?

Resolution

  • コアダンプは、機密情報の漏洩を防ぐために setuid を実行しているプログラムでは生成されません。これは、Linux システムのデフォルトの動作です。setuid() が設定されているデーモンプロセスはコアをダンプしません。

    • setuid プログラムのコアダンプを有効にするには、以下を実行します (実行中のカーネルが対象で、再起動しても永続的ではありません)。
    #"suidsafe" (recommended) - protect privileged information by having the core dump be owned by and only readable for root:
    # sysctl -w fs.suid_dumpable=2
    
    #”debug" (may cause privileged information to be leaked):
    # sysctl -w fs.suid_dumpable=1
    
    • 永続的な設定 (再起動しても永続的) については、/etc/sysctl.confsysctl 設定に以下を追加します。
    fs.suid_dumpable = 2
    
    • sysctl 設定で再読み込みします。
    # sysctl -p
    
  • ulimit [1] 設定を変更しても、すでに実行中のデーモンプロセスには影響しないため、コアダンプを有効にするデーモンを再起動する必要がある点に留意してください。または、システムを再起動して、すべてのデーモンに対して新しい設定を有効にすることもできます。

さまざまな RHEL バージョンの設定:

  • Red Hat Enterprise Linux 5 :

    • 以下の sysctl パラメーターを追加します。
    kernel.core_pattern=/var/tmp/core
    kernel.core_uses_pid=1
    fs.suid_dumpable=2
    

    /var/tmp/core は上記の設定の例です。

    # sysctl -p
    
    • /etc/sysconfig/init ファイルを編集して、デーモンコアファイル制限をグローバルに有効にします。
    # Added to enable coredumps for daemon processes
    DAEMON_COREFILE_LIMIT='unlimited'
    
    • 以下の行が /etc/init.d/functions でコメント解除されていることを確認してください。
    corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
    
  • Red Hat Enterprise Linux 6 :

    • 以下の sysctl パラメーターを追加します。
    fs.suid_dumpable=2
    
    # sysctl -p
    
    • /etc/sysconfig/init ファイルを編集して、デーモンコアファイル制限をグローバルに有効にします。
    # Added to enable coredumps for daemon processes
    DAEMON_COREFILE_LIMIT='unlimited'
    
    • 以下の行が /etc/init.d/functions でコメント解除されていることを確認してください。
    corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}"
    
  • Red Hat Enterprise Linux 7、8 :

    • RHEL 7, 8 では、制限が systemd によって設定されています。制限なしに設定するには、以下の設定を /etc/systemd/system.conf に追加します。
    DefaultLimitCORE=infinity
    
    • 続いて、以下の sysctl パラメーターを追加します。
    fs.suid_dumpable=2
    
    # sysctl -p
    
    • systemctl daemon-reexec を実行するか、システムを再起動します。
  • Red Hat Enterprise Linux 6, 7, 8 には、ABRT [2] と呼ばれるサービスがあります。このサービスは、サーバー上のコアダンプファイルを自動的に収集し、それらを /var/spool/abrt 内に保存します。kernel.core_pattern 値は、abrtd サービスによって管理されます。

参考情報:
[1]「How to enable core file dumps when an application crashes or segmentation faults」
[2] 「How to collect core dump file of a crashing program that is shipped in Red Hat Enterprise Linux 6/7/8?」
[3] 「How to collect application coredump without abrtd service in RHEL7?」

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.