|
|
|
|
移动端

2.5 案例一:闪现Segmentation Fault 为哪般(3)

《UNIX/Linux网络日志分析与流量监控》第2章UNIX/Linux 系统取证,本章介绍了大量UNIX 平台下计算机取证的方法,用实例展示了硬盘数据收集和恢复技巧,并用两个案例展示了如何灵活运用各种工具来处理网络故障。本节为大家介绍案例一:闪现Segmentation Fault 为哪般。

作者:李晨光来源:机械工业出版社|2014-11-26 20:38

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

2.5 案例一:闪现Segmentation Fault 为哪般(3)

在运行apache 后,就接着运行脚本apache_debug.sh,由于apche 程序在运行一段时间后会自动崩溃(短短1分钟时间),这个脚本的目的就是每过一分钟就检查一下当前的apache,这样一来就会发现问题。接着我们就等着Segmentation fault 发生来分析进程ID 的内容,很快就找到了,下面就是这部分内容:

  1. setsockopt(42, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0  
  2. --- SIGSEGV (Segmentation fault) @ 0 (0) ---  
  3. rt_sigaction(SIGSEGV, {0x43ab80, [SEGV], SA_RESTORER|SA_RESTART, 0x2b594e0ad4f0},  
  4. {0x2b5951de9ca0, [SEGV], SA_RESTORER|SA_RESTART, 0x2b594e0ad4f0}, 8) = 0  
  5. rt_sigaction(SIGFPE, {SIG_DFL}, {0x2b5951de9ca0, [FPE], SA_RESTORER|SA_RESTART,  
  6. 0x2b594e0ad4f0}, 8) = 0  
  7. {0x2b5951de9ca0, [ABRT], SA_RESTORER|SA_RESTART, 0x2b594e0ad4f0}, 8) = 0  
  8. fstat(2, {st_mode=S_IFREG|0640, st_size=2396024, ...}) = 0  
  9. mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =  
  10. 0x2b5959ea1000  
  11. kill(3204604, SIGSEGV) = 0  
  12. rt_sigreturn(0x30e5fc) = 12  
  13. --- SIGSEGV (Segmentation fault) @ 0 (0) ---  
  14. chdir("/etc/apache") = 0  
  15. rt_sigaction(SIGSEGV, {SIG_DFL}, {0x43ab80, [SEGV], SA_RESTORER|SA_RESTART,  
  16. 0x2b594e0ad4f0}, 8) = 0  
  17. kill(3204604, SIGSEGV) = 0  
  18. rt_sigreturn(0x30e5fc) = 12  
  19. --- SIGSEGV (Segmentation fault) @ 0 (0) ---  
  20. process 3204604 detached 

他心想:“访问日志中是不是有什么线索能告诉我这台计算机到底发生了什么问题呢?”

  1. #tail -50 access_log |more  
  2. 192.168.1.215 – [21/Oct/2010:11:57:56 - 0400] “POST /home.php HTTP/1.1 “200 65401  
  3. 192.168.1.215 – [21/Oct/2010:11:57:58 - 0400] “POST /home.php HTTP/1.1 “200 3870  
  4. 192.168.1.215 – [21/Oct/2010:11:57:59 - 0400] “POST /home.php HTTP/1.1 “200 84404  
  5. 192.168.1.215 – [21/Oct/2010:11:58:01 - 0400] “POST /home.php HTTP/1.1 “200 65401  
  6. 192.168.1.215 – [21/Oct/2010:11:57:52 - 0400] “POST /home.php HTTP/1.1 “200 3970  
  7. …… 

看了日志,小王觉得很可能与POST 命令有关,但他依然不知道是何原因导致了这种故障的发生。

互动问答

各位读者,看完了案例描述和小王对事件的分析,你能回答下面几个问题吗?

1.日志文件中发生了什么?

2.如何实现在系统Apache 出现段错误时输出到 Core 文件?

3.小王应该对他的网站进行哪些安全加固处理?

疑难解析

1.其实网上大部分服务器都在受到持续攻击,无论是人为还是蠕虫,所以你的日志还是会被那些企图利用该系统的漏洞所产生的报告所塞满,例如:

  1. [Sun may 5 17:29:33 2010] [error] [client 80.11.134.231] File does not exist:  
  2. /var/www/htdocs/scripts..A../windows/system32/cmd.exe 

正如这个例子描述的,westshop.com 运行的是Linux 下的apache 服务器,而cmd.exe 仅存在于Windows 系统中,所以这些命令跟我们的系统毫不相干,我们所关心的日志大部分来自error_log 和access_log 文件的末尾。接下来分析一下access 日志文件中的一行:

  1. 192.168.1.215 - - [21/Oct/2010:11:59:57 -0400] “POST”/home.php HTTP/1.1” 200 84424 

还有来自error 日志文件中的一行:

  1. [Mon Oct 21 11:59:58 2010] [notice] child pid 6678 exit signal Segmentation fault (11) 

假设这些事件发生在同一时间段,那么是POST 方法导致web 服务器进程产生了“Segmentaionfault”故障。

2.Core Dump 又是什么? 我们在开发(或使用)一个程序时,程序可能会突然崩溃。这时操作系统就会把程序崩溃时的内存内容写入一个叫做core 的文件里(这个写入的动作就叫dump),以便我们调试。Linux 下的C 程序常常会因为内存访问错误等原因造成SegmentFault(段错误),此时如果系统Core Dump 功能是打开的,那么将会有内存映像转储到硬盘上来。

下面以RHEL 5 为例讲解如何配置实现Apache 能在出现段错误时输出Core 文件。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

JSP应用开发详解(第三版)

本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JS...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