标签:
本次实战目标为日志脱敏,将日志目录内的所有文件进行处理,凡是涉及到卡号和密码的信息,一律以“*”号替代,要替代的内容都从对应的标签内获取,本脚本执行目录
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
讲解先不写了,手都麻了
希望下次看到还能看明白。。
标签:
原文地址:http://www.cnblogs.com/seeken/p/5547287.html