本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以“*”号替代,要替代的内容都从对应的标签内获取,本脚本执行目录

drwxr-xr-x 5 root root 4096 May 31 20:20 log
-rw-r--r-- 1 root root 57 May 31 20:20 cfg.log
-rw-r--r-- 1 root root 3 May 31 20:28 cfg.time
-rwxr-xr-x 1 root root 1625 May 31 20:30 desi.sh
-rw-r--r-- 1 root root 856 May 31 20:50 sh.log
使用说明
本脚本使用说明:
1.文件夹log为待处理的日志目录,作为例子
2.cfg.log用来配置待处理的日志目录
3.cfg.time为定时任务的间隔时间,单位为分钟
4.sh.log为脚本执行留下的日志
5.desi.sh为处理日志脱敏的脚本
6.在desi.sh前几行是各配置文件路径,需要手动配置,注意必须是绝对路径 PS:
经测试,处理80M的日志大概需要30s+时间,所以最好把时间间隔设置的尽量长一些,另外,本脚本并未对处理过的日志做任何记忆,也就是说,每次执行脚本的时候,都会对日志目录内的日志进行处理,所以随着时间的推移,日志越来越大,脚本执行的时间也会越长,这一点需要注意。如果必要,后期可优化。

desi.sh内容

# This file is used to handle log desensitization
# kay
# 05/31/2016 #!/bin/bash - # global path variable
timecfg="/root/shell/cfg.time"
path="/root/shell/desi.sh"
shlogpath="/root/shell/sh.log"
logcfg="/root/shell/cfg.log" # add crontab
docrontab()
{
cronfile="/tmp/crontab.${USER}"
crontab -l > ${cronfile}
interval=`cat ${timecfg}`
content="*/"${interval}" * * * * "${path}
grep -q "${path}" ${cronfile} && echo "" ||
{
echo "${content}" >> ${cronfile}
crontab ${cronfile}
}
rm -rf ${cronfile}
} # desensitization function
keylab=(track_2 track_3 pan exp_dt ic_dat pin_key track_key trm_key tpklmk zaklmk zpklmk pin_data)
desensitization(){
for key in ${keylab[*]}
do
f1="<"${key}">"
f2="s/<"${key}">/\n"${key}"=/gp"
f3="s/<\/"${key}">/\n/gp"
f4="/"${key}"=/p"
f5="s/"${key}"=//gp"
f6=":1;N;s/^(\S+)((\n.*)*)\n\1$/\1\2/M;$!b1" list=`grep -r ${f1} $1 | sed -n ${f2} | sed -n ${f3} | sed -n ${f4} | sed -n ${f5} | sed -r ${f6} | cat` for l in ${list}
do
cnb=""
len=${#l}
if [ ${len} -gt 8 ]
then
cnb="5-"$((${len} - 4))
else
cnb="2-3"
fi
mid=`echo ${l} | cut -nb ${cnb}`
mid=`echo "${mid}" | sed 's/*/\\\*/g'`
h=`echo ${l} | sed 's/'${mid}'/*******/g'`
f=`echo "${l}" | sed 's/*/\\\*/g'`
grep -rl ${f} $1 | xargs sed -i 's/'${f}'/'${h}'/g'
done
done
} # check whether config file exists
if test -f ${logcfg}
then
echo "${logcfg}..." >> ${shlogpath}
else
echo "log config file not exist" >> ${shlogpath}
fi # read config file and handle every file and directiory
filelist=`cat ${logcfg}`
for f in ${filelist}
do
desensitization ${f}
done docrontab exit

讲解先不写了,手都麻了

希望下次看到还能看明白。。

shell实战之日志脱敏的更多相关文章

  1. shell实战之日志脱敏-2.0

    cfg # This is generated to be a configuration file. # kay # // # This is a parameter for crontab and ...

  2. shell实战之日志备份

    util.sh #!/bin/bash - # Read config # kay # Version: 1.0 # // # configuration file path config=${log ...

  3. 用shell统计访问日志里每个ip访问次数【转】

    今天,要统计一个系统的每个ip访问次数,于是我找到该系统访问日志,并写脚本实现.   访问日志情况: [root@qular ~]# cd /usr/local/nginx/logs/ [root@q ...

  4. log4j 日志脱敏处理 + java properties文件加载

    Java 加载Properties 配置文件: ResourceBundle bundle = ResourceBundle.getBundle("log4j_filter"); ...

  5. java 日志脱敏框架 sensitive-v0.0.4 系统内置常见注解,支持自定义注解

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 特性 基于注解的日志脱敏. 可 ...

  6. java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的支持

    项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 用户也可以基于自己的实际需要, ...

  7. java 日志脱敏框架 sensitive,优雅的打印脱敏日志

    问题 为了保证用户的信息安全,敏感信息需要脱敏. 项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅. 于是,就写了一个基于 java 注解 ...

  8. Shell + crontab 实现日志压缩归档

    Shell + crontab 实现日志压缩归档 crontab # archive the ats log days. */ * * * * root /bin/>& shell #! ...

  9. 如何将shell的打印日志输入到日志文件

    如果shell打印的日志很多,屏幕无法完全显示,需要查看shell执行的情况,这是就需要输入到日值了: 如:echo "2012-6-14" | tee -a my.log -a表 ...

随机推荐

  1. Android开发中碰到的一个ANR问题。

    这是一个点击之后反应超时的ANR [// ::] - :: D ActivityManager: Delay resumeKeyDispatchingLocked() to avoid deadloc ...

  2. MUI 实用教程

    MUI 实用JS教程: https://www.kancloud.cn/benhailong/mui/319751  MUI 实用教程: https://www.kancloud.cn/benhail ...

  3. nginx配置proxy_pass URL末尾加与不加/(斜线)的区别

    nginx在配置proxy_pass的时候 URL结尾加斜线(/)与不加的区别和注意事项 假设访问路径的 /pss/bill.html 加/斜线的情况 location /pss/ { proxy_p ...

  4. Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块

    Python第五天   文件访问    for循环访问文件    while循环访问文件   字符串的startswith函数和split函数  linecache模块 目录 Pycharm使用技巧( ...

  5. Kubernetes Dashboard - 每天5分钟玩转 Docker 容器技术(173)

    前面章节 Kubernetes 所有的操作我们都是通过命令行工具 kubectl 完成的.为了提供更丰富的用户体验,Kubernetes 还开发了一个基于 Web 的 Dashboard,用户可以用 ...

  6. 字符是否为SQL的保留字

    要想知道字符是否为MS SQL Server保留字,那我们必须把SQL所有保留字放在一个数据集中.然后我们才能判断所查找的字符是否被包含在数据集中. MS SQL Server保留字: ) = 'ad ...

  7. Sql Server 获取本周周一

    SELECT DATEADD(Day,(@i+1)-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())

  8. Linux学习历程——Centos 7 touch命令

    一.命令介绍 touch 命令用于创建空白文件,以及设置文件的时间. ----------------------------------------------------------------- ...

  9. python3 正则表达式点星问号(.*?)能不能匹配换行符?不能的话应该怎么写

    python3的re模块使用过程中,正则的书写遇到了一些问题,就是使用.*?能不能匹配到换行符的问题. 答案是不能. 如果在匹配过程中遇到了也没关系,加上这个语句就好: \s+

  10. 树莓派3b+ Ubuntu 16.04 MATA系统 ssh远程登陆后修改主机名、用户密码和用户名

    写在前面: 刚刚开始写博客,记录下自己的学习过程,备忘. 最近在使用树莓派做智能小车的开发,使用的是树莓派3b+,安装的是Ubuntu 16.04 MATA 系统,安装系统后需要修改主机名,登陆密码以 ...