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
  • Red Hat Enterprise Linux (RHEL) 9

Issue

  • RHEL でデーモンプロセス (サービス) のコアダンプを有効化するにはどうすればよいですか?

Resolution

  • コアダンプは、機密情報の漏洩を防ぐために setuid() を実行しているプロセスでは生成されません。これは、Linux システムのデフォルトの動作です。setuid() を実行しているデーモンプロセスは、コアをダンプしません。set-use-ID プログラムを実行するプロセスは、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 ファイルを編集して、デーモン corefile 制限をグローバルに有効化します。
    # 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 ファイルを編集して、デーモン corefile 制限をグローバルに有効化します。
    # 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、9 :

    • RHEL 7, 8, 9 では、制限は systemd によって設定されます。以下の設定を /etc/systemd/system.conf に追加し、systemctl daemon-reexec を実行します。
    DefaultLimitCORE=infinity
    
    • 続いて、以下の sysctl パラメーターを追加します。
    fs.suid_dumpable=2
    
    # sysctl -p
    
  • 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, 8, 9

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.

Comments