问题:要开coredump功能,需要把core file size的软限制值由0改为一个大于0的值,一般取unlimited。

有两个方法可以改变这个值,一个是ulimit命令,执行ulimit –c unlimited,可把core file size值设置为unlimited,但这只对当前shell有效;另一个是修改/etc/security/limits.conf文件,在该文件中加入如下格式的一句话:

<domain>  <type> <item>  <value>

如,

win7  soft  core  unlimited

这样,当win7用户开启shell时,其core file size 值会自动设置为unlimited。如果把win7换成*,则以上配置对所有用户有效。

我们有一个程序要开机运行,因此把/home/root/tss256 放在rc.local中,开机后会自动执行该程序。在实验过程中,该进程会突然退出,为了方便查找原因,我们选择使用coredump技术来保存进程退出时的内存状态。

如果采用改变limits.conf文件的方法,rc.local执行时,其运行环境是shell么?如果是,是哪个用户开启的shell呢?

一,rc.local执行时的运行环境是 shell么?

1,什么是shell呢?

shell是一个程序,常用的shell是Bash shell,程序为/bin/bash。shell读取用户输入的命令,并执行相应的应用程序以响应命令(由环境变量PATH决定搜索应用程序的路径),因此,我们可以把shell理解为一种命令解释器,或者一种类似vs2008的开发环境。

当一个shell启动时,系统会根据不同的启动方式判断shell类型,并读取不同的配置文件(见下文),并根据这些配置文件为将要启动的shell配置环境变量(不同的配置文件导致不同的环境变量)。

环境变量用于描述当下的shell环境。比如,USER表示当前shell所属的用户,$表示当前shell的PID号,PPID表示当前shell的父进程的PID号,SHELL表示当前shell是执行的哪个程序(因为shell也是一个程序,一般为/bin/bash),HISTSIZE表示当前shell可以存储的历史命令的最大个数。(参考《鸟哥私房菜》)。用printenv命令可以打印全部的环境变量。

因此,判断rc.local里内容执行时是否是在一个shell中执行,只需在rc.local中查看SHELL变量的值即可,在rc.local中加入echo $SHELL。

经验证,rc.local中,SHELL=/bin/bash,因此rc.local是在bash shell环境中执行的。

然而,这跟我们平时对shell的印象不太一样,平时启动shell时都是通过某个用户登录linux后,然后右击桌面,选择打开终端,这就是一个shell,又或者通过ssh,输入用户名和密码远程登录Linux,启动的就是一个shell。很明显,rc.local的执行跟我们印象中的shell不一样。

2,shell的类型有哪些呢?

shell按照登录与否,可分为登录式shell和非登录式shell;按照能否与用户交互与否,可分为交互式shell和非交互式shell。

(1)登录式shell

输入用户名和密码后,启动的shell就是登录式shell,比如sshd远程登录,又比如在本地Linux登录界面输入用户名密码登录。

(2)非登录式shell

与登录式shell相比,它不需要输入用户名密码即可启动。其一般是在shell中输入bash命令,或者本地登录Linux登录界面后,右键桌面->打开终端开启的shell。

登陆式shell和非登陆式shell启动时读取的配置文件不太一样。登录式shell启动时,系统会按照以下顺序读取配置文件,并进行相应的设置。

Ø  /etc/passwd

系统会据此判断系统上是否有输入的用户名,如果有,则获取其UID,GID,以及将要启动的shell是哪个程序。下面内容截取自/etc/passwd:

root:x:0:0:root:/root:/bin/bash

win7:x:500:500:win7:/home/win7:/bin/bash

第一句表示,系统有root这个用户,其密码用x表示,UID为0,GID为0,全名为root,家目录(即执行cd命令时进入的目录)为/root,启动的shell程序为/bin/bash程序。

第二句表示,系统有win7这个用户,其密码用x表示,UID和GID均为500,家目录为/home/win7,启动的shell程序为/bin/bash程序。

Ø  /etc/shadow

该文件记录的每个用户的密码,下面内容截取自该文件:

