本文首发于奇安信攻防社区:https://forum.butian.net/share/379
Linux日志简介
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
Linux 日志都以明文形式存储,所以用户不需要特殊的工具就可以搜索和阅读它们。还可以编写脚本,来扫描这些日志,并基于它们的内容去自动执行某些功能。Linux 日志存储在 /var/log 目录中。这里有几个由系统维护的日志文件,但其他服务和程序也可能会把它们的日志放在这里。大多数日志只有root账户才可以读,不过修改文件的访问权限就可以让其他人可读。
日志文件
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/var/log/boot.log | 记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息。 |
/var/log/syslog | 默认RedHat Linux不生成该日志文件,但可以配置/etc/syslog.conf让系统生成该日志文件。它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。 |
/var/log/cron | 该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作。CMD的一个动作是cron派生出一个调度进程的常见情况。REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性执行的任务调度。RELOAD动作在REPLACE动作后不久发生,这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存。该文件可能会查到一些反常的情况。 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录了每一个发送到系统或从系统发出的电子邮件的活动。它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统。 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。如果某用户从来没有登录过,就显示为”*Never logged in*”。该命令只能以root权限执行。 |
/var/log/wtmp | 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端 tty或时间显示相应的记录。 |
/var/log/utmp | 该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如 who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的。 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/xferlog | 该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。 |
/var/log/kernlog | RedHat Linux默认没有记录该日志文件。要启用该日志文件,必须在/etc/syslog.conf文件中添加一行:kern.* /var/log/kernlog 。这样就启用了向/var/log/kernlog文件中记录所有内核消息的功能。该文件记录了系统启动时加载设备或使用设备的情况。一般是正常的操作,但如果记录了没有授权的用户进行的这些操作,就要注意,因为有可能这就是恶意用户的行为。 |
(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询。
who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机
w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息
users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名把显示相同的次数
last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户
日志优先级
级别 | 英文单词 | 中文释义 | 说明 |
---|---|---|---|
0 | EMERG | 紧急 | 会导致主机系统不可用的情况。紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题。需要立即修复,例如系统数据库损坏。 |
2 | CRIT | 严重 | 比较严重的情况。危险情况,例如硬盘错误,可能会阻碍程序的部分功能。 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提醒 | 可能影响系统功能,需要提醒用户的重要事件 |
5 | NOTICE | 注意 | 不会影响正常功能,但是需要注意的事件 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
比较重要的几个日志
后面是查看的命令
1 | 登录失败记录:/var/log/btmp //lastb |
常用检查命令
Linux下常用的shell命令如:find、grep 、egrep、awk、sed
grep显示前后几行信息
1 | 标准unix/linux下的grep通过下面參数控制上下文: |
grep 查找含有某字符串的所有文件
1 | grep -rn "hello,world!" |
显示一个文件的某几行
1 | cat input_file | tail -n +1000 | head -n 2000 |
系统完整性
通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了
1 | rpm -Va > rpm.log |
查看对外开放端口
1 | ss -tnlp |
防火墙
1 | firewall-cmd --state # 显示防火墙状态 |
用户
1 | awk -F: '{if($3==0||$4==0)print $1}' /etc/passwd # 查看 UID\GID 为0的帐号 |
计划任务和启动项
1 | chkconfig # 查看开机启动服务命令 |
可疑文件
查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性,针对可疑文件查看创建修改时间。
1 | find / -ctime -2 # 查找72小时内新增的文件 |
日志分析技巧
A、/var/log/secure
Red Hat 系的发行版是/var/log/secure。Debian 系的发行版是/var/log/auth.log。
定位哪些IP在爆破主机的root帐号和次数统计:
1 | # Red Hat 系的发行版 |
定位有哪些IP在爆破(太长了)
1 | grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c |more |
爆破用户名有哪些(太长了)
1 | grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr | more |
爆破失败的次数
1 | grep -o "Failed password" /var/log/secure|uniq -c |
爆破失败的用户名次数统计
1 | grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr |
爆破失败的ip次数统计
1 | sudo grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr | more |
登录成功的IP有哪些:
1 | grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more |
登录成功的日期、用户名、IP:
1 | grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' |
1 | grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}' |
增加一个用户:
1 | grep "useradd" /var/log/secure |
删除用户
1 | grep "userdel" /var/log/secure |
root权限用户、查看 UID\GID 为0的帐号
1 | awk -F: '{if($3==0||$4==0)print $1}' /etc/passwd |
查看能够登录的帐号
1 | awk -F: '{if($7!="/usr/sbin/nologin")print $1}' /etc/passwd |
B、/var/log/yum.log
软件安装升级卸载日志:
1 | yum install gcc |
日志工具
分割日志工具-logrotate
logrotate 程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。可以节省磁盘空间。
日志转储也叫日志回卷或日志轮转。Linux中的日志通常增长很快,会占用大量硬盘空间,需要在日志文件达到指定大小时分开存储。
syslog 只负责接收日志并保存到相应的文件,但不会对日志文件进行管理,因此经常会造成日志文件过大,尤其是WEB服务器,轻易就能超过1G,给检索带来困难。
大多数Linux发行版使用 logrotate 或 newsyslog 对日志进行管理。logrotate 程序不但可以压缩日志文件,减少存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志。
如果你在服务器上面安装了mysql,httpd 或者其他应用服务后,logrotate 它会自动在 /etc/logrotate.d/ 下面创建对应的日志处理方式,基本是继承 logrotate.conf. 因此,不论是你服务器上面系统日志还是应用日志,面对日志量太大的问题,都可以使用 logrotate 进行设置处理.
1、配置文件介绍
Linux系统默认安装logrotate工具,它默认的配置文件在:
1 | /etc/logrotate.conf |
logrotate.conf 才主要的配置文件,logrotate.d 是一个目录,该目录里的所有文件都会被主动的读入/etc/logrotate.conf中执行。
另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以/etc/logrotate.conf这个文件的设定来作为默认值。
Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的。
实际运行时,Logrotate会调用配置文件/etc/logrotate.conf。可以在/etc/logrotate.d目录里放置自定义好的配置文件,用来覆盖Logrotate的缺省值。
1 | [root@huanqiu_web1 ~]# cat /etc/cron.daily/logrotate |
如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要:
1 | # /usr/sbin/logrotate -f /etc/logrotate.d/nginx |
logrotate 命令格式:
1 | logrotate [OPTION...] <configfile> |
根据日志切割设置进行操作,并显示详细信息:
1 | [root@huanqiu_web1 ~]# /usr/sbin/logrotate -v /etc/logrotate.conf |
根据日志切割设置进行执行,并显示详细信息,但是不进行具体操作,debug模式
1 | [root@huanqiu_web1 ~]# /usr/sbin/logrotate -d /etc/logrotate.conf |
查看各log文件的具体执行情况
1 | [root@fangfull_web1 ~]# cat /var/lib/logrotate.status |
2、切割介绍
比如以系统日志/var/log/message做切割来简单说明下:
- 第一次执行完rotate(轮转)之后,原本的messages会变成messages.1,而且会制造一个空的messages给系统来储存日志;
- 第二次执行之后,messages.1会变成messages.2,而messages会变成messages.1,又造成一个空的messages来储存日志!
如果仅设定保留三个日志(即轮转3次)的话,那么执行第三次时,则 messages.3这个档案就会被删除,并由后面的较新的保存日志所取代!也就是会保存最新的几个日志。
日志究竟轮换几次,这个是根据配置文件中的dateext 参数来判定的。
看下logrotate.conf配置:
1 | # cat /etc/logrotate.conf |
由这个文件的设定可以知道/etc/logrotate.d其实就是由/etc/logrotate.conf 所规划出来的目录,虽然可以将所有的配置都写入 /etc/logrotate.conf ,但是这样一来这个文件就实在是太复杂了,尤其是当使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理了。
所以,如果独立出来一个目录,那么每个要切割日志的服务, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中。
其他重要参数说明:
1 | compress #通过gzip 压缩转储以后的日志 |
3、示例
nginx日志切割一例
1 | [root@huanqiu_web1 ~]# cat /etc/logrotate.d/nginx |
php脚本切割一例:
1 | [root@huanqiu_web1 ~]# cat /etc/logrotate.d/php |
tomcat日志切割一例
1 | [root@huanqiu-backup ~]# cat /etc/logrotate.d/tomcat |
系统日志切割一例
1 | [root@huanqiu_web1 ~]# cat /etc/logrotate.d/syslog |
日志分析工具-logwatch
安装
1 | yum -y install logwatch |
安装完成之后,需要手工生成 logwatch 的配置文件。默认配置文件是 /etc/logwatch/conf/logwatch.conf,不过这个配置文件是空的,需要把模板配置文件复制过来。命令如下:
1 | cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf |
这个配置文件的内容中绝大多数是注释,我们把注释去掉,那么这个配置文件的内容如下所示
1 | [root@localhost ~]# vi /etc/logwatch/conf/logwatch.conf |
这个配置文件基本不需要修改,它就会默认每天执行。它为什么会每天执行呢?logwatch 一旦安装,就会在 /etc/cron.daily/ 目录中建立“0logwatch”文件,用于在每天定时执行 logwatch 命令,分析和监控相关日志。
如果想要让这个日志分析马上执行,则只需执行 logrotate 命令即可。命令如下:
之前创建又删除的用户backdoor可以监控到
日志清除
清除历史命令
1 | histroy -r #删除当前会话历史记录 |
完全删除日志文件(下面任意一个即可)
1 | cat /dev/null > filename |
删除当天日志
1 | sed -i '/当天日期/'d filename |
篡改日志
1 | 将所有170.170.64.17ip替换为127.0.0.1 |
日志一键清除脚本
1 | #!/usr/bin/bash |
参考(站在巨人的肩膀上登高望远):
https://mp.weixin.qq.com/s/fWlux47luH_zvYpXcZXeYA
https://mp.weixin.qq.com/s/SWMWVezAVzykkjTuRRDxJw
https://mp.weixin.qq.com/s/TlCyifwRrzKFx7jJkJlF_A
https://mp.weixin.qq.com/s/dDErpPwEw3ZiN4LlkaWO0Q
https://mp.weixin.qq.com/s/vy8hoALDiQdN16iRFawAZQ
https://www.cnblogs.com/llife/p/11478952.html
https://mp.weixin.qq.com/s/14R7VS9eSD3cNNNpRlR3bg
http://www.found5.com/view/1010.html
https://mp.weixin.qq.com/s/YHo4YSSF4BQ6Yrd3O3IrqA
- 本文作者: ordar
- 本文链接: https://mrwq.github.io/Linux日志总结/
- 版权声明: 本文作者: ordar123 转载请注明出处!