Shell 历史记录异地留痕审计与监控
http://netkiller.github.io/journal/shell.history.html
Mr. Neo Chen (陈景峰), netkiller, BG7NYT
中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890
+86 755 29812080
<[email protected]>
版权 ? 2014 http://netkiller.github.io
版权声明
转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。
|
|
2014-12-25
摘要
我的系列文档
目录
- 1. 什么是Shell历史记录异地留痕与监控
- 2. 什么要将Shell历史记录异地留痕并监控
- 3. 何时做历史记录异地留痕
- 4. 在哪里做历史记录异地留痕
- 5. 角色与权限
- 6. 怎么实现历史记录异地留痕
- 7. 延伸阅读
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