root:$6$H/KS4EYo0ZSZmTC8$xTMs4cAeWbQkpzHT8lB/75qerzpWlvxsF6XW9JwVzJyHEDiKcCdKu7cooUrut5NUE1wa1drb9C8KXiGXAPY021:17238:0:99999:7:::

win7:$6$y1OyG8nlGdeqeao0$iPKvObi273nm5/9krOp9CMOhj7Ngux/9gPbj/5bLw24p7rgjzm4StLDu/.3lVewgGFmdP2Za/fvYeIFSgXsQx0:17238:0:99999:7:::

上文中用户名后面那串字符即是密码,显然已经加密。在/etc/passwd中检查到用户存在后,系统会判断输入的密码与记录的密码是否一致。

Ø  /etc/profile

系统为用户启动相应的shell程序(一般为/bin/bash)后,会自动读取该文件,并设置以下环境变量(export命令使自定义变量变为环境变量):

export PATH USER LOGNAME MAILHOSTNAME HISTSIZE HISTCONTROL

Ø  $HOME/.bash_profile

此处,$HOME表示家目录,在/etc/passwd中得到。注意,不同用户的家目录不一样,这就实现了不同用户可以配置不同的shell环境变量。

在该文件中,要执行./.bashrc。

Ø  $HOME/.bashrc

该文件中执行/etc/bashrc

Ø  /etc/bashrc

该文件会对PROMPT_COMMAND变量、PATH变量、umask值进行设置。

注意:由pstree –npu命令可知,从/etc/profile至/etc/bashrc六个文件的权限均为:

-rw-r--r—

也就是说,这些文件并非shell脚本,都是在系统为用户启动相应的shell后,系统自动读取并使其生效的文件。猜测,类似于在该shell中执行:

source/etc/profile

source$HOME/.bash_profile

source$HOME/.bashrc

source/etc/bashrc

交互式shell只生效上述的$HOME/.bashrc、/etc/bashrc文件。可以在以上5个文件中加入打印信息,分别启动登陆式shell和非登陆式shell,即可得知该结论。

(3)交互式shell

顾名思义,交互式shell能与用户进行交互,用户在输入命令,shell会执行该命令并返回执行结果,我们用的shell一般都是这种类型。

(4)非交互式shell

与交互式shell相反,其不能与用户进行交互,其实际是运行中的shell脚本。

综上所述,rc.local是一个shell脚本,其运行环境是一个非登录式非交互式shell。

其实,还可以从另一个角度得出以上判断,那就是shell脚本的第一行必须写这句话:

#!/bin/bash

在shell脚本中,这一行的“#”并非注释的意思,而是告诉系统执行该脚本时应该调用/bin/bash程序,即选择bash shell作为该脚本的运行环境。打开rc.local,第一句就是#!/bin/bash,因此可以判断rc.local是一个shell脚本。

二,该shell的所属的用户是谁

为了知道该shell的用户,我们在rc.local中加入echo $USER命令,但结果显示为空,即该shell环境中没有这个变量。因此,这个shell环境不属于任何用户。

其实通过推理也可以得出这个结论,因为执行rc.local时还没有用户进行登录。

既然rc.local执行时,其shell环境没有用户,因此,通过改变limits.conf来设置core file size 值的方法不可行。只能在rc.local中加入命令ulimit -c unlimited。然而,为什么在登陆式交互式shell中,即ssh登陆或者本机登陆Linux系统后,查看ulimit –a ,core file size值依然为0呢?这是因为ulimit 只能改变当前shell环境中的值,虽然rc.local这个非交互式shell并没有停止运行,但其与当前的shell是两个不同的环境

