解決某研發手殘導致的系統宕機問題的處理過程
背景
2022.8.8 公司一臺服務器出現了宕機的現象:
所有的人都無法遠程, 都提示密碼錯誤.
但是網絡還是通的.
2022.8.12 出差前一天去了一趟機房現場
發現使用鍵鼠登錄也提示密碼錯誤
認爲很詭異, 一度跟維護同事產生衝突, 認爲他們修改密碼未告知.
使用rd.break的方式強改密碼依舊無法登錄.
最終使用一個非root用戶執行登錄發現可以, 但是想su 到root時提示錯誤
繼而發現 根 目錄都被賦予了 777 權限, 導致系統自保護無法登錄.
解決過程-密碼問題
rd.break的處理:
最開始是使用rd.break的方式去修改密碼密碼. 處理方式比較簡單.
開機進入linux系統前的選擇操作系統的界面.
點擊e 進行編輯
在linux16開頭的一行的末尾輸入 rd.break. 並且使用ctrl+x進行啓動.
進入系統後輸入
mount -o remount,rw /sysroot/
然後執行
chroot /sysroot/
執行命令就可以修改密碼
password root
如果要是開啓了selinux 還需要執行如下命令
touch /.autorelabel
解決過程--無法登錄的問題
上一步僅是記錄. 其實改了密碼還是不可以登錄.
發現文件權限有問題後, 想到一個比較簡單的解決辦法. 跟改密碼的方法一樣.
只不過在passwd root 這一步修改爲
cd /etc
chmod 644 passwd group shadow
chmod 400 gshadow
cd ssh
chmod 600 moduli ssh_host_dsa_key ssh_host_key ssh_host_rsa_key
chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub
chmod 640 sshd_config
chmod 700 /var/empty/sshd
注意不同目錄需要的權限不一樣, 比如 密碼等信息 可能必須用戶有讀權限, 但是非屬主必須沒有寫權限
解決過程--解決文件權限問題
經過如上操作,重啓後用戶可以登錄了. 不再提示密碼錯誤
但是因爲僅僅修改了幾個文件權限, 比如像是su sudo等命令權限其實還是無法使用的.
這裏想到很早之前信息王萌老師曾經在我不小心幹翻 一個oracle RAC節點時提供的setfacl的解決思路.
當時爲2016年一次POC測試. 王老師搭建了一個RAC環境 然後我很榮幸的 chmod 777 / software -R 了下.
直接宕機.
具體思路爲:
找一臺比較乾淨的機器, 需要注意儘量文件比較少,進程也比較少的機器,不然acl的列表可能會非常龐大.
mkdir /acl
getfacl / -R > /acl/dm.acl
這個命令可以遞歸的將當前系統的文件目錄權限全部獲取到.
然後將文件複製到 被開發搞崩的機器上面
setfacl --restore=/acl/dm.acl 就可以恢復.
結論
修改好後重啓一下服務器.
驗證可以登錄
用命令打開達夢數據庫
cd /opt/dmdbms/bin && nohup ./dmserver /opt/dmdbms/data/DAMENG/dm.ini &
發現達夢數據庫也正常了.
問題解決.