linux 内核参数core_pattern测试

linux 内核参数core_pattern测试

参数介绍


. If the first character of the pattern is a '|', the kernel will treat

  the rest of the pattern as a command to run.  The core dump will be

  written to the standard input of that program instead of to a file.

简单来说,该参数就是可以设定core dump文件的文件名及路径,以及可以利用管道将结果输入给管道右边的程序进行处理。

参考链接:http://man7.org/linux/man-pages/man5/core.5.html

参考链接:http://man7.org/linux/man-pages/man5/proc.5.html

配置方式

  1. 设定core文件的最大值,默认为0,即不生成,只针对当前shell

ulimit -c 1024

  1. 查看当前core_pattern配置

#cat /proc/sys/kernel/core_pattern

core-%e-%p-%t

  1. 修改参数

#echo "/root/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

echo "/home/chenyuhao/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

测试方法

模拟生成core dump


sleep 15

按下Ctrl+\

  1. 修改core_pattern参数,是否能按照指定的路径及文件名生成dump。

echo "/root/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

ulimit -c 1024

sleep 15

ctrl + \

^\Quit (core dumped) #能生成dump

  1. 默认参数下测试在无权限目录下能否生成dump。

#root权限700

echo "/root/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

su - chenyuhao

ulimit -c 1024

sleep 15

ctrl + \

^\Quit  #无法生成dump



echo "/home/chenyuhao/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

su - chenyuhao

ulimit -c 1024

sleep 13

ctrl + \

^\Quit (core dumped) #能生成dump

  1. 配置sleep为只有执行权限时目录下能否生成dump

chmod 111 sleep

su - chenyuhao

ulimit -c 1024

sleep 15

ctrl + \

^\Quit  #只有执行权限的程序无法生成dump

  1. 默认参数下测试在使用setuid运行sleep时目录下能否生成dump

echo "/root/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

cp /bin/sleep /home/chenyuhao

cd /home/chenyuhao

chown root:root sleep

chmod 411 sleep

chmod u+s sleep

su - chenyuhao

ulimit -c 1024

sleep 13

ctrl + \

^\Quit  #无法生成dump

  1. 调整suid_dumpable为2,重新测试第三步

echo 2 > /proc/sys/fs/suid_dumpable

su - chenyuhao

ulimit -c 1024

sleep 13

ctrl + \ #有dump

^\Quit (core dumped) #能生成dump



$ ls -l core_dump/

total 668

-rw------- 1 chenyuhao chenyuhao 393216 Jun  5 10:59 core-sleep-27587-1528167580

-rw------- 1 chenyuhao chenyuhao 393216 Jun  5 11:04 core-sleep-27780-1528167877

-rw------- 1 root      chenyuhao 393216 Jun  5 11:15 core-sleep-28251-1528168507

-rw------- 1 root      chenyuhao 393216 Jun  5 11:22 core-sleep-28436-1528168938

#setuid生成的core dump文件只有root能访问。

  1. 设置一个777权限的目录,sleep配置为setuid,suid_dumpable参数设为0或者2,普通用户运行能否生成dump。

echo "/root/core_dump/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

echo 0 > /proc/sys/fs/suid_dumpable

chmod 411 sleep

chmod u+s sleep

chmod 777 /root/core_dump

su - chenyuhao

ulimit -c 1024

./sleep 15

^\Quit#无法生成core dump



echo 2 > /proc/sys/fs/suid_dumpable

su - chenyuhao

ulimit -c 1024

./sleep 15

^\Quit (core dumped)#可以生成

  1. sleep配置为setuid,suid_dumpable参数设为0或者2,core_pattern配置为管道形式,普通用户运行能否生成dump。

echo '|/home/chenyuhao/coredump.py /home/chenyuhao/core_dump/core_%e_%p' > /proc/sys/kernel/core_pattern

echo 0 > /proc/sys/fs/suid_dumpable

chmod 411 sleep

chmod u+s sleep

chmod 777 /root/core_dump

su - chenyuhao

ulimit -c 1024

./sleep 15

^\Quit#不能生成dump



echo 2 > /proc/sys/fs/suid_dumpable

su - chenyuhao

ulimit -c 1024

./sleep 15

^\Quit (core dumped)#可以生成



结论:

  • 自定义core dump文件路径时需要注意配置好路径的权限。

  • 在普通用户运行设置了setuid的程序一定要将suid_dumpable设置为2才能生成coredump文件。

  • 要保证全部用户能在指定路径生成core dump,需要进行以下配置:

    1. 创建一个777的core dump文件路径。

    2. 将/proc/sys/kernel/core_pattern参数为core dump路径。

    3. 将/proc/sys/fs/suid_dumpable设定为2,保证使用setuid的程序能生成dump。

你可能感兴趣的:(linux 内核参数core_pattern测试)