如何阅读 Lynis 报告以提升 Linux 安全性

使用 Lynis 的扫描和报告来查找并修复 Linux 安全问题。
63 位读者喜欢这篇文章。
Lock

JanBaby,通过 Pixabay CC0。

当我阅读 Gaurav Kamathe 的文章使用 Lynis 扫描您的 Linux 安全性时,它让我想起了我在美国劳工部担任系统管理员的时光。我的职责之一是保持我们的 Unix 服务器的加固。每个季度,都会有一位独立的验证员来审查我们服务器的安全状态。每次在验证员计划到达的那天,我都会运行 Security Readiness Review (SRR),这是一个扫描工具,它使用大量的脚本来识别和报告任何安全发现。SRR 是开源的,所以我可以查看所有源代码脚本及其功能。这使我能够查看代码,确定具体哪里出了问题,并快速修复它发现的每个问题。

什么是 Lynis?

Lynis 是一个开源的安全审计工具,其工作方式很像 SRR,通过扫描 Linux 系统并提供关于其发现的任何弱点的详细报告。与 SRR 一样,它也是由大量的脚本组成,每个脚本检查一个特定的项目,例如,最小和最大密码年龄要求。

运行 Lynis 后,您可以使用其报告来定位每个项目的脚本,并准确了解 Lynis 如何检查和报告每个问题。您还可以使用相同的脚本代码来创建新的代码以自动化解决方案。

如何阅读 Lynis 报告

由于 Gaurav 的文章涵盖了 Lynis 的安装和使用,在本文中,我将展示一些关于如何阅读和使用其报告的示例。

开始之前,运行一次审计

# lynis audit system --quick

完成后,完整报告将显示在您的屏幕上。在底部附近的 建议 部分列出了所有可能需要分类以更好地加固系统的项目,以及每个项目的 TEST-ID。

为了加固系统并缩小列表的规模,开始追查每个项目。建议 部分的描述可能就是您需要知道的采取什么行动的全部内容。如果不够,您可以使用 show details 命令

# lynis show details TEST-ID

例如,我的系统上的建议之一是

找不到 locate 所需的数据库。运行 updatedblocate.updatedb 以创建此文件。[FILE-6410]

看起来我只需要运行命令 updatedb,但如果我想确保,我可以使用 Lynis 的 show details 选项

# lynis show details FILE-6410
2020-06-16 20:54:33 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 20:54:33 Test: Checking locate database
2020-06-16 20:54:33 Result: file /var/lib/mlocate/mlocate.db not found
2020-06-16 20:54:33 Result: file /var/lib/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/locatedb not found
2020-06-16 20:54:33 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 20:54:33 Result: file /var/cache/locate/locatedb not found
2020-06-16 20:54:33 Result: file /var/db/locate.database not found
2020-06-16 20:54:33 Result: database not found
2020-06-16 20:54:33 Suggestion: The database required for 'locate' could not be found. Run 'updatedb' or 'locate.updatedb' to create this file. [test:FILE-6410] [details:-] [solution:-]
2020-06-16 20:54:33 ====

这些详细信息表明 Lynis 无法找到各种文件。这种情况非常明确。我可以运行 updatedb 命令并重新检查此测试

# updatedb
# lynis --tests FILE-6410

此外,重新检查详细信息会显示它找到的满足测试的文件

# lynis show details FILE-6410 
2020-06-16 21:38:40 Performing test ID FILE-6410 (Checking Locate database)
2020-06-16 21:38:40 Test: Checking locate database
2020-06-16 21:38:40 Result: locate database found (/var/lib/mlocate/mlocate.db)
2020-06-16 21:38:40 Result: file /var/lib/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/locatedb not found
2020-06-16 21:38:40 Result: file /var/lib/slocate/slocate.db not found
2020-06-16 21:38:40 Result: file /var/cache/locate/locatedb not found
2020-06-16 21:38:40 Result: file /var/db/locate.database not found
2020-06-16 21:38:40 ====

深入探究

Lynis 的许多建议并不像这个建议那样直接。如果您不确定某个发现或建议指的是什么,可能很难知道如何解决问题。假设您针对一台新的 Linux 服务器运行 Lynis,并且有几个项目与安全外壳 (SSH) 守护程序有关,其中一个项目指的是 MaxAuthTries 设置

* Consider hardening SSH configuration [SSH-7408] 
    - Details  : MaxAuthTries (6 --> 3)
      https://cisofy.com/lynis/controls/SSH-7408/

要解决这个问题,您需要知道 SSH 配置文件的位置。经验丰富的 Linux 管理员可能已经知道在哪里找到它们,但如果您不知道,有一种方法可以查看 Lynis 在哪里找到它们的。

定位 Lynis 测试脚本

Lynis 支持许多操作系统;因此,您的安装位置可能会有所不同。在 Red Hat Enterprise Linux 或 Fedora Linux 系统上,使用 rpm 来查找测试文件

# rpm -ql lynis

这将列出所有测试文件并报告它们在 lynis/include 目录中的位置。在此目录中搜索您想了解的 TEST-ID(在本例中为 SSH-7408)

# grep SSH-7408 /usr/share/lynis/include/*
/usr/share/lynis/include/tests_ssh:    # Test        : SSH-7408

