CentOS中的Segfaults(grep,coreutils等)

今天我被通过了一个盒子,而不是从重新启动回来。 经过与生活/救援磁盘工作一点点,我遇到了我现在坚持的情况。 基本上各种低级工具( LS, GREP )是segfaulting – 重新安装修复,但它不断恢复。

其中一个segfaulting程序是grep。 一个随机的例子:

$ grep eth0 /etc/sysconfig/network-scripts/* Segmentation fault 

然而,重新安装grep软件包可以解决这个问题:

 $ yum reinstall grep Loaded plugins: fastestmirror Setting up Reinstall Process Loading mirror speeds from cached hostfile [...] Installed: grep.i386 0:2.5.1-55.el5 Complete! $ grep eth0 /etc/sysconfig/network-scripts/* /etc/sysconfig/network-scripts/ifcfg-eth0:DEVICE=eth0 [...] 

但是,当盒子重新启动,一切都被打破了! 我甚至可以通过简单地切换运行级别来复制这个。

 $ init 4 $ grep eth0 /etc/sysconfig/network-scripts/* Segmentation fault 

我可以重复我的重新安装修复程序,但然后切换到运行级别5,它又发生了。

我在下面的grep命令中包含了strace的一个副本,但正如我所说的那样,它也会影响“ls”,我也用一个重新安装的coreutils来解决这个问题。

 execve("//bin/grep", ["grep", "eth0", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", "/etc/sysconfig/network-scripts/i", ...], [/* 24 vars */]) = 0 brk(0) = 0x9bd0000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=29251, ...}) = 0 mmap2(NULL, 29251, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fe2000 close(3) = 0 open("/lib/libpcre.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20\17\0\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=117448, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe1000 mmap2(NULL, 116176, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x1d3000 mmap2(0x1ef000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c) = 0x1ef000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340_\1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1686224, ...}) = 0 mmap2(NULL, 1410500, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x8aa000 mmap2(0x9fd000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x152) = 0x9fd000 mmap2(0xa00000, 9668, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa00000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe0000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7fe06c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 mprotect(0x9fd000, 8192, PROT_READ) = 0 mprotect(0x818000, 4096, PROT_READ) = 0 munmap(0xb7fe2000, 29251) = 0 --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ 

任何人有一些聪明的想法是怎么回事? 我不打算信任这个盒子(软件的硬件),但是我想知道这个。

就像你在评论中说的,如果你的服务器已经被攻破,你一定会安装一个rootkit。 如果它在重启后回来,这是一个讨厌的(有多种策略重新安装在不同的地方,自定义库包装真正的和内核模块拦截系统调用,以隐藏自己)。

在这种情况下,segfaults是由rootkit的自定义库引起的,这些自定义库与您的发行版的库不兼容。

要解决这个问题,唯一真正的解决scheme是从头重新安装并谨慎地恢复您的数据。

你在这个系统里有大量的磁盘损坏或者坏的内存,而我的钱就是后者。 为两者运行相应的硬件诊断程序,并在一次卸下DIMM的情况下开始testing。

我怀疑问题是由于坏的磁盘/ RAID控制器导致文件系统损坏。 我会检查SMART输出以检查驱动器的健康状况。 其次将运行memtest排除RAM的任何问题。 第三我会做磁盘的压力testing。

我非常怀疑它是一个rootkit。