1. 程式人生 > >記錄一次伺服器事故的處理

記錄一次伺服器事故的處理

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

資訊檢索

問題分析

  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