查找 SSH 问题

名为 tests_ssh 的文件包含 TEST-ID,您可以在这里找到与 SSH 相关的扫描功能。查看此文件以了解 Lynis 扫描器调用的各种功能。第一部分定义了变量 SSH_DAEMON_CONFIG_LOCS 中的目录列表。接下来的几个部分负责检查 SSH 守护程序状态、定位其配置文件以及识别其版本。我在“确定 SSH 守护程序配置文件位置”的测试 SSH-7404 部分找到了查找配置文件的代码。这段代码包含一个 for 循环,它在列表中搜索名为 sshd_config 的文件。我可以使用这个逻辑来执行我自己的搜索

# find /etc /etc/ssh /usr/local/etc/ssh /opt/csw/etc/ssh -name sshd_config
/etc/ssh/sshd_config
/etc/ssh/sshd_config
find: ‘/usr/local/etc/ssh’: No such file or directory
find: ‘/opt/csw/etc/ssh’: No such file or directory

进一步探索此文件会揭示与查找 SSH-7408 相关的代码。此测试涵盖 MaxAuthTries 和其他几个设置。现在我可以在 SSH 配置文件中找到该变量

# grep MaxAuthTries /etc/ssh/sshd_config
#MaxAuthTries 6

Lynis 还报告了一个与您登录系统时显示的法律横幅相关的发现。在我的家用桌面系统上(我不期望有很多人登录),我没有费心更改默认的 issue 文件。公司或政府系统很可能需要包含法律横幅,以警告用户他们的登录和活动可能会被记录和监控。Lynis 使用测试 BANN-7126 和 BANN-7130 报告这一点

* Add a legal banner to /etc/issue, to warn unauthorized users [BANN-7126] 
      https://cisofy.com/lynis/controls/BANN-7126/

* Add legal banner to /etc/issue.net, to warn unauthorized users [BANN-7130] 
      https://cisofy.com/lynis/controls/BANN-7130/

我在运行 Fedora 32 Workstation 的系统上没有找到太多内容

# cat /etc/issue /etc/issue.net
\S
Kernel \r on an \m (\l)

\S
Kernel \r on an \m (\l)

我可以添加类似“禁止入内”或“不要破坏任何东西”的内容,但测试的描述没有提供足够的信息来解决问题,所以我再次查看了 Lynis 脚本。我注意到 include 目录包含一个名为 tests_banners 的文件;这似乎是一个不错的查找位置。在 grep 的帮助下,我看到了相关的测试

# grep -E 'BANN-7126|BANN-7130' /usr/share/lynis/include/tests_banners
    # Test        : BANN-7126
    Register --test-no BANN-7126 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue banner file contents"
    # Test        : BANN-7130
    Register --test-no BANN-7130 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check issue.net banner file contents"

在检查了文件中与测试相关的代码后,我发现这两个测试都在使用 for 循环迭代一些预定义的法律术语

for ITEM in ${LEGAL_BANNER_STRINGS}; do

这些法律术语存储在文件顶部定义的变量 LEGAL_BANNER_STRINGS 中。滚动回顶部会显示完整列表

LEGAL_BANNER_STRINGS="audit access authori condition connect consent continu criminal enforce evidence forbidden intrusion law legal legislat log monitor owner penal policy policies privacy private prohibited record restricted secure subject system terms warning"

我最初的建议(“禁止入内”和“不要破坏任何东西”)不会满足测试,因为它们不包含此列表中的任何单词。

此横幅消息包含多个必需的词语,因此,它将满足此测试并防止 Lynis 报告它

注意:继续连接到此系统,即表示您同意所有者存储所有活动的日志。禁止未经授权的访问。

请注意,此消息必须同时添加到 /etc/issue/etc/issue.net

使其可重复

您可以手动进行这些编辑,但您可能反而想要考虑自动化。例如,可能有很多设置需要更改,或者您可能需要在许多服务器上定期进行这些编辑。创建加固脚本将是简化此过程的好方法。对于 SSH 配置,您的加固脚本中的一些 sed 命令将解决这些发现。或者,您可以使用 echo 语句来添加法律横幅

sed -i '/MaxAuthTries/s/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config

echo "Legal Banner" | tee -a /etc/issue /etc/issue.net

自动化使您能够创建可重复的脚本,该脚本可以保存并在您的基础设施中进行管理。您还可以将此脚本纳入您的初始服务器配置中。

加固您的系统

这种类型的练习可以通过跟随现有代码和编写自己的脚本来提高您的脚本编写技能。由于它是开源的,Lynis 可以轻松地了解您的系统是如何被检查的,以及其报告的含义。最终结果将是一个良好加固的系统,您可以随时向那些审计员展示。

下一步阅读

Linux 防火墙入门

防火墙是您的计算机抵御网络入侵的第一道防线。下载我们的速查表以确保您的安全。

(团队成员,Red Hat)
2020 年 2 月 28 日
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一名增值经销商,之后转入系统工程领域。Alan 的背景是高可用性集群应用。他撰写了 Oracle Press/McGraw Hill 出版的《Oracle Solaris 11 系统管理》一书中的“用户和组”以及“Apache 和 Web 堆栈”章节。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.