zoukankan      html  css  js  c++  java
  • 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"
    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}">/ "${key}"=/gp" f3="s/</"${key}">/ /gp" f4="/"${key}"=/p" f5="s/"${key}"=//gp" f6=":1;N;s/^(S+)(( .*)*) 1$/12/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

    讲解先不写了,手都麻了

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

  • 相关阅读:
    Sizzle源码分析 (一)
    VueJS 数据驱动和依赖追踪分析
    使用 nvm 来管理nodejs版本 。
    在node中使用 ES6
    mongoDB & Nodejs 访问mongoDB (二)
    mongoDB & Nodejs 访问mongoDB (一)
    Javascript原型链和原型继承
    Javascript 闭包与高阶函数 ( 二 )
    SDOI2019&十二省联考 游记
    Luogu-3648 [APIO2014]序列分割
  • 原文地址:https://www.cnblogs.com/seeken/p/5547287.html
Copyright © 2011-2022 走看看