如何设置默认核心文件权限

如何设置默认核心文件权限

我运行的进程有时会生成核心文件,并且该文件具有以下文件权限:

server:~ # ls -l /mnt/process/core/core_segfault 
-rw------- 1 root root 245760 Dec  2 11:29 /mnt/process/core/core_segfault

问题是只有root用户可以打开它进行调查,而我希望有权访问它的每个人都能够阅读它,而无需我总是手动设置权限。

我怎样才能将默认权限设置为类似-RW-RW-RW-

答案1

由于核心文件包含进程崩溃时的完整内存布局,因此它们可能包含敏感信息。因此,创建核心文件时,其所有权设置为进程崩溃时的 uid,并且权限设置相当严格。没有可以轻易更改的设置。

然而,你什么要做的是将kernel.core_patternsysctl 设置设置为程序(必须以管道字符 开头|)。当核心文件生成时,内核将调用该程序,而不是将其转储到磁盘。该程序应该能够生成具有您想要的权限的核心文件。

执行此操作的程序示例有systemd-coredumpapport

答案2

这对我有用:它使每个人都可以读取该文件,644 而不是 600。阅读后沃特评论

sudo bash -c 'echo "|/usr/bin/env tee /proc/%P/cwd/core.%h.%e.%p" \
  > /proc/sys/kernel/core_pattern'

细节

如果您想扩展该解决方案,请阅读下面的限制。要对您的脚本进行故障排除,请使用dmesg以下位置查看内核日志$LINUX/fs/coredump.c::do_coredump

请注意,引号已从 core_pattern 命令中删除,该命令的所有参数均以空格分隔,因此我无法运行多个命令:

  1. bash -c "echo 1; echo 2"将失败,因为它只接收回显(第一个参数)
  2. echo 1; echo 2也会失败,回显1;echo2。使用&&|甚至所需的内容也是如此>,因此您无法猫。红帽推荐在绝对路径中创建脚本。

man 5 core

  • 必须使用绝对路径名(或相对于根目录的路径名 /)指定程序,并且必须紧跟在“|”之后特点。
  • 该进程以其当前工作目录作为根目录开始。如果需要,可以通过使用 %P 说明符提供的值通过 /proc/[pid]/cwd 更改为转储进程的位置来更改转储进程的工作目录。
  • 从内核 5.3.0 开始,在扩展模板参数之前,管道模板会按空格分割成参数列表。

相关内容