從運(yùn)行中的 Nginx 提取配置信息

背景

由于某疑似計(jì)劃刪庫跑路的同學(xué)的騷操作,導(dǎo)致測(cè)試服務(wù)器上 Nginx 配置文件(/etc/nginx/conf.d) 被直接刪除……一番騷操作試圖恢復(fù)無果后,日子就在“只要我不重啟服務(wù)碟刺,尷尬的就不是我”的平靜中安詳?shù)亩冗^溃槐,直到……我需要重啟服務(wù)器……

目標(biāo)

  1. 前提條件:

    1. Nginx 的配置文件內(nèi)容已被破壞或覆蓋,文件無法恢復(fù)
    2. Nginx 服務(wù)并未重啟或重新讀取新的配置內(nèi)容
  2. 設(shè)法在不停止當(dāng)前 Nginx 服務(wù)的前提下哮幢,提取運(yùn)行中的 Nginx 正在使用的配置內(nèi)容并恢復(fù)到文本文件

基本原理

參考資料

思路描述

  1. 在服務(wù)器確認(rèn) nginx 相關(guān)的進(jìn)程并獲取 pid
  2. 根據(jù) pid 定位進(jìn)程內(nèi)存映射
  3. nginx 配置內(nèi)容通常存儲(chǔ)在進(jìn)程的堆棧中([heap])芯勘,使用 gdb dump 從內(nèi)存中提取該部分?jǐn)?shù)據(jù)到文件
  4. 打印配置內(nèi)容缰犁,并通過正則進(jìn)行提取

代碼實(shí)現(xiàn)(基于 Shell)

#! /bin/bash
### 用于掃描 Nginx 進(jìn)程并從中反向分析配置

BASE_WORK_DIR=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)
SCAN_DIR=${BASE_WORK_DIR}/analysisdir
SCAN_RESULT_FILE=${SCAN_DIR}/scanresult.txt
RESULT_DIR=${BASE_WORK_DIR}/resultdir

if [[ -d ${SCAN_DIR} ]]; then
    rm -rf ${SCAN_DIR}
fi

if [[ -d ${RESULT_DIR} ]]; then
    rm -rf ${RESULT_DIR}
fi
mkdir ${RESULT_DIR} && mkdir ${SCAN_DIR} && cd ${SCAN_DIR}
ps -ef | grep nginx | grep master | awk -F" " '{print $2}' | while read pid; do
  workdir=${SCAN_DIR}/${pid}
  mkdir ${workdir} && cd ${workdir}
  # 生成 gdb 指令文件: dump memory
  cat /proc/${pid}/maps | awk '$6 == "[heap]" {split ($1,mem_address,"-"); print "dump memory " $1 ".memo 0x" mem_address[1] " 0x" mem_address[2] ;}END{print "quit"}'> gdb-commands
  gdb -p ${pid} -x gdb-commands
done

后續(xù)分析處理

獲取文件后滑频,可以做如下分析:

  1. 用 NotePad++ 打開并搜索 /etc/nginx/conf.d 捡偏,如果有記錄則復(fù)制完整內(nèi)容,到新的NotePad++空白頁粘貼

  2. 將粘貼后的內(nèi)容復(fù)制到 Sublime 中開始處理峡迷;

  3. 用正則替換:

    1. 搜索: (/etc/nginx/conf.d/[^\.]+\.conf) \1.+?server {
    2. 替換為:\n\n--> \1\nserver {
  4. 對(duì)結(jié)果文檔進(jìn)行人工判斷银伟,刪除無用部分即可

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绘搞,隨后出現(xiàn)的幾起案子彤避,更是在濱河造成了極大的恐慌,老刑警劉巖夯辖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琉预,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒿褂,警方通過查閱死者的電腦和手機(jī)圆米,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮缅,“玉大人榨咐,你說我怎么就攤上這事∏垂” “怎么了块茁?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)桂肌。 經(jīng)常有香客問我数焊,道長(zhǎng),這世上最難降的妖魔是什么崎场? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任佩耳,我火速辦了婚禮,結(jié)果婚禮上谭跨,老公的妹妹穿的比我還像新娘干厚。我一直安慰自己,他們只是感情好螃宙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布蛮瞄。 她就那樣靜靜地躺著,像睡著了一般谆扎。 火紅的嫁衣襯著肌膚如雪挂捅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天堂湖,我揣著相機(jī)與錄音闲先,去河邊找鬼状土。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伺糠,可吹牛的內(nèi)容都是我干的蒙谓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼退盯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼彼乌!你這毒婦竟也來了泻肯?” 一聲冷哼從身側(cè)響起渊迁,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灶挟,沒想到半個(gè)月后琉朽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稚铣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年箱叁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕医。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耕漱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抬伺,到底是詐尸還是另有隱情螟够,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布峡钓,位于F島的核電站妓笙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏能岩。R本人自食惡果不足惜寞宫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拉鹃。 院中可真熱鬧辈赋,春花似錦、人聲如沸膏燕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煌寇。三九已至焕蹄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阀溶,已是汗流浹背腻脏。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鸦泳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人永品。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓做鹰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親鼎姐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钾麸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容