記錄一次伺服器事故的處理
阿新 • • 發佈:2019-01-29
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
資訊檢索
問題分析
- 測試的兩個啟動盤無法引導機器
考慮到機器比較老舊, 而新系統(Ubuntu 16.04和CentOS 6.8 均使用基於UEFI引導的Grub 2啟動管理器, 而使用工具製作的Windows PE則一般使用grub4dos啟動管理器, 所以決定使用基於mbr方式引導的grub4dos啟動管理器引導u盤上的CentOS 5.11, 再進入救援模式解決問題. - rc檔案不能執行
rc檔案的直譯器就是/bin/bash
, 如果bash不能執行, 那麼rc指令碼也就不能執行, 因此bash的執行許可權是關鍵.
解決方案
- 進入救援模式
- 修改bash可執行許可權
chmod +x /mnt/sysimage/bin/bash