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
配置方式
- 设定core文件的最大值,默认为0,即不生成,只针对当前shell
ulimit -c 1024
- 查看当前core_pattern配置
#cat /proc/sys/kernel/core_pattern
core-%e-%p-%t
- 修改参数
#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+\
- 修改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
- 默认参数下测试在无权限目录下能否生成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
- 配置sleep为只有执行权限时目录下能否生成dump
chmod 111 sleep
su - chenyuhao
ulimit -c 1024
sleep 15
ctrl + \
^\Quit #只有执行权限的程序无法生成dump
- 默认参数下测试在使用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
- 调整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能访问。
- 设置一个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)#可以生成
- 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,需要进行以下配置:
-
创建一个777的core dump文件路径。
-
将/proc/sys/kernel/core_pattern参数为core dump路径。
-
将/proc/sys/fs/suid_dumpable设定为2,保证使用setuid的程序能生成dump。
-
网友评论