shell实战之日志脱敏

Posted Mr Kay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell实战之日志脱敏相关的知识,希望对你有一定的参考价值。

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

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"
interval=`cat ${timecfg}`
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}
	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实战之日志脱敏的主要内容,如果未能解决你的问题,请参考以下文章

shell实战之tomcat看门狗

日志脱敏-参考

日志脱敏-参考

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

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

这个开源组件太强了,仅需三步完成 SpringBoot 日志脱敏