免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3570 | 回复: 4
打印 上一主题 下一主题

[SSH公钥审计和SSHD日志分析] 如何用SHELL实现类似数据库update的功能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-09 16:37 |只看该作者 |倒序浏览
最近我在做个项目是分析下用户公钥和sshd日志分析,方案是把LogLevel调到VERBOSE,这样通过分析ssh key的 fingerprint可以找到每次用户登录用的key和从哪里登录过来的。

随着分析的进行,我已经基本出了个CSV格式的整体报表,而每天的日志结果我需要去更新这份CSV数据。

=============summary.report ========================
USER|USERTYPE|KEYFILE|KEYLINENUMBER|FINGERPRINT|COMMENTS|HOST_TYPE_VIA_PUBKEY|LAST_USE|RISK|IDENTIFIED_RISK|KEY
actload|SSH|/home/actload/.ssh/authorized_keys2|LINE1|26:a7:f8:ff:ff:ff:79:46:c0:90:60:17:49:48:ff:ff|actload@remotehost |SSH from remote|20120101|YES|from clause not set|bla bla
actsftp|RSSH|/home/actsftp/.ssh/authorized_keys2|LINE2|af:ff:ff:ff:93:ff:ff:ff:ff:ff:9d:2c:22:be:27:ff|actsftp@remote |sftp from remote|20120104|NO||from="remote" bla bla
=====================================

其中日志的有些域需要每天去更新(ex:LAST_USE 这个ssh 可以最后一天使用日期),还有些其他信息。

比如我今天分析的日志结果如下:
=============daily.20120109.report ========================
USER|FINGERPRINT
actsftp|af:ff:ff:ff:93:ff:ff:ff:ff:ff:9d:2c:22:be:27:ff
=====================================

这样我就要去更新下mummary.report中关于帐号actsftp的LAST_USE部分,
类似数据库( update summary.report set LAST_USE="20120109" where USER=actsftp and FINGERPRINT="actsftp|af:ff:ff:ff:93:ff:ff:ff:ff:ff:9d:2c:22:be:27:ff".

不过反过来用SHELL来实现的话,我想可能awk比较方便些吧,数据都是CSV格式的

//summary.report.update_LAST_USE.awk
{
if ( $1=actsftp && $5)
   print $1,$2....$8,"20120109",10,$11
else
   print $0
}

这样如果daily.XXXXX.report里有几行,就生成个有一个if判断的awk语句,这样跑下这个awk语句也就实现了更新这个report的。

我的方案还没写成完整脚本,所以没不确定功能或者性能。不过这样写有很多硬编码。万一改动下CSV文件的域位置,就麻烦了。
不知道大家如何实现SHELL类似数据库更新的操作,或者SHELL有类似数据库组件或者啥的能用?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-01-09 18:58 |只看该作者
本帖最后由 rdcwayx 于 2012-01-09 18:58 编辑
  1. awk 'NR==FNR{split(FILENAME,a,".");b[$1 FS $2]=a[2];next}
  2.     $1 FS $5 in b {$(NF-3)=b[$1 FS $5]}1' FS=\| OFS=\| daily.20120109.report summary.report
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-01-10 09:20 |只看该作者
$1 FS $5 in b {$(NF-3)=b[$1 FS $5]}1-----谁能帮忙解释下1的意思是?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2012-01-10 10:06 |只看该作者
回复 3# zhujiawen


awk命令里面花括号后面的1是什么意思?
http://bbs.chinaunix.net/viewthread.php?tid=1552660#pid11095215

论坛徽章:
0
5 [报告]
发表于 2012-01-10 18:14 |只看该作者
回复 2# rdcwayx

恩,对文件名处理下直接用起来,方便不少。

我其实主要的问题是不知道这样的操作如何能少些硬编码。脚本还在不断调整中,硬编码后面改动就很头痛了。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP