Linux日志分析

常见日志文件

Linux系统中的日志文件通常存储在 /var/log​ 目录下,常见的日志文件包括:

  • /var/log/syslog:记录系统的各种信息和错误。
  • /var/log/auth.log:记录身份验证相关的信息,如登录和认证失败。
  • /var/log/kern.log:记录内核生成的日志信息。
  • /var/log/dmesg:记录系统启动时内核产生的消息。
  • /var/log/boot.log:记录系统启动过程中的消息。
  • /var/log/messages:记录系统的广泛消息,包括启动和应用程序信息。
  • /var/log/secure:记录安全相关的消息。
  • /var/log/httpd/ :记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
  • /var/log/nginx/ :记录Nginx服务器的访问和错误日志(若安装了Nginx)。

玄机的Linux日志分析中,有5个题目

1.有多少IP在爆破主机ssh的root帐号,如果有多个使用”,”分割
2.ssh爆破成功登陆的IP是多少,如果有多个使用”,”分割
3.爆破用户名字典是什么?如果有多个使用”,”分割
4.登陆成功的IP共爆破了多少次
5.黑客登陆主机后新建了一个后门用户,用户名是多少

第一个题目基本上就是去查看/var/log/auth.log(auth.log.1是备份文件)

但是这样查看会出现很多条日志,那么就需要合并一下

cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort | uniq -c | sort -nr | more

分析一下具体含义

    ​​cat auth.log.1​​:
    
    ​cat​ 命令用于显示 auth.log.1​ 文件的内容。
    
    这里 auth.log.1​ 是一个日志文件,通常是系统日志的备份文件。
    
    ​ ​|​ ​:
    
    管道符号,用于将前一个命令的输出作为下一个命令的输入。
    
    ​​grep -a "Failed password for root"​ ​:
    
    ​grep​ 命令用于在输入中搜索包含特定模式的行。
    
    ​-a​ 选项表示将文件内容视为文本文件(此选项通常在处理二进制文件时使用,但对于纯文本文件,可以省略)。
    
    ​"Failed password for root"​ 是搜索模式,即查找所有包含"Failed password for root"的行,这些行表示尝试登录root用户的失败尝试。
    
    ​​awk '{print $11}'​ ​:
    
    ​awk​ 是一个文本处理工具,用于按字段处理文本。
    
    ​{print $11}​ 表示打印每行的第11个字段。假设日志格式为标准格式,第11个字段通常是IP地址。
    
    ​​sort​​:
    
    ​sort​ 命令用于对输入行进行排序。
    
    这里是对提取的IP地址进行排序。
    
    ​​uniq -c​​:
    
    ​uniq​ 命令用于删除重复的行。
    
    ​-c​ 选项表示对每个唯一的行计数,即统计每个IP地址的出现次数。
    
    ​​sort -nr​​:
    
    ​sort​ 命令再次用于排序。
    
    ​-n​ 选项表示按数值进行排序。
    
    ​-r​ 选项表示按降序排序。
    
    组合起来,即按出现次数从高到低排序。
    
    ​​more​​:
    
    ​more​ 命令用于分页显示输出。
    
    由于输出可能很长,more​ 命令允许用户逐页查看结果。

    第二个题目跟第一个其实差不多,只不过把登录失败换成登录成功:Accepted

    第三题获取爆破的用户名:

    cat auth.log.1 | grep -a "Failed password" |perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr

    分析一下:

    ​​cat auth.log.1​​:
    
    作用:读取日志文件auth.log.1​的内容并将其传递到下一步。这个文件通常包含系统的身份验证日志。
    
    ​​grep -a "Failed password"​ ​:
    
    作用:在日志文件中查找包含“Failed password”的行。这些行记录了SSH登录失败的事件。
    
    ​-a​选项:通常用于处理二进制文件时将其视为文本文件,这里一般可以忽略,因为auth.log.1​应该是纯文本文件。
    
    ​​perl -e 'while(1\n";}'​ ​:
    
    作用:使用Perl脚本从每一行提取出失败登录尝试的用户名。
    
    ​while($_=<>)​:逐行读取输入。
    
    ​/for(.*?) from/​:使用正则表达式匹配模式“for [username] from”,其中[username]​是登录尝试的用户名。
    
    ​print "$1\n"​:将提取的用户名打印出来。
    
    ​​uniq -c​​:
    
    作用:对提取出的用户名进行去重并计数。每个唯一的用户名会与其出现的次数一起输出。
    
    ​-c​选项:在每个唯一项的前面显示出现次数。
    
    ​​sort -nr​​:
    
    作用:根据出现次数进行降序排序。这样出现次数最多的用户名会排在最前面。
    
    ​-n​选项:按照数值排序。
    
    ​-r​选项:按照降序排序。
    • 总结
    这个命令链条通过以下步骤统计每个用户名的SSH失败登录尝试次数:
    
    读取日志文件并筛选出失败登录的记录。
    
    使用Perl脚本从记录中提取用户名。
    
    对用户名进行去重和计数。
    
    按尝试次数降序排列。

    第四个题也是统计,再次跳过

    第五题是需要查询新建用户的日志

    cat auth.log.1 |grep -a “new user”

    查看auth.log.1,并且把内容通过grep(尽量加上-a 可以把二进制文件转换成文本来读取)过滤