企业Shell面试题14:开发脚本入侵检测与报警案例

面试及实战考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次。

1.1问题分析

1)首先要说明的是,思考过程的积累比实际代码开发的能力积累更重要。

2)什么是恶意篡改,只要是未经过许可的改动都是篡改。

3)文件内容被改动了会有如下特征。

◎ 大小可能会变化

◎ 修改时间会变化

◎ 文件内容会变化,利用md5sum指纹校验

◎ 增加或删除文件,比对每次检测前后的文件数量。

1.2参考解答

本题主要采用md5sum的方法来实现。

第一步,在企业网站发布代码之后,即对所有网站数据建立初始指纹库和文件库,这个步骤很重要,没有基础的指纹库,无法进行入侵检测。

以/var/html/www作为站点目录为例。

1)建立测试数据:

[[email protected] scripts]# mkdir /var/html/www -p                           #<==创建站点目录。

[[email protected] scripts]# cp -a /etc/a* /var/html/www                      #<==复制少量测试数据。

[[email protected] scripts]# cp -a /etc/b* /var/html/www                      #<==复制少量测试数据。

[[email protected] scripts]# ls /var/html/www                                 #<==检查。

abrt acpi  adjtime  aliases aliases.db  alsa  alternatives anacrontab  asound.conf  at.deny audisp  audit  bash_completion.d  bashrc blkid

2)建立初始的文件指纹库:

[[email protected] scripts]# find /var/html/www -type f|xargs md5sum >/opt/zhiwen.db.ori

<==建立文件内容指纹库。

[[email protected] scripts]# tail /opt/zhiwen.db.ori

68b329da9893e34099c7d8ad5cb9c940  /var/html/www/at.deny

e5d91bca71662d7c09bc7fc731ad3222  /var/html/www/adjtime

8241db83d5edf01c71734e41e383e205  /var/html/www/anacrontab

c23a47aca3ec55122b8871c5a61494b5 /var/html/www/abrt/abrt-action-save-package-data.conf

9cd848af905b767fa410070b265a70c7  /var/html/www/abrt/gpg_keys

b6bcc3a178b9442d30d88444a9311769  /var/html/www/abrt/abrt.conf

441645d0e419c1f593694ca014817ee1  /var/html/www/abrt/plugins/CCpp.conf

1ecf30990ac5948a8e3bd7b8c1cd944f  /var/html/www/abrt/plugins/python.conf

1e4aded98bb1ff08094c8dfb09d33192  /var/html/www/abrt/plugins/oops.conf

b2a676d524cb2d46eccc00baadfbfe29  /var/html/www/aliases.db

3)建立初始的文件库:

[[email protected] scripts]# find /var/html/www -type f>/opt/wenjian.db.ori

#<==建立文件数量和名字库。

[[email protected] scripts]# tail /opt/wenjian.db.ori

/var/html/www/at.deny

/var/html/www/adjtime

/var/html/www/anacrontab

/var/html/www/abrt/abrt-action-save-package-data.conf

/var/html/www/abrt/gpg_keys

/var/html/www/abrt/abrt.conf

/var/html/www/abrt/plugins/CCpp.conf

/var/html/www/abrt/plugins/python.conf

/var/html/www/abrt/plugins/oops.conf

/var/html/www/aliases.db

第二步,检测文件内容和文件数量变化。

1)检测文件内容变化:

[[email protected] scripts]# echo oldboy>>/var/html/www/audisp/plugins.d/af_unix.conf  #<==篡改文件。

[[email protected] scripts]# export                                             #<==调整字符集。

[[email protected] scripts]# md5sum -c --quiet/opt/zhiwen.db.ori

#<==检查所有文件的内容是否变化。

/var/html/www/audisp/plugins.d/af_unix.conf: FAILED                                              #<==变化的会被打印出来。

md5sum: WARNING: 1 of 29 computed checksums did NOTmatch                         #<==综合提示。

2)检测文件数量变化:

[[email protected] scripts]# echo oldgirl.txt>/var/html/www/test.txt

#<==模拟增加新文件。

[[email protected] scripts]# md5sum -c --quiet/opt/zhiwen.db.ori

#<==利用指纹库无法检测新增文件。

/var/html/www/audisp/plugins.d/af_unix.conf: FAILED

md5sum: WARNING: 1 of 29 computed checksums did NOT match

[[email protected] scripts]# find /var/html/www -type f>/opt/wenjian.db_curr.ori

#<==获取检测前的所有文件数量及文件名。

[[email protected] scripts]# diff /opt/wenjian.db*        #<==采用diff命令比较。

20d19

< /var/html/www/test.txt        #<==test.txt就是新增的,怎么样,还可以吧。

第三步,开发检查指纹识别脚本。

首先,人工做如下操作:

[[email protected] scripts]# find /var/html/www -type f |xargs md5sum>/opt/zhiwen.db.ori

[[email protected] scripts]# find /var/html/www -type f>/opt/wenjian.db.ori

脚本检测会以上述两个命令获取的结果为原始的正确依据,如下

[[email protected] scripts]# cat 30-14.sh

#!/bin/bash

RETVAL=0                                            #<==状态初始化。

export                                      #<==调整字符集。

CHECK_DIR=/var/html/www                             #<==定义要监测得站点目录。

[ -e $CHECK_DIR ] || exit 1                         #<==如果目录不存在则退出脚本。

ZhiWenDbOri="/opt/zhiwen.db.ori"                    #<==定义原始指纹库路径。

FileCountDbOri="/opt/wenjian.db.ori"                #<==定义原始文件库路径。

ErrLog="/opt/err.log"                               #<==定义检测后的内容日志。

