coreadm - 核心文件管理
coreadm [-g pattern] [-G content] [-i pattern] [-I content] [-k pattern] [-d option]... [-e option]...
coreadm [-p pattern] [-P content] [-r policy] [pid]...
coreadm 指定异常终止的进程生成的核心文件的名称和位置。请参见 core(5) 手册页。
只有属于“维护和修复”RBAC 配置文件的用户和角色可以执行第一种格式的“用法概要”。该格式配置系统范围的核心文件选项,包括全局核心文件名称模式、内核区域核心文件名称模式以及 init(8) 进程的核心文件名称模式。所有设置都会永久保存,并在引导时应用。
非特权用户可以执行第二种格式的“用法概要”部分。此语法格式可指定操作系统用于生成每进程核心文件的文件名称模式和核心文件内容。
核心文件名称模式是包含以前导字符 % 指定的嵌入变量的常规文件系统路径名。变量基于操作系统生成核心文件时的有效值进行扩展。可能的嵌入变量如下所示:
可执行文件目录名,最多包含 MAXPATHLEN 个字符
可执行文件名,最多包含 MAXNAMELEN 个字符
有效组 ID
采用内部格式的进程安全许可 (atohexlabel "($plabel)")
机器名 (uname –m)
系统节点名 (uname –n)
进程 ID
time(2) 的十进制值
有效用户 ID
执行的进程所在的区域名称 (zonename)
字面值 %
例如,核心文件名称模式 /var/cores/core.%f.%p 对于进程 ID 为 1234 的 foo 命令,将生成核心文件名称 /var/cores/core.foo.1234。
通过使用一系列标记来标识进程的二进制图像的各个部分,可以指定核心文件内容说明。
匿名专用映射,包括非主线程栈的线程栈
装入的目标文件的 CTF 类型信息部分
可写的专用文件映射
DISM 映射
进程堆
ISM 映射
OSM 映射
核心转储删改请求,如 memcntl (MC_CORE_PRUNE_IN) 和 memcntl (MC_CORE_PRUNE_OUT) 请求指定的那样
只读专用文件映射
匿名共享映射
文件支持的共享映射
System V 共享内存
进程栈
装入的目标文件的符号表部分
可读且可执行的专用文件映射
此外,可以使用标记 all 来表示核心文件应该包含进程的二进制图像的所有这些部分。可以使用标记 none 来指示将不包含任何映射。default 标记指示包含系统缺省内容 (stack+heap+shm+ism+dism+osm+text+data+rodata+anon+shanon+ctf+symtab+prune)。无论映射内容是什么,核心文件中始终存在 /proc 文件系统数据结构。
可以使用 + 和 - 来串联标记。例如,核心文件内容 default-ism 将生成包含缺省映射集但不含任何锁定共享内存映射的核心文件。
不带参数的 coreadm 命令将报告当前系统配置,例如:
$ coreadm global core file pattern: /var/cores/core.%f.%p kernel zone core file pattern: /var/cores/%z/kzcore.%t global core file content: all init core file pattern: core init core file content: default global core dumps: enabled kernel zone core dumps: enabled per-process core dumps: enabled global setid core dumps: enabled per-process setid core dumps: disabled global core dump logging: disabled retention policy: summary diagnostic core dumps: enabled
仅带进程 ID 列表的 coreadm 命令将报告每个进程的每进程核心文件名称模式,例如:
$ coreadm 278 5678 278: core.%f.%p default 5678: /home/george/cores/%f.%p.%t all-ism
只有进程所有者或具有 proc_owner 特权的用户才能以这种方式查询进程。
当进程进行核心转储时,最多会生成四个核心文件:一个在每进程的位置,一个在系统范围的全局位置,还有一个在运行的进程所在区域的全局位置(如果该进程在本地区域而非全局区域中运行)。此外,如果启用诊断选项,诊断核心文件将转储到 /var/diag/<process_uuid>。将根据对应位置的有效选项生成每个核心文件。
生成全局核心文件后,该文件将具有 600 模式,并由超级用户拥有。非特权用户不能检查此类文件。如果按照示例 4 中的过程指定了有标签的核心文件,则此类核心文件在 ADMIN_HIGH 标签下维护。
将通过进程凭证在模式 600 下创建普通的每进程核心文件。进程所有者可以检查此类文件。
进程可以使用 memcntl 来请求在生成核心转储时是包括还是排除其地址空间的区域。如前所述,prune 内容标记控制每进程核心文件和全局核心文件是否支持这些请求。有关更多信息,请参见 memcntl(2) 手册页。
诊断核心文件从异常终止的进程进行转储。这种核心文件仅供 coremond 使用,用于收集有用的数据,以便进行进一步调查。
一直是或者自从上一次 exec(2) 之后成为 setuid 或 setgid 的进程存在与核心转储相关的安全问题。同样,最初具有超级用户特权但因 setuid(2) 失去这些特权的进程也存在与核心转储相关的安全问题。上述任何一种类型的进程都可以在该进程的当前非特权所有者无法访问的地址空间中包含敏感信息。如果启用 setid 核心文件,则生成的文件将处于模式 600 并由超级用户拥有。如果按照示例 5 中的过程指定了有标签的核心文件,则此类核心文件在 ADMIN_HIGH 标签下维护。
支持以下选项:
禁用指定的核心文件选项。有关可能的选项的说明,请参见 –e option。
启用指定的核心文件选项。将 option 指定为以下类型之一:
允许使用全局核心模式的核心转储。
允许使用全局核心模式的 set-id 核心转储。
允许使用内核区域核心模式的内核区域核心转储。
尝试生成全局核心文件时,生成 syslog(3C) 消息。
允许使用每进程核心模式的核心转储。
允许具有缺省核心内容和模式的诊断核心转储。
指示 FMA 是否应在收到诊断核心数据之后生成警报事件。
允许使用每进程核心模式的 set-id 核心转储。
将全局核心文件名称模式设置为 pattern。模式必须以 / 开头,可以包含“说明”部分介绍的任何特殊 % 变量。
只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。
将全局核心文件内容设置为 content。必须使用“说明”部分介绍的标记来指定内容。
只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。
将缺省的每进程核心文件名称设置为 pattern。此选项更改每进程模式仍设置为缺省值的任何进程的每进程模式。已设置了每进程模式的进程或从一个已设置每进程模式的进程派生的进程(使用 –p 选项)不受影响。重新引导后仍会保持此缺省值。
只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。
将缺省的每进程核心文件内容设置为 content。此选项更改每进程内容仍设置为缺省值的任何进程的每进程内容。已设置了每进程内容的进程或从一个已设置每进程内容的进程派生的进程(使用 –P 选项)不受影响。重新引导后仍会保持此缺省值。
只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。
针对每个指定的进程 ID,将每进程核心文件名称模式设置为 pattern。模式可包含“说明”部分所述的任何特殊 % 变量,且需要以 / 开头。如果模式不是以 / 开头,则会相对于进程生成核心文件时使用的目录对其进行评估。
非特权用户只能将 –p 选项应用于该用户所拥有的进程。具有 proc_owner 特权的用户可以将该选项应用于任何进程。受影响进程的未来子进程将继承每进程核心文件名称模式。请参见 fork(2) 手册页。
如果没有指定进程 ID,则 –p 选项将在父进程(通常是运行 coreadm 的 shell)上将每进程核心文件名称模式设置为 pattern。
针对每个指定的进程 ID,将每进程核心文件内容设置为 content。必须使用“说明”部分介绍的标记来指定内容。
非特权用户只能将 –p 选项应用于该用户所拥有的进程。具有 proc_owner 特权的用户可以将该选项应用于任何进程。受影响进程的未来子进程将继承每进程核心文件名称模式。请参见 fork(2) 手册页。
如果没有指定进程 ID,则 –P 选项将在父进程(通常是运行 coreadm 的 shell)上将每进程文件内容设置为 content。
设置诊断核心保留策略。可以指定以下选项:
缺省选项。生成 json 摘要文件并记录报告后,将删除诊断核心文件。
所有诊断核心文件都将保留。
指定一个数字,将为某个二进制文件最多保留 n 个诊断核心文件。
指定一个数字,诊断核心文件将保留 n 天。
将核心区域内核文件名称模式设置为 pattern。模式必须以 / 开头,可以包含“描述”部分介绍的任何特殊 % 变量。
只有属于“维护和修复”RBAC 配置文件的用户和角色才能使用此选项。
支持下列操作数:
进程 ID
支持 config_params 属性组中的以下属性。用户可以使用 coreadm 命令设置或更新这些属性,也可以使用这些属性创建 SMF 配置文件以设置或更新值。
允许使用全局核心模式的核心转储(如果该属性设置为 true)。
将全局核心文件内容设置为 global_content 属性。必须使用“说明”部分介绍的标记来指定内容。
将全局核心文件名称模式设置为 global_pattern 属性。模式应以 / 开头,可以包含“说明”部分介绍的任何特殊 % 变量。
允许使用全局核心模式的 set-id 核心转储(如果该属性设置为 true)。
在尝试生成全局核心文件时生成系统日志消息(如果该属性设置为 true)。有关系统日志消息的更多信息,请参见 syslog(3C) 手册页。
允许使用每进程核心模式的核心转储(如果该属性设置为 true)。
允许使用每进程核心模式的 set-id 核心转储(如果该属性设置为 true)。
将缺省的每进程核心文件内容设置为 init_content 属性。此选项更改每进程内容仍设置为缺省值的任何进程的每进程内容。
将缺省的每进程核心文件名称设置为 init_pattern 属性。此选项更改每进程模式仍设置为缺省值的任何进程的每进程模式。
允许使用内核区域核心模式的内核区域核心转储(如果该属性设置为 true)。
将核心区域内核文件名称模式设置为 kzone_pattern 属性。模式必须以 / 开头,可以包含“描述”部分介绍的任何特殊 % 变量。
允许具有缺省核心内容和模式的诊断核心转储(如果该属性设置为 true)。
将诊断核心保留策略设置为 retention_policy 属性。策略可以是以下项之一:summary、all、<n> 和 <n>d。
如果该属性设置为 true,FMA 将在收到诊断核心数据之后生成警报事件。
从用户的 $HOME/.profile 或 $HOME/.login 执行时,以下命令将为登录会话期间运行的所有进程设置核心文件名称模式:
example$ coreadm -p core.%f.%p
请注意,由于省略了进程 ID,因此将在当前运行的 shell 中设置每进程核心文件名称模式,且该模式将被所有子进程继承。
示例 2 将用户文件转储至子目录以下命令将用户的所有核心转储转储至起始目录的 corefiles 子目录中,通过系统节点名称进行区分。该命令对于使用多个不同机器但具有一个共享起始目录的用户非常有用。
example$ coreadm -p $HOME/corefiles/%n.%f.%p 1234示例 3 选择全局核心文件系统信息库
以下命令将系统设置为仅当从 /usr/bin 或 /usr/sbin 运行可执行文件时,才在全局系统信息库中生成核心文件。
example# mkdir -p /var/cores/usr/bin example# mkdir -p /var/cores/usr/sbin example# coreadm -G all -g /var/cores/%d/%f.%p.%n示例 4 标记全局核心文件
以下命令将系统设置为生成有标签的核心文件。仅限 root 用户访问全局核心文件。要提供额外的保护,可以使用 ADMIN_HIGH 标签来标记这些文件。在模式中指定了一个已创建且标有 ADMIN_HIGH 的多级别目录。
example# zfs create -o multilevel=on rpool/VARSHARE/cores2 example# setlabel ADMIN_HIGH /var/share/cores2 example# coreadm -g /var/share/cores2/%f.%p示例 5 在每区域目录中启用内核区域核心转储
以下命令将系统设置为在单独的目录中为每个内核区域生成每内核区域核心映像文件。仅限 root 用户访问内核区域核心文件。
example# mkdir /var/cores/zonename1 example# mkdir /var/cores/zonename2 example# . example# . example# . example# mkdir /var/cores/zonenameN example# coreadm -k /var/cores/%z/%f.%t -e kzone示例 6 维护有标签的每进程核心文件
以下命令将用户的会话设置为生成核心文件,这些核心文件使用转储的进程的安全许可进行标记。假定用户的起始目录是多级别文件系统。将为用户可使用的每个安全许可创建单独的子目录。
example$ mkdir $HOME/cores example$ for l in $(labelcfg list|tr \" -|tr ' ' -); do > lbl=$(atohexlabel "$echo $l|tr - ' ')") > mkdir $HOME/cores/$lbl > setlabel $lbl $HOME/cores/$lbl > done example$ mkdir $HOME/cores/ADMIN_LOW example$ coreadm -p $HOME/cores/%l/%f.%p
如果根据 ADMIN_HIGH 限定了用户,则以下附加步骤适用:
example$ mkdir $HOME/cores/ADMIN_HIGH example$ setlabel ADMIN_HIGH $HOME/cores/ADMIN_HIGH示例 7 设置诊断核心文件保留策略
以下命令将系统设置为保留诊断核心文件 30 天。
example# coreadm -r all example# coreadm -r 30d
为全局核心文件存储提供的目录。
为诊断核心文件存储提供的目录。
将返回以下退出值:
成功完成。
获取或修改系统核心文件配置时发生致命错误。
指定的命令行选项无效。
有关下列属性的说明,请参见 attributes(7):
|
gcore(1)、pfexec(1)、svcs(1)、exec(2)、fork(2)、setuid(2)、time(2)、memcntl(2)、syslog(3C)、core(5)、prof_attr(5)、user_attr(5)、attributes(7)、smf(7)、init(8) 和 svcadm(8)
在本地(非全局)区域中,全局设置应用于该区域中运行的进程。此外,全局区域设置还应用于其他任何区域中运行的进程。
内核区域核心转储会捕获正在运行的内核区域的整个机器映像,这与运行 zoneadm savecore 捕获的转储相同。只有设置了内核区域核心模式时才能启用内核区域核心转储。在内核区域核心模式指定中,执行的目录名 (%d) 和进程标签 (%l) 说明符没有意义,将被忽略。此外,执行的文件名 (%f) 将生成字符串 kzcore。
术语全局设置指的是应用于系统或区域整体的设置,但并不一定表示这些设置对全局区域有效。
coreadm 服务由服务管理工具 smf(7) 管理,其服务标识符为:
svc:/system/coreadm:default
可以使用 svcadm(8) 来对此服务执行管理操作(如启用、禁用或请求重新启动)。可以使用 svcs(1) 命令来查询服务的状态。
已经获得 solaris.smf.manage.coreadm 和 solaris.smf.value.coreadm 授权的用户、角色或配置文件也可以使用 –g、–G、–i、–I、–k、–e 和 –d 选项。