Shell 歷史記錄異地留痕審計與監控

http://netkiller.github.io/journal/shell.history.html

Mr. Neo Chen (陳景峯), netkiller, BG7NYT


中國廣東省深圳市龍華新區民治街道溪山美地
518131
+86 13113668890


版權聲明

轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。

文檔出處:
http://netkiller.github.io
http://netkiller.sourceforge.net

微信掃瞄二維碼進入 Netkiller 微信訂閲號

QQ群:128659835 請註明“讀者”

2017-06-16

摘要

目錄

1. 什麼是Shell歷史記錄異地留痕與監控

首先談談什麼是“歷史記錄異地留痕”,歷史記錄就是~/.bash_history檔案,不同Shell名字可能不同,它會記錄每次用戶在鍵盤上敲下的命令,我們可以通過下面命令查詢歷史記錄。

$ history | head
 1009  ls /www
 1010  vim Makefile
 1011  cat Makefile
 1012  make index.html
 1013  vim Makefile
 1014  make index.html
 1015  vim Makefile
 1016  make index.html
 1017  vim Makefile
 1018  make index.html

 $ history | tail
 2000  find /tmp/var/
 2001  ll
 2002  cd workspace/Journal/
 2003  s
 2004  ls
 2005  make shell.html
 2006  cat ~/.bash_history
 2007  history
 2008  history | head
 2009  history | tail

 $ cat ~/.bash_history | head -n 100
 cat /etc/issue
cat /etc/resolv.conf
ifconfig
cat /etc/resolv.conf
dmd
df
df -T
cat /etc/fstab
cat /etc/issue
uname -a
ps ax
cd /srv/
ls
cd workspace/
ls
df
df -T
df
ls
cd ..
ls
		

由於篇幅的限制,我是用了head,tail 命令限制顯示長度。

現在我在看看“監控”,監控就是過濾 ~/.bash_history 檔案內字元串,達到匹配標準,做出報警操作等等。例如我們發現adduser命令應立即報警,通知相關人員檢查。

2. 什麼要將Shell歷史記錄異地留痕並監控

首先我們將要用戶操作留痕,以方便隨時調閲,我們要知道系統管理員做了那些操作,還可用於審計工作。例如我們開發工作中有一個環節就是Code Review (代碼審查),可以幫助我們提前發現BUG,以及不合理做法,甚至是人為惡意植入後門等等。

歷史記錄異地留痕就是運維工作的 sysop review(運維審查)。

其次是監控,注意這裡的~/.bash_history監控並非實時監控,因為只有用戶推出shell後才能保存~/.bash_history檔案。所以監控是滯後的,但也足夠能幫助我們更早的知道系統發生了那些變化。

3. 何時做歷史記錄異地留痕

這個系統可以實時部署,對現有的業務不會影響。

4. 在哪裡做歷史記錄異地留痕

歷史記錄異地留痕分為兩個部分,第一個部分是節點,第二部分是收集端,收集段同時還負責監控與報警。節點將收集的數據發送給收集端,然後收集端歸檔日誌。

5. 角色與權限

最高權限着負責部署即可

6. 怎麼實現歷史記錄異地留痕

6.1. 節點配置

首先修改history格式,預設只有行號,我需要記錄每一個命令的輸入時間點。

			
cat >> /etc/bashrc <<EOF
export HISTTIMEFORMAT="%Y-%m-%d-%H:%M:%S "
EOF
			
			

此時輸入history命令你可以看到時間點

# history
  741  2014-12-24-10:06:26 ll
  742  2014-12-24-10:06:40 ls
  743  2014-12-24-10:06:44 ll
  744  2014-12-24-10:06:47 ls
  745  2014-12-24-10:58:13 history
			

6.2. 推送端

$ git clone https://github.com/netkiller/logging.git
$ cd logging
$ python3 setup.py sdist
$ python3 setup.py install
			

配置啟動腳本,打開檔案logging/init.d/uhistory

			
HOST=127.0.0.1 #此處為收集端的IP地址

# Port | User 
# -------------------
# 配置連接埠號與用戶
done << EOF
1220 neo
1221 jam
1222 sam
EOF
				
			

6.3. 收集端

$ git clone https://github.com/netkiller/logging.git
$ cd logging
$ python3 setup.py sdist
$ python3 setup.py install			
			

配置收集端連接埠,編輯檔案logging/init.d/ucollection

			
done << EOF
1220 /backup/neo/.bash_history
1221 /backup/jam/.bash_history
1222 /backup/sam/.bash_history
EOF
			
			

7. 延伸閲讀

《日誌歸檔與數據挖掘》