[ -e $ZhiWenDbOri ] || exit 2                       #<==如果原始指纹库不存在则退出脚本。

[ -e $FileCountDbOri ] || exit 3                    #<==如果原始文件库不存在则退出脚本。

#judge file contet

echo "[[email protected] scripts]# md5sum -c --quit/opt/zhiwen.db.ori">$ErrLog      #<==打印检测命令。

md5sum -c --quiet /opt/wenjian.db.ori &>>$ErrLog                             #<==实际执行检测命令。

RETVAL=$?                                                                      #<==收集返回值。

#com file count

find $CHECK_DIR -type f >/opt/wenjian.db_curr.ori  #<==实际执行检测命令,获取最新文件数量等。

echo "[[email protected] scripts]# diff /opt/wenjian.db*"&>>$ErrLog  #<==打印检测命令。

diff /opt/wenjian.db* &>>$ErrLog   #<==实际执行检测命令,比对文件数量及文件名变化情况。

if [ $RETVAL -ne 0 -o `diff /opt/wenjian.db*|wc -l`-ne 0 ]

#<==如果返回值不为0,或者比对结果行数不为0,则进入判断。

then

mail -s "`uname -n`$(date +%F) err" [email protected] <$ErrLog

else

echo "Sites dir isok"|mail -s"`uname -n` $(date +%F) is ok" [email protected]

fi

mail发送相关配置内容

[[email protected] scripts]# cat /etc/mail.rc

# For Linux and BSD, this should be set.               #<==配置文件的最后修改mail内容。

set bsdcompat

set [email protected] smtp=smtp.163.com

set smtp-auth-user=15537920814smtp-auth-password=l123456 smtp-auth=login

然后利用定时任务检查,命令如下:

[[email protected] scripts]# crontab -l|tail -2

# ids monitor site dir and file change by oldboy at20170511

*/3 * * * * /bin/sh /server/scripts/30-10.sh>/dev/null 2>&1

现在来思考一下,在企业中一般什么文件需要做指纹验证呢?

系统命令、用户文件、配置文件、启动文件等重要文件,都要监控起来,另外,在实际工作中应对所有的用户操作做日志审计,让所有人的所有操作无处遁形,起到威慑和监督的作用,从而减少被当作“黑锅侠”的风险。

时间: 2024-10-05 04:19:22

企业Shell面试题14:开发脚本入侵检测与报警案例的相关文章

企业Shell面试题1:批量生成随机字符文件名案例

使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下: [[email protected]]# ls /oldboy apquvdpqbk_oldboy.html mpyogpsmwj_oldboy.html  txynzwofgg_oldboy.html bmqiwhfpgv_oldboy.html mtrzobsprf_oldboy.html  vjxmlflawa_oldboy.html jhjdcj

2017最新企业Shell面试题及企业运维实战共30道案例

<跟老男孩学习Linux运维:Shell高级编程实战>一书第19章企业面试题分享. 答案: 1.答案在<跟老男孩学习Linux运维:Shell高级编程实战>第19章一书2016年年底前即将出版. 2.2016最新Shell视频http://edu.51cto.com/pack/view/id-546.html 第19章企业Shell面试题及企业运维实战案例 19.1 企业Shell面试题实战案例 19.1.1 企业Shell面试题1:批量生成随机字符文件名案例 使用for循环在/o

企业shell面试题:获取51CTO博客列表按时间倒序排序

企业shell面试题:获取51CTO博客列表倒序排序考试题 老男孩教育培训机构需求:需求入下: 请把http://oldboy.blog.51cto.com 地址中的所有博文,按照时间倒序列表如下: 2013-09-13 运维就是一场没有硝烟的战争 http://oldboy.blog.51cto.com/2561410/1296694 2016-04-17 运维人员写项目方案及推进项目的基本流程思路 http://oldboy.blog.51cto.com/2561410/1764820 附加

企业shell面试题及解答

1.面试题:使用for循环在/tmp目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串template,示例如下 aaesdffbnv_template.html 方法1: cd /tmpfor ((i=0;i<10;i++));do touch `echo $RANDOM | md5sum | sed 's/[^a-z]//g' | cut -c 1-10`_template.html;done 方法2: cd /tmp for i in `seq 10`;d

解析企业Shell面试题

一个同学问我一个问题,说有以下文件内容,要求输出为特定的格式.这里就献丑给出一个处理的方法吧,由于时间关系可能我的答案并不是最好的,但是我尽量将我的答案讲解明白,让你理解处理的方法.如果您有简单明了的处理方法请不啬赐教! 题目 文件内容如下: 2016-12-08       00:09        血战钢锯岭 2016-12-08       03:01        你的名字 2016-12-08       04:00        长城 2016-12-08       04:01  

兄弟连 企业shell笔试题 16-31

企业实践题16:企业案例:写网络服务独立进程模式下rsync的系统启动脚本 例如:/etc/init.d/rsyncd{start|stop|restart} .要求:1.要使用系统函数库技巧.2.要用函数,不能一坨SHI的方式.3.可被chkconfig管理. 脚本1: #!/bin/bash pidfile="/var/run/rsyncd.pid"result=`ps aux|grep rsync|grep -v 'grep'` Rstatus(){ if [ $resultX

企业shell面试题:获取51CTO博客列表倒序排序考试题

#!/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HTMLFILE=/home/oldboy/html HTTP=http://oldboy.blog.51cto.com/all/2561410 NUM=$(curl $HTTP |awk -F "[ /]" '/页数/ {print $(NF-3)}') [ -d $HTMLFILE ]||mkdir $HTMLFILE -p ech

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

(转)企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群: