Linux 上的高级日志记录和审核
Linux 系统管理最重要的方面之一是设置关键和重要事件的日志记录,并定期审核服务器是否存在弱点或错误。由于 Linux 服务器通常是 24/7 开机的,管理员必须依靠日志记录和审核工具来帮助他们跟踪系统全天发生的情况。这些有用的工具可以收集和汇总大量数据,在发生关键事件时通知系统管理员,并识别趋势和潜在问题。
在本教程中,我们将介绍一些在 Linux 系统上进行高级日志记录和审核的技术。 Linux 默认内置了许多日志工具,但也有许多第三方系统监视器可以帮助我们提供其他功能,例如在服务器资源不堪重负时向 IT 管理员发送警报的能力。
在本教程中您将学习:
如何使用journald进行日志解析
基本 SELinux 和 AppArmor 命令和配置
什么是 ELK、Logwatch 和 logrotate
Linux 中的高级日志记录和审计技术
下面我们将介绍用于记录和审核 Linux 系统的各种工具和技术。其中一些工具是默认安装的,一些必须手动安装,还有一些是为特定的 Linux 发行版制作的。适合您的工具取决于您使用的 Linux 发行版以及您想要进行的日志记录和审核的深度。下面的一种或多种工具肯定会符合您的标准。
日志/rsyslog/系统日志
由于与 systemd 的集成,journald 现在在 Linux 系统中无处不在。当然,并非所有 Linux 发行版都使用 systemd,但绝大多数都这样做。 rsyslog 和 syslog 也是可行的日志记录工具,但我们在本节中将它们与journald放在一起,因为我们认为journald在许多情况下已经很大程度上取代了rsyslog和syslog。
注意
日志在具有不同 init 系统(例如 SysV init)的系统上不可用。在这些情况下,建议安装 rsyslog 或 syslog-ng 作为将所有内容收集到集中位置的通用日志记录工具。
Journald 的一些优势包括:
索引日志文件:查找特定事件比在 syslog 的纯文本文件中查找更快更容易
日志文件的访问控制:用户只能查看相关日志文件,root可以查看所有日志文件
日志过滤:根据时间或级别轻松查找事件(严重与警告等)
Journalctl 命令可用于查看 systemd 收集的所有日志。这包括与系统内核、initrd、各种服务和应用程序以及 systemd 本身相关的日志。 Journalctl 命令使查询所有这些日志变得非常轻松,因为 systemd 收集所有这些不同的日志并将其存储在一个中央位置以供管理员查看。
您还会发现 SELinux 和 AppArmor 等其他安全工具与 Journald 协同工作,因为它将存储这些其他工具生成的日志。掌握 Journald 和一些 journalctl
Linux 命令语法也将帮助您更加熟练地使用这些其他安全工具,并能够快速识别相关日志条目。
Journald 可以在很短的时间内记录数百万条条目,因此通常不建议单独运行
journalctl
命令。相反,您可以使用--since
和--until
选项来帮助您隔离在特定时间范围内记录的相关日志。例如,要查看自昨天以来的所有日志:$ journalctl --since yesterday
您还可以将这些选项结合使用。
$ journalctl --since yesterday --until "2 hours ago"
要查看为特定系统服务记录的条目,请使用
-u
标志。例如,要查看 Apache 记录的所有条目:$ journalctl -u apache2.service
要仅查看与内核相关的消息,请使用
-k
选项。$ journalctl -k
由于日志条目如此之多,因此仅查看具有特定优先级的日志条目会很有帮助。优先级最高为0级,最低为7级。日志级别如下:
0: emergency 1: alert 2: critical 3: error 4: warning 5: notice 6: info 7: debug
使用
-p
选项查看特定级别的日志,以及优先级高于该级别的日志。在此示例中,我们将采用级别 3,即标记为错误、严重、警报或紧急情况的任何条目。$ journalctl -p 3
更多信息:Systemd 期刊简介
SELinux
SELinux 代表安全增强型 Linux,是为 Linux 系统构建的额外安全控制层。 SELinux 的原始版本是由 NSA 开发的。其他主要贡献者包括 Red Hat,它在自己的 RHEL 及其衍生 Linux 发行版中默认启用了它。
SELinux(安全增强型Linux)是Linux 内核中强制访问控制权限系统(MAC)的实现。这种类型的访问控制与 ACL 和标准 Unix ugo/rwx 权限等自主访问控制系统 (DAC) 的不同之处在于如何提供对资源的访问。在 MAC 不是资源所有者的情况下,决定谁以及如何访问该资源的所有者:这种访问基于域和标签之间的关系,由策略决定并在内核级别强制执行。需要强调的是,SELinux 强制规则和标准系统权限并不是相互排斥的,前者是在后者之后实现的。
查看我们的其他教程,了解有关 SELinux 概念和管理的信息。这将向您展示如何将 SELinux 策略分配给进程和文件。
要检查 SELinux 的当前状态:
$ sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33
我们可以使用 ausearch 命令来搜索最近的 SELinux 日志条目。例如,要搜索访问向量缓存 (AVC) 消息(SELinux 在操作被拒绝时发出的消息),我们可以执行:
$ sudo ausearch -m AVC -ts today
注意:
-ts
选项是“时间戳”。另一个有效的参数是“最近”,用于查看过去 10 分钟的日志。要查看更多相关信息,请获取ausearch
的时间戳显示并搜索日志日志,如上一节所示。我们还可以使用
sealert
查看有关特定 SELinux 记录消息的更多信息。只需将log_id
替换为您要检查的日志的 ID 号:$ sudo sealert -l [log_ID]
应用装甲
AppArmor 是另一种类型的强制访问控制权限系统 (MAC),通常在 Ubuntu Linux 等发行版中实现。 AppArmor 的工作原理是为进程、网络端口、文件和用户分配“配置文件”。 AppArmor 允许用户审核并记录哪些实体正在尝试访问受限资源。
检查AppArmor的当前状态:
$ sudo apparmor_status
将配置文件置于
complain
模式(发出警告但不采取任何操作):$ sudo aa-complain /path/to/binary
将配置文件置于
enforce
模式(生成日志但也强制执行访问控制策略):$ sudo aa-enforce /path/to/binary
AppArmor 生成的所有日志消息都可以在
/var/log/dmesg
日志文件中查看。$ cat /var/log/dmesg | grep apparmor
正如前面所讨论的,使用journald(
journalctl
命令)来查看相关的AppArmor 日志条目更为常见和高效。
Elasticsearch、Logstash 和 Kibana (ELK)
ELK 是在 Linux 服务器上管理大量日志数据的答案。 ELK 堆栈结合了 Elasticsearch、Logstash 和 Kibana,这些开源工具协同工作,使您能够通过方便的图形 Web 界面管理日志数据。这三个工具由 Elastic 开发,专门设计用于协同工作。
ELK 通过 Web 界面为用户提供安全分析、性能指标、关键和重要事件日志以及其他有用数据。您可以安装本地 Apache 或 NGINX 服务器来呈现数据,然后从本地主机访问它。设置它是一个多步骤的过程,并且会因发行版而异,但以下是如何在 Ubuntu 上安装 ELK。
测井仪
Logwatch 的工作原理是允许管理员为特定文件设置日志解析,并为某些事件配置警报。这些警报可以通过电子邮件发送给管理员,因此您无需担心不断筛选日志文件或汇总数据以手动检查任何问题。
Logwatch 是一种简单的实现方式,非常适合不需要 ELK 等强大解决方案但仍需要一种方式来通知员工重要事件的中型服务器和基础设施。
对数旋转
Logrotate 本身并不是一个解决方案,而是与其他日志服务一起作为轮转和压缩日志文件的方法。它已经内置到 Linux 内核中,系统服务或第三方应用程序可以选择使用它。如果没有 logrotate 功能,日志文件的大小会变得非常笨重,并且当管理员实际需要在日志文件中达到峰值时,日志文件的用处也不是很大。 您可能会发现自己经常使用 logrotate,特别是如果您计划为各种不同的服务解析日志文件。绝对建议您熟悉 logrotate Linux 命令。
结束语
在本教程中,我们了解了 Linux 系统上的高级日志记录和审核技术。我们看到了journald是解析索引日志数据的最常见方法,并且journalctl
命令可用于查找相关条目。 SELinux 和 AppArmor 是两个主要的访问控制程序,在各种 Linux 发行版上实现。最后,ELK 和 Logwatch 使管理员能够掌握大量日志数据,以便跟踪关键事件并理解信息。