乾貨分享丨如何恢復Linux下誤刪etc目錄資料
對於運維工作者來說,可能最讓人擔心的,是伺服器宕機;
最讓人無助的,是被DDOS;
而最讓人心驚肉跳的,是rm -rf *這個命令……
當你執行rm -rf命令時,萬一哪個變數沒賦值
聽說過被刪空伺服器麼?
mysql資料庫不是在執行嗎?
linux能刪除正在執行的檔案?反正是徹底刪除了……
那一夜,你沒有拒絕我……
那一夜,我心兒破碎……
我們平時工作中,rm -rf *這個命令給每個使用linux系統的工程師帶來了深深的恐懼。
你以為今天我們是來哭訴伺服器被清空之後有多慘的嘛?
不!
山重水複疑無路,誤刪檔案能恢復!
今天就給大家分享一個在誤刪/etc目錄後,救命止損的資料恢復教程。
一、緊急措施
1.如果你是遠端登入伺服器的,首先要保持連線不被斷開。不操作時用vim保持連線狀態。
此時虛擬控制終端和ssh連線已經不能建立新連線了。
如下圖已經不能登入。
2.拷貝相同版本伺服器/etc目錄到目標伺服器(版本與配置越相近,接下來的工作量會越小,可以使用rz, wget等其他方式把配置拷貝到伺服器。scp等需要驗證賬戶資訊已經不能使用)
拷貝完成後,可以通過ssh連線,檢測是否可以正常連線至伺服器(此時使用的賬戶密碼應該是同版本伺服器的賬戶密碼)
如出現下圖所示,連線失敗,可能是selinux導致,臨時關閉selinux setenforce 0
此時已經可以正常通過
3.修改selinux配置為關閉狀態。/etc/selinux/config修改為開機不啟動
二、系統恢復
1.檢查fstab檔案
檢視配置檔案資訊如下:
通過blkid檢視裝置上所採用檔案系統型別,以及掛載裝置。
注:對比兩圖可以發現,資訊差別很大,因為我這兩臺伺服器安裝時分割槽方式不一樣。
系統顯示沒掛載home分割槽,所以刪除需要把配置檔案中掛載在home下的那行刪除。
以及修改裝置名與UUID,以及TYPE
修改/etc/fstab配置檔案,如下
配置修改無誤的話,重啟是可以正常啟動
如下圖所示,已經可以正常啟動
2.修改網絡卡資訊
如果拷貝的網路配置是動態獲取IP,並且網絡卡名稱相同,對訪問網路還沒影響,那麼這一步可以跳過,網絡卡這部分可以放到最後來做,因為你刪除配置後,網路暫時還是可以使用的。
這裡我拷貝的是靜態分配的IP地址,所以需要做一些修改。
下圖是可以看到我的網絡卡名稱是ens33
而我的配置中沒此網絡卡配置,相對應的應該是ifcfg-eth0。
備份一份,然後重新命名為ifcfg-ens33
cp ifcfg-eth0 ifcfg-eth0.bak && mv ifcfg-eth0 ifcfg-ens33
重啟可能遠端斷開連線(不同環境重啟網路方式可能不太相同,這裡是centos7)
看下配置資訊
下邊是部分解釋,可以參考下
修改為如下配置(動態分配)
靜態分配
配置以上任意一種方式
動態分配的IP,相對簡單一些,如果閘道器不支援dhcp,或者環境需要是靜態的,那麼也可以採用靜態的。配置靜態IP需要注意,閘道器如果設定錯誤,那麼可能不能訪問網路的哦。
三、應用配置恢復
a) Redis 配置資料恢復
i. Redis賬戶資料恢復
1.首先確定系統中是否還有redis使用者。(如果拷貝過來的系統也安裝了redis,那麼肯定是會有redis賬戶)
如果發現有redis使用者,以下步驟可以跳過。
1.如沒有redis賬戶,需新增redis賬戶,不然重啟redis可能失敗。新增redis賬戶資訊。(僅供參考,centos7環境成功)
echo “redis:x:996:994:Redis Database Server:/var/lib/
redis:/sbin/nologin” >> /etc/passwd
echo “redis:!!:17416::::::” >> /etc/shadow
echo “redis:x:994:” >> /etc/group
echo “redis:!::” >> /etc/gshadow
ii. Redis配置檔案恢復
Redis的配置檔案恢復相對簡單一些,官方提供了CONFIG REWRITE命令重寫redis.conf配置檔案。
如果執行命令過程中出現如下提示,不用擔心是因為許可權的問題。
首先建立redis.conf檔案
touch /etc/redis.conf
然後修改檔案屬性
chown redis:redis /etc/redis.conf
參考官方介紹:https://redis.io/commands/config-rewrite
b)mysql配置檔案恢復(maraidb)
i.mysql賬戶資料恢復
1.首先確定系統中是否還有mysql使用者。
如果發現有mysqld使用者,以下步驟可以跳過。
2.如沒有mysql賬戶,需新增mysql賬戶,不然重啟mysql可能失敗。新增mysql賬戶資訊。(僅供參考,centos7環境成功)
echo “mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin” >>/etc/passwd
echo “mysql:!!:17415::::::” >> /etc/shadow
echo “mysql:x:27:” >> /etc/group
echo “mysql:!::” >> /etc/gshadow
ii.mysql配置檔案恢復
1.程序資訊獲取mysql配置資訊
如下
basedir = /usr
datadir = /var/lib/mysql
plugin-dir = /usr/lib64/mysql/plugin
log-error = /var/log/mariadb/mariadb.log
open-files-limit =65535
pid-file = /var/run/mariadb/mariadb.pid
socket = /var/lib/mysql/mysql.sock
2.mysql引數資訊
#上圖mysqld程序ID
pid=25499
#獲取程序對映地址
cat /proc/$pid/maps | awk '$6 !~ "^/" {split
($1,addrs,"-"); print "dump memory mem_" addrs[1]"
0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}'> gdb-commands
#dump地址中資料
gdb -p $pid -x gdb-commands
上邊工作做完看下生成的檔案如下
查詢mysql引數資訊
比如 grep datadir ./mem_* 會顯示所有包含datadir字串二進位制檔案。
vim ./mem_7f18284af000 查詢datadir如下,跟程序資訊獲取引數有部分重複。
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
symbolic-links = 0
max_connections = 1000
openfileslimit = 65535
vim ./mem_7ffef7a7c000
查詢datadir如下,此塊記憶體跟ps看到的資訊差不多,可以不用記錄。
3.建立mysql配置檔案
根據以上兩種方式獲取到配置資訊如下
basedir = /usr
datadir = /var/lib/mysql
plugin-dir = /usr/lib64/mysql/plugin
log-error = /var/log/mariadb/mariadb.log
open-files-limit =65535
pid-file = /var/run/mariadb/mariadb.pid
socket = /var/lib/mysql/mysql.sock
symbolic-links = 0
max_connections = 1000
獲取mysql預設配置檔案路徑位置
mysql --verbose --help | grep -A 1 'Default options' | grep /
以上是mysql查詢配置檔案順序,通常用的是/etc/my.cnf
建立配置檔案touch /etc/my.cnf ,或者拷貝版本差別不大的配置檔案。
修改為如下所示
重啟mysql,測試下業務是否正常。
懸鏡安全實驗室介紹:
懸鏡安全實驗室由資深安全專家結合多年的安全工程實施經驗和技術儲備為行業客戶提供專業的安全保障和安全諮詢等服務,主要包括:伺服器防黑加固、高階滲透測試、安全事件應急響應、資訊系統安全風險評估、安卓App風險評估及APT模擬攻擊測試等,全天候7*24位金融、電商、開發者和政企客戶的各類應用服務提供一站式【雲+端】防黑加固解決方案。