在Linux系统中,/var/log/secure 和 /var/log/messages 是两个非常重要的日志文件,用于记录系统和安全相关的事件。如果你正在进行应急响应或排查潜在的安全问题,这两个日志文件是很好的起点。
/var/log/secure
这个日志文件记录了与安全相关的所有事件,比如SSH登录尝试、sudo命令的使用、以及其他与安全相关的服务的日志信息。
/var/log/messages
这个日志文件记录了系统的一般信息和错误消息,包括内核产生的消息、启动脚本消息以及其他系统守护进程的消息。
如何排查日志
使用tail查看最新的日志条目:
tail /var/log/secure tail /var/log/messages
这会显示每个文件的最后10行内容。你可以通过-f参数来实时跟踪新的日志条目。
使用grep搜索特定的关键词:
grep 'sshd' /var/log/secure grep 'error' /var/log/messages
这会搜索与SSH守护进程相关的条目,或者在messages日志中搜索包含“error”的行。
使用awk、sed或cut等工具来处理日志文件,以便提取你感兴趣的字段。
如何解读字段
日志文件中的每一行通常都会包含以下字段:
日期和时间:记录事件发生的日期和时间。 主机名:记录事件发生的主机。 服务名/进程名:产生该日志条目的服务或进程。
PID:产生该日志条目的进程ID。 日志信息:具体的日志消息,可能包含状态、错误代码、用户信息等。 如何判断正常与异常
了解正常行为:你需要知道系统在正常情况下的行为模式,这样才能识别出异常行为。比如,一个用户在非工作时间登录可能就是一个异常。搜索异常模式:比如多次登录失败、不寻常的网络连接尝试、异常的系统错误信息等。
关注安全警告和错误:任何类型的安全警告或错误都应该被认真对待,特别是那些指示潜在入侵的。
使用日志管理工具:有些工具可以帮助你分析日志文件,比如Logwatch、Swatch或者商业的SIEM系统,它们可以自动化这个过程并提供更容易理解的输出。
上下文:单独的日志条目可能看起来正常,但如果你考虑到上下文(比如与其他日志条目的关系),它可能就显得异常了。
比较历史数据:与历史日志数据比较,看看是否有不同寻常的模式或变化。
记住,排查日志是一个需要细致观察和经验的过程。随着时间的推移,你会对系统的正常行为和潜在的异常行为有更好的理解。
举例
给出这些常见的日志例子以及各个字段的含义,比如SSH登录尝试、sudo命令、错误消息、启动脚本消息等等,一定要详细,覆盖常见的应急日志排查项
当然,让我们来看一些常见的日志示例,并解释其中的字段含义。
SSH登录尝试
日志示例:
Feb 10 10:15:01 server sshd[19518]: Failed password for root from 192.168.1.1 port 22 ssh2
字段解释:
Feb 10 10:15:01 - 日期和时间戳,表示事件发生的时间。 server - 主机名,表示事件发生的服务器。 sshd[19518] - 服务名和进程ID,这里sshd是SSH守护进程,19518是它的进程ID。 Failed password for root - 日志消息,表示有一个失败的密码尝试用于root用户。 from 192.168.1.1 - 表示尝试登录的来源IP地址。 port 22 - 尝试连接的端口号,SSH默认是22。 ssh2 - 使用的SSH协议版本。
sudo命令使用
日志示例:
Feb 10 10:20:30 server sudo: jdoe : TTY=pts/1 ; PWD=/home/jdoe ; USER=root ; COMMAND=/bin/cat /etc/passwd
字段解释:
Feb 10 10:20:30 - 日期和时间戳。 server - 主机名。 sudo - 表示这个日志条目与sudo命令有关。 jdoe - 执行sudo命令的用户。 TTY=pts/1 - 用户登录的终端。 PWD=/home/jdoe - 用户执行命令时的当前工作目录。 USER=root - sudo命令试图以哪个用户的身份执行。 COMMAND=/bin/cat /etc/passwd - 实际执行的命令。
系统错误消息
日志示例:
Feb 10 10:30:45 server kernel: [ 561.442198] Out of memory: Kill process 12345 (java) score 180 or sacrifice child
字段解释:
Feb 10 10:30:45 - 日期和时间戳。 server - 主机名。 kernel - 表示这是一个来自内核的消息。 [ 561.442198] - 时间戳,表示自系统启动以来的时间(单位为秒)。 Out of memory - 错误消息,表示系统内存不足。 Kill process 12345 (java) - 系统决定终止的进程ID和名称。 score 180 - OOM评分,越高表示进程越有可能被杀死释放内存。 or sacrifice child - 表示系统可能会选择杀死子进程来回收内存。
启动脚本消息
日志示例:
Feb 10 10:35:00 server systemd[1]: Started Session 1234 of user jdoe.
字段解释:
Feb 10 10:35:00 - 日期和时间戳。 server - 主机名。 systemd[1] - 服务名和进程ID,这里systemd是系统守护进程,1通常是它的进程ID。 Started Session 1234 - 日志消息,表示启动了一个新的会话。 of user jdoe - 会话所属的用户。
安全警告
日志示例:
Feb 10 10:40:15 server sshd[19518]: Received disconnect from 192.168.1.1 port 22:11: Bye Bye [preauth]
字段解释:
Feb 10 10:40:15 - 日期和时间戳。 server - 主机名。 sshd[19518] - 服务名和进程ID。 Received disconnect from 192.168.1.1 - 表示从特定IP地址收到了断开连接的请求。 port 22:11 - 断开连接的端口号和原因代码。 Bye Bye [preauth] - 断开连接前的最后消息,[preauth]表示这发生在认证之前。
在审查这些日志时,你应该注意任何不寻常的模式,如非工作时间的登录尝试、频繁的失败认证、不寻常的命令执行等。这些可能是安全事件或系统问题的迹象。通过对比正常行为和异常行为,你可以确定是否需要进一步的调查或采取行动。