记录一次服务器事故的处理

17年的圣诞节, 网站的服务器出现了一起事故, 时恰逢考试, 不得已直到今日才对此事故有所眉目.


运行环境

服务器: Dell PowerEdge
操作系统: CentOS 5.11
后端框架: php-cmsv9

事故表现

  • ssh登陆时提示root无法登陆
  • tty登陆时提示root密码错误
  • 按下 ctrl + alt + delete 后INIT进程报错:
   shutdown[7326]: shutting down for system reboot
   INIT: cannot execute "/etc/rc.d/rc"
   INIT: no more processes left in this runlevel
  • 开机后INIT依然报错.登陆依然失败, 同时主机名显示为”(none)”
    INIT: cannot execute "/etc/rc.d/rc"
  • 刻录的Ubuntu 16.04启动盘和CentOS 6.8启动盘均无法引导并启动服务器, 但随身携带的使用工具制作的Windows PE盘可以引导并启动

  • 进入救援模式后使用 chroot /mnt/sysimage/ 报错

    chroot: /bin/sh can not be executable

日志分析

  • 日志文件: secure
    发现关键信息:
sshd[5181]: User root not allowed because shell /bin/bash is not executable
  • 日志文件: message
shutdown[7326]: shutting down for system reboot
init: cannot execute "/etc/rc.d/rc"
init: no more processes left in this runlevel
shutdown[7329]: shutting down for system reboot
shutdown[7331]: shutting down for system reboot

信息检索

于Google发现一条重要信息:
Locked out after installing a bash without executable bit

问题分析

  1. 测试的两个启动盘无法引导机器
    考虑到机器比较老旧, 而新系统(Ubuntu 16.04和CentOS 6.8 均使用基于UEFI引导的Grub 2启动管理器, 而使用工具制作的Windows PE则一般使用grub4dos启动管理器, 所以决定使用基于mbr方式引导的grub4dos启动管理器引导u盘上的CentOS 5.11, 再进入救援模式解决问题.
  2. rc文件不能执行
    rc文件的解释器就是/bin/bash , 如果bash不能执行, 那么rc脚本也就不能执行, 因此bash的执行权限是关键.

解决方案

  1. 进入救援模式
  2. 修改bash可执行权限
   chmod +x /mnt/sysimage/bin/bash

mbr引导的启动盘制作方法

你可能感兴趣的:(记录一次服务器事故的处理)