由开启coredump引起的对shell的深入探究相关推荐

  1. 实践一:mipsel-栈溢出漏洞_开启telnet服务_反弹shell

    保护信息检查 没有开启NX .PIE等保护 漏洞分析 ida 分析: # 栈分析 .text:00400930 var_244 = -0x244 .text:00400930 var_242 = -0 ...

  2. php 开启coredump,GDB分析PHP连接Memcached 导致coredump问题

    最近一项目压力比较大,502超多,PHP进程coredump比较频繁 于是学习了下coredump的调试 讲下PHP  coredump的调试,coredump先准备代码比较好,因为PHP是开源的,这 ...

  3. php 开启coredump,coredump文件

    先设置一下coredump的保存路径,注意要空间够大的地方,因为coredump可能会较多而且很大(比如开了apc设置了1G,那就会有1G): 1 #echo "/tmp/core.%e.% ...

  4. android eclipse debug coredump,Android P 开启抓取Coredump功能

    默认情况下,Android的core dump size是被设置为0的,所以在进程crash时不会生成coredump.为了抓取coredump,需要开启该功能.下面介绍开启方法. 1.修改Zygot ...

  5. 【技术分享】linux各种一句话反弹shell总结——攻击者指定服务端,受害者主机(无公网IP)主动连接攻击者的服务端程序(CC server),开启一个shell交互,就叫反弹shell。...

    反弹shell背景: 想要搞清楚这个问题,首先要搞清楚什么是反弹,为什么要反弹. 假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常 ...

  6. 当Android发生Native Crash时,Coredump能为我们带来什么信息?

    ​更多内核安全.eBPF分析和实践文章,请关注博客和公众号: CSDN博客:内核功守道 公众号: 内核功守道 1.概述 1.1 Coredump形成原因 1.2 Coredump的作用 2.使能Cor ...

  7. linux下利用coredump技术追查进程崩溃原因

    最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何. 如果系统开启了coredump,准确的说如果当前 ...

  8. coredump介绍

    coredump是什么? coredump一般我们说是核心转储,就是在进程异常时的一个快照,保存了异常时的内存.寄存器.堆栈等数据.这些数据存储成一个文件,而且是一个ELF文件格式,可通过readel ...

  9. shell脚本的基础知识

    shell脚本的基础知识 1 什么是shell 2 shell脚本的意义 3 如何创建shell脚本 4 如何执行shell脚本 5如何对脚本脚本进行调试 6 脚本练习 1 什么是shell shel ...

最新文章

  1. 美团实习面试:熟悉红黑树是吧?能不能写一下?
  2. seaweedfs 源码笔记(一)
  3. Think Python - Chapter 12 Tuples
  4. uva 11572 ——Unique Snowflakes
  5. 认识ASP.NET 5项目结构和项目文件xproj
  6. 计算机windows10属性配置,电脑显示属性设置,教你win10系统电脑显示属性的设置教程...
  7. zabbix api 批量添加主机(python3 requests)
  8. 树莓派的命令和linux一样吗,常用的linux命令
  9. Java虚拟机类加载机制--类加载的过程详解
  10. 安装win7 64位系统时发生错误:File: \windows\system32\winload.efi
  11. 使用DexChain基金币模型实现去中心化CPU租赁及投票代理市场
  12. HCL华三模拟器静态路由实验
  13. spring boot中小学餐饮配送系统 毕业设计-附源码645661
  14. HBASE MOB设计
  15. IP101GR/IP101GA原理图和代码
  16. “嗨聊SPACE”项目测试:利用Selenium+Firefox自动化测试对用户注册、登录、上下线提示功能以及页面之间的跳转进行测试(python脚本编写)
  17. 20162330 2017-2018-1《程序设计与数据结构》第二周学习总结
  18. 数据结构与算法综合实验(附完整项目)
  19. 进程的三种状态及转换
  20. 四号楼5楼机房学生及教师机设置说明

热门文章

  1. 大数据仓库技术实训任务2
  2. 实战案例汇总,Java架构师实战视频教程
  3. 华为matepad切换电脑模式_华为MatePad Pro关于PC模式常用操作指南
  4. LaTex学习教程——插入图片及图片的引用
  5. 使用adb的时候出现 adb不是内部或者外部命令如何解决
  6. python滤波与图像去噪
  7. 04 高性能网络设计专栏-网络编程
  8. 在线文本替换工具 、支持正则表达式(博客园文章里添加Javascript或<script>语句)
  9. HB 7066机舱内部非金属材料毒性测定
  10. MTK,QAC运用minicom和tftp进行uboot