日志审计与分析-日志筛选


实验目的:使用linux 下grep 命令筛选登录日志

1、练习使用grep命令

(1)grep命令的作用?
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
(2)grep命令的常用参数都有哪些?
用法

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

常用参数:

grep [options]  
主要参数:  
[options]主要参数:  
-c:只输出匹配行的计数。  
-I:不区分大 小写(只适用于单字符)。  
-h:查询多文件时不显示文件名。  
-l:查询多文件时只输出包含匹配字符的文件名。  
-n:显示匹配行及行号。  
-s:不显示不存在或无匹配文本的错误信息。  
-v:显示不包含匹配文本的所有行。
  
pattern正则表达式主要参数:  
: 忽略正则表达式中特殊字符的原有含义。  
^:匹配正则表达式的开始行。  
$: 匹配正则表达式的结束行。  
<:从匹配正则表达 式的行开始。  
>:到匹配正则表达式的行结束。  
[ ]:单个字符,如[A]即A符合要求 。  
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。  
。:所有的单个字符。  
 - :有字符,长度可以为0。

2、使用grep筛选出linux系统的成功和失败登录日志

主要日志有:
/var/log/btmp	记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/wtmp	永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
登录失败记录:/var/log/btmp     //lastb
最后一次登录:/var/log/lastlog  //lastlog
登录成功记录: /var/log/wtmp     //last
目前登录用户信息:/var/run/utmp  //w、who、users
登录日志记录:/var/log/secure

登录日志记录:/var/log/secure
查看/var/log/secure :

cat /var/log/secure

java页面查询过滤日志文件内容 过滤日志内容grep_bash


java页面查询过滤日志文件内容 过滤日志内容grep_bash_02


筛选登陆失败的日志:我之前多次输错密码,该日志文件(/var/log/secure)中记录了很多登录失败的日志

grep -E 'no password|failure|failed|could not' /var/log/secure

java页面查询过滤日志文件内容 过滤日志内容grep_bash_03


筛选出登录成功的日志:

grep 'opened' /var/log/secure

java页面查询过滤日志文件内容 过滤日志内容grep_bash_04

3、思考:如何定期备份日志?

备份脚本编写
打开终端,新建一个目录natalog,在该目录下创建一个备份脚本文件dumplog.sh。

mkdir natalog
cd natalog
touch dumplog.sh

java页面查询过滤日志文件内容 过滤日志内容grep_环境变量_05


对脚本文件进行编写:

vim dumplog.sh
#!/bin/bash

#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/logbackup
#日期  针对日志的话 我这里是第二天凌晨0点保存前一天的日志文件
dd=`date -d "yesterday" +%Y-%m-%d`
#源文件日志路径,我准备对/var/log目录下的secure日志进行备份
bean_dir=/var/log

#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
    mkdir -p $backup_dir;
fi

#简单写法cp -r /var/log/secure  /root/logbackup/backup_log-$dd.log
# 我的源文件名 secure   这里根据自己的日志文件名称进行修改
cp -r $bean_dir/secure  $backup_dir/backup_log-$dd.log

#写创建备份日志
echo "create $backup_dir/backup_log-$dd.log" >> $backup_dir/log.txt

#找出需要删除的备份
delfile=`ls -l -crt  $backup_dir/*.log | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt  $backup_dir/*.log | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

java页面查询过滤日志文件内容 过滤日志内容grep_正则表达式_06


对脚本进行授权

chmod 700 dumplog.sh

运行脚本

./dumplog.sh

java页面查询过滤日志文件内容 过滤日志内容grep_正则表达式_07


查看是否备份成功

java页面查询过滤日志文件内容 过滤日志内容grep_正则表达式_08


将Shell脚本添加到计划任务,由crond 执行

首先查看crond状态

service crond status

java页面查询过滤日志文件内容 过滤日志内容grep_环境变量_09


编辑/etc/crontab这个文件,将shell脚本添加到配置文件中。
此时是6:20,将定时备份时间设为25minute,测试是否备份成功

vim /etc/crontab

java页面查询过滤日志文件内容 过滤日志内容grep_bash_10


下面进行测试,先把刚刚的备份删了,然后定时执行备份脚本

java页面查询过滤日志文件内容 过滤日志内容grep_java页面查询过滤日志文件内容_11


6点25分:成功备份

java页面查询过滤日志文件内容 过滤日志内容grep_bash_12

4、查阅资料:什么是linux环境变量,设置环境变量的方法都有哪些?

Linux为什么要设置环境变量:
因为Linux执行一些命令时,它会去很多目录去搜索对应的可执行程序,如果可执行程序分散在不同的目录下,当搜索时,这样会非常的耗费时间,所以Linux就约定,当执行一个命令时,就到一个指定的文件中去寻找可执行程序所在的目录,这个指定的文件就是环境变量配置文件
Linux 系统中的程序和脚本都是通过环境变量来获取系统信息、存储数据和配置信息。在 Linux 中,一般通过环境变量配置操作系统的环境,例如提示符、查找命令的路径和用户家目录等,这些系统默认的环境变量的变量名是固定的,因此只能修改其变量的值。
环境变量也称全局变量,环境变量可用于定义 Shell 的运行环境,环境变量可以在配置文件中定义与修改,也可以在命令行中设置,但是命令行中的修改操作在终端重启时就会丢失,因此最好在配置文件中修改(用户家目录的“.Bash_profile“文件或者全局配置“/etc/profile”、“/etc/Bashrc”文件或者“/etc/profile.d”文件中定义)。

~/.bashrc和/etc/profile的区别
Linux是一个多用户的操作系统,每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,方法就是修改相应的系统环境变量,即:~/.bashrc。所以 ~/.bashrc里的环境变量是针对当前登录的用户有效,是局部的。

用户登录或切换(即Login shell 启动)时会有一个专用的运行环境,它就保存在/etc/profile中,所以用户登录和用户的切换时,首先执行 /etc/profile这个文件。/etc/profile文件的作用就是存放系统的环境变量,它对所有用户都有效,是全局的。

因此,配置~/.bashrc文件,针对当前登录用户有效,配置/etc/profile文件,对所有登录用户有效。

配置方法:
Linux export 命令用于设置或显示环境变量。

export  [-fnp][变量名称]=[变量设置值]

(1)修改.bashrc文件

vim ~.bashrc

在里面加入:

export PATH="$PATH:/usr/local/arm/bin"

(2)修改 /etc/profile

vim /etc/profile

在里面加入:

export PATH="$PATH:/usr/local/arm/bin"

以上两种方法需要重新注销系统才能生效,最后可以通过下面两个命令测试。

echo $PATH
arm-linux-gcc -v