🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

1回答

6524閲覧

CentOS8/RHEL8においてcoredumpctlで一般ユーザがコアを出力できない

Lightfox

総合スコア28

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/01/05 11:27

CentOS8/RHEL8 でコアファイルの出力先が /var/lib/systemd/coredump/ に統一されてしまった(挙句 LZ4 形式で圧縮されている)ため,
ここに格納されているコアファイルを任意の場所に出力する目的で coredumpctl コマンドを利用しています。
しかし,コアファイルを出力したプロセスを立ち上げた一般ユーザで coredumpctl コマンドを実行すると,
以下のエラーメッセージが出力されて,うまくコアファイルを出力できません。

$ coredumpctl dump 10220 --output /home/user/core.10220
Hint: You are currently not seeing messages from other users and the system.
Users in the 'systemd-journal' group can see all messages. Pass -q to
turn off this notice.
No journal files were opened due to insufficient permissions.

Hint に関しては特に問題ではないのですが,「No journal files〜」の部分で困っています。
systemd-coredump は,コアファイル取得時のメタデータを systemd-journal のログに保存するため,それを参照する権限がないと言っているのだと思うのですが,当方の目的はコアファイルの出力でメタデータを参照したいわけではありません。
コアファイル自体は root ユーザ,root グループで保存されていますが,
ACL でコアファイルを出力したプロセスを立ち上げた該当ユーザに read 権限が付与されているそうなので,
コアファイル自体にアクセスすることは問題ないと思っています。
コアファイルを取得したいだけなら,/etc/systemd/coredump.conf の Compress を no にして /var/lib/systemd/coredump/ から直接コピーしてくるという手もありますが,
設定ファイルを書き換えられない環境を想定しているため,どうにか coredumpctl コマンドだけで解決したいと考えています。

ちなみに,以下のサイトを参考にしましたが,ここでも上記のことは可能なように書かれています。

systemd-coredump環境で暮らす - 赤帽エンジニアブログ

以上,よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/05 21:45

すみませんが、RHEL系はよく知らないし、CentOS8はほとんど使ってないので回答はできません。 ただ、質問自体に気になる点が複数あります。 (1)「ここでも上記のことは可能なように書かれて」とはどの辺ですか? (2)systemd-coredumpでやるとすると、メタデータにアクセスできないのにどのファイルかを特定できるとする根拠はどこにあるのでしょう? (3) /var/lib/systemd/coredump/からファイルをlz4で伸長するだけでcoreファイルになりそうですが、それではダメなのでしょうか?(この場合lz4コマンド自体は使える必要があります)
Lightfox

2020/01/07 06:24

ご指摘ありがとうございます。 > (1)「ここでも上記のことは可能なように書かれて」とはどの辺ですか? 「coreをファイルに保存する」という節です。 「coredumpctl dump -1 --output corefile」というコマンドを実行してコアファイルを保存しています。 上記のコマンドを実行した結果にも「Hint」が表示されており,UID も 1000 となっているため,一般ユーザであることが示されています。 しかし,該当ユーザに read 権限が付与されているため,コアファイルの出力が可能であるという記述だと認識しています。 > (2)systemd-coredumpでやるとすると、メタデータにアクセスできないのにどのファイルかを特定できるとする根拠はどこにあるのでしょう? この根拠ははっきり言ってありません。 /var/lib/systemd/coredump/ 下に格納されるコアファイルにプロセスIDやプロセス名が付いているので,やろうと思えばできそうに思えますが,systemd-coredump がそのような機能を備えているかは,調べてみましたが分かりませんでした。 どちらかというと,「メタデータにアクセスできないのにどのファイルかを特定できる」のではなく,「journald に保存されているログでも,自プロセスの情報であれば取得できるのではないか?」という推測の元,「自プロセスの情報を journald から取得できるのであれば,systemd-coredump を使ってコアファイルを出力できるはず」と考えた次第です。 何故このような推測をしたかと言うと,(1) の方でも回答しました通り,参考に示したサイトで可能であるように書かれているからです。 > (3) /var/lib/systemd/coredump/からファイルをlz4で伸長するだけでcoreファイルになりそうですが、それではダメなのでしょうか?(この場合lz4コマンド自体は使える必要があります) CentOS8/RHEL8 では最小構成インストールにおいて,lz4 コマンドが導入されません(何と tar もありません)。 このような環境を考慮しているため,lz4 コマンドによる展開は選択肢から除外させていただきました。 (そのため,/etc/systemd/coredump.conf による圧縮回避策を掲示していますが,こちらもできれば回避したいです。設定変更は容易にはできない環境です) 以上,よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2020/01/07 07:42

(1)なるほどそうですね。現状だとどういう設定にするとこうなるのかは分かりませんね。CentOS8 betaだからという可能性もありますが、私には追う理由がありません。 (2)根拠がないとなると、出来る前提の質問はやめた方がいいと思います。 (3)必要なパッケージのインストールや、一時的に持ち込んだファイル設置すらできないのであれば、ダメですね。そもそもそれほど厳しい制限がある環境でcoreが出来るという前提が不自然とは思いますが… 以上からお力にはなれそうにありません。失礼しました。
guest

回答1

0

No journal files were opened due to insufficient permissions.

試してませんが、このメッセージが出るということは journald のアクセス権限を付与する必要があると思います。

  • ユーザを adm グループに加える (RHEL7の場合。8はわかりませんが同じかも)
  • もしくは ユーザに sudo 実行を許可する

投稿2020/01/07 03:32

take88

総合スコア1467

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lightfox

2020/01/07 06:32

ご回答,ありがとうございます。 しかし,ご提案いただいた 2 案とも,管理者に適用するような設定のため,今回は解決策になりそうにありません。 コマンド実行後に出力される Hint にもあるとおり,ユーザを systemd-journal グループに加えたり,root でコマンドを実行したりすれば,もちろんコアファイルの出力は可能なのですが,今回は一般ユーザがコアファイルの出力を行なうため,これらは解決策になりません。 基本的に一般ユーザには管理者権限を行使させないことが通常の運用のため(最小権限の法則),そのような環境で一般ユーザがコアファイルの出力を行なえないか,ということを考えています。
退会済みユーザー

退会済みユーザー

2020/01/07 07:49

sudoのコマンド制限でもだめなんでしょうか。。。
take88

2020/01/07 09:41 編集

systemd で、一般ユーザがコアファイルを出力するために必要な設定ですので、それが実施不可能なら、実現出来ないかもしれません。systemd-journald のマニュアルにも Access Control は systemd-journal グループに加えるように書いてますので、他に方法はないんじゃないか・・・、と思います。 ということで、systemd-coredump を使わなければ良いのでは?と思いました。具体的にはわからないのですが、sysctl の設定で journald と連携してるらしいので そのへんの設定を どうにかすれば良い気がしますのでご参考までに。 もしくは、aka-persona さんが書かれてるように sudo で 実行できるコマンドや権限を制限するのも現実的な方法だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問