Shell 历史记录异地留痕审计与监控
Shell 历史记录异地留痕审计与监控
摘要
我的系列文档
编程语言
Netkiller Architect 手札 |
Netkiller Developer 手札 |
Netkiller PHP 手札 |
Netkiller Python 手札 |
Netkiller Testing 手札 |
Netkiller Cryptography 手札 |
---|---|---|---|---|---|
Netkiller Perl 手札 |
Netkiller Docbook 手札 |
Netkiller Project 手札 |
Netkiller Java 手札 |
Netkiller DevOps 手札 |
操作系统
Netkiller Linux 手札 |
Netkiller Debian 手札 |
Netkiller CentOS 手札 |
Netkiller FreeBSD 手札 |
Netkiller Shell 手札 |
Netkiller Security 手札 |
---|---|---|---|---|---|
Netkiller Web 手札 |
Netkiller Monitoring 手札 |
Netkiller Storage 手札 |
Netkiller Mail 手札 |
Netkiller Multimedia 手札 |
数据库
Netkiller Database 手札 |
Netkiller PostgreSQL 手札 |
Netkiller MySQL 手札 |
Netkiller NoSQL 手札 |
Netkiller LDAP 手札 |
---|
网络设备及其他
Netkiller Network 手札 |
Netkiller Cisco IOS 手札 |
Netkiller H3C 手札 |
Netkiller Amateur Radio 手札 |
---|
您可以使用iBook阅读当前文档
目录
- 1. 什么是Shell历史记录异地留痕与监控
- 2. 什么要将Shell历史记录异地留痕并监控
- 3. 何时做历史记录异地留痕
- 4. 在哪里做历史记录异地留痕
- 5. 角色与权限
- 6. 怎么实现历史记录异地留痕
- 6.1. 节点配置
- 6.2. 推送端
- 6.3. 收集端
- 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
7. 延伸阅读
《日志归档与数据挖掘》
- git删除本地分支
- org.springframework.data.redis.serializer.SerializationException: Cannot serialize;
- 样式化加载失败的图片
- 使用telnet命令验证邮箱(r4笔记第19天)
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十二)Spring集成Redis缓存
- 前端开发中的字符编码
- 算法工程师的面试难不难,如何准备?-图像处理/CV/ML/DL到HR面总结
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作
- 通过使用hint unnest调优sql语句(r4笔记第38天)
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十一)redis密码设置、安全设置
- 极简增强学习新手教程 返回专栏查看评论
- 经典Java面试题收集
- 百度魅族深度学习大赛初赛冠军作品(图像识别.源码)
- easyUI整合富文本编辑器KindEditor详细教程(附源码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Linux系统上安装Spring boot应用的教程详解
- 使用openssl 生成免费证书的方法步骤
- linux cd的含义以及用法
- leetcode栈之比较含退格的字符串
- CentOS使用本地yum源搭建LAMP环境图文教程
- 清除CentOS 6或CentOS 7上的磁盘空间的方法
- leetcode栈之二叉树的前序遍历
- 解决Linux下Mysql5.7忘记密码问题
- CentOS8.0 安装配置ftp服务器的实现方法
- Linux实现自动登录的实例讲解
- Linux中date命令转换日期提示date: illegal time format问题解决
- leetcode队列之最近的请求次数
- 安防视频云服务EasyCVR集成海康SDK时语音对出现杂音问题,如何解决?
- arm linux利用alsa驱动并使用usb音频设备
- linux 磁盘转移空间的方法