介绍
Lynis是一个基于主机的开源安全审核应用程序,可以评估Linux和其他类UNIX操作系统的安全性和姿势。
在本教程中,您将安装Lynis并使用它来对您的Ubuntu 16.04服务器进行安全审核。 然后,您将探索样本审核的结果,并配置Lynis跳过与您的需求无关的测试。
Lynis不会自动执行任何系统加固。 但它会提供建议,告诉你如何自己加固系统。 因此,如果您有对Linux系统安全性的基础知识,这将是有帮助的。 您还应该熟悉计划审核的计算机上运行的服务,例如Web服务器,数据库和Lynis可能默认扫描的其他服务。 这将帮助您识别可以安全忽略的结果。
注意 :执行安全审核需要时间和耐心。 您可能想在安装Lynis之前花时间阅读整篇文章,并使用它来审核您的服务器。
先决条件
要完成这篇文章,您需要:
- 一个Ubuntu 16.04服务器,配置了具有sudo权限的非root用户和防火墙,如使用Ubuntu 16.04初始服务器设置教程所示。
第1步 - 在您的服务器上安装Lynis
有几种方法可以安装Lynis。 您可以从源代码编译,下载并将二进制文件复制到系统上的相应位置,也可以使用程序包管理器进行安装。 使用包管理器是安装Lynis并保持更新的简单方法,因此这是我们将要使用的方法。
但是,在Ubuntu 16.04中,存储库中提供的版本不是最新版本。 为了访问最新的功能,我们将从项目的官方存储库安装Lynis。
Lynis的软件库使用HTTPS协议,因此我们需要确保安装了包管理器的HTTPS支持。 使用以下命令检查:
dpkg -s apt-transport-https | grep -i status
如果已安装,该命令的输出应为:
OutputStatus: install ok installed
如果输出表示没有安装,请使用sudo apt-get install apt-transport-https
随着现在安装的依赖关系,我们将安装Lynis。 要开始该过程,请添加存储库的密钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F
您将看到以下输出,表明密钥已成功添加:
OutputExecuting: /tmp/tmp.AnVzwb6Mq8/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
C80E383C3DE9F082E01391A0366C67DE91CA5D5F
gpg: requesting key 91CA5D5F from hkp server keyserver.ubuntu.com
gpg: key 91CA5D5F: public key "CISOfy Software (signed software packages) <software@cisofy.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
然后将Lynis存储库添加到包管理器可用的列表中:
sudo add-apt-repository "deb [arch=amd64] https://packages.cisofy.com/community/lynis/deb/ xenial main"
要使新添加的存储库中的软件包可用于系统,请更新软件包数据库:
sudo apt-get update
最后安装Lynis:
sudo apt-get install lynis
安装完成后,您应该可以访问lynis
命令及其子命令。 接下来我们来看看如何使用Lynis。
第2步 - 执行审计
安装完成后,您现在可以使用Lynis执行系统的安全审核。 我们先来看看您可以与Lynis一起执行的操作列表。 执行以下命令:
lynis show commands
您将看到以下输出:
Output
Commands:
lynis audit
lynis configure
lynis show
lynis update
lynis upload-only
使用配置文件可以实现Lynis的审核,这些配置文件就像配置文件一样,可以控制Lynis如何进行审核。 查看默认配置文件的设置:
lynis show settings
您会看到如下所示的输出:
Output# Colored screen output
colors=1
# Compressed uploads
compressed-uploads=0
# Use non-zero exit code if one or more warnings were found
error-on-warnings=0
...
# Upload server (ip or hostname)
upload-server=[not configured]
# Data upload after scanning
upload=no
# Verbose output
verbose=0
# Add --brief to hide descriptions, --configured-only to show configured items only, or --nocolors to remove colors
在执行审核之前,验证新版本是否可用,总是一个好主意。 这样,您将获得最新的建议和信息。 发出以下命令来检查更新:
lynis update info
输出应该类似于以下内容,这表明Lynis的版本是最新的:
Output == Lynis ==
Version : 2.4.8
Status : Up-to-date
Release date : 2017-03-29
Update location : https://cisofy.com/lynis/
2007-2017, CISOfy - https://cisofy.com/lynis/
或者,您可以键入lynis update check
,生成以下单行输出:
Outputstatus=up-to-date
如果版本需要更新,请使用您的软件包管理器来执行更新。
要运行对系统的审核,请使用lynis audit system
命令。 您可以运行Lynis在特权和非特权(最优)的模式。 在后一种模式下,会跳过一些需要root权限的测试。 因此,您应该使用sudo
以特权模式运行审核。 执行此命令执行您的第一次审核:
sudo lynis audit system
经过验证,Lynis将运行测试并将结果流式传输到您的屏幕。 Lynis审核通常需要一分钟或更短时间。
当Lynis进行审计时,它将通过一系列测试,分为几类。 每次审核后,将测试结果,调试信息和加固系统建议写入标准输出(屏幕)。 更详细的信息记录到/var/log/lynis.log
,而报告数据保存到/var/log/lynis-report.dat
。 报告数据包含有关服务器和应用程序本身的一般信息,因此您需要注意的文件是日志文件。 日志文件在每次审核时被清除(覆盖),因此以前审核的结果不会被保存。
审核完成后,您将查看结果,警告和建议,然后执行任何相关建议。
我们来看看用于编写本教程的机器上执行的Lynis审计的结果。 您在审核中看到的结果可能不同,但您仍然可以遵循。
Lynis审计产出的第一个重要部分是纯粹的信息。 它告诉你每个测试的结果,按类别分组。 信息采用关键字的形式,如NONE , WEAK , DONE , FOUND , NOT_FOUND , OK和WARNING 。
Output[+] Boot and services
------------------------------------
- Service Manager [ systemd ]
- Checking UEFI boot [ DISABLED ]
- Checking presence GRUB [ OK ]
- Checking presence GRUB2 [ FOUND ]
- Checking for password protection [ WARNING ]
..
[+] File systems
------------------------------------
- Checking mount points
- Checking /home mount point [ SUGGESTION ]
- Checking /tmp mount point [ SUGGESTION ]
- Checking /var mount point [ OK ]
- Query swap partitions (fstab) [ NONE ]
- Testing swap partitions [ OK ]
- Testing /proc mount (hidepid) [ SUGGESTION ]
- Checking for old files in /tmp [ OK ]
- Checking /tmp sticky bit [ OK ]
- ACL support root file system [ ENABLED ]
- Mount options of / [ OK ]
- Checking Locate database [ FOUND ]
- Disable kernel support of some filesystems
- Discovered kernel modules: udf
...
[+] Hardening
------------------------------------
- Installed compiler(s) [ FOUND ]
- Installed malware scanner [ NOT FOUND ]
- Installed malware scanner [ NOT FOUND ]
...
[+] Printers and Spools
------------------------------------
- Checking cups daemon [ NOT FOUND ]
- Checking lp daemon [ NOT RUNNING ]
尽管Lynis在开箱即用的情况下执行了200多项测试,但并不是所有的服务器都是必需的。 你怎么知道哪些测试是必要的,哪些不是? 那就是一些关于什么应该或不应该在服务器上运行的知识。 例如,如果您检查典型的Lynis审核的结果部分,您将在打印机和Spools类别下找到两个测试:
Output[+] Printers and Spools
------------------------------------
- Checking cups daemon [ NOT FOUND ]
- Checking lp daemon [ NOT RUNNING ]
您是否在Ubuntu 16.04服务器上运行打印服务器? 除非您正在运行基于云的打印服务器,否则您不需要Lynis每次都会运行该测试。
虽然这是一个测试的完美例子,但您可以跳过,其他的并不那么明显。 以此部分结果部分为例:
Output[+] Insecure services
------------------------------------
- Checking inetd status [ NOT ACTIVE ]
该输出表示inetd
不活动,但预计在Ubuntu 16.04服务器上,因为Ubuntu将inetd
替换为systemd
。 知道,您可以将该测试标记为Lynis不应该在您的服务器上进行审核的一部分。
当您检查每个测试结果时,您将看到一个很好的多余测试列表。 有了这个名单,那么您可以在未来的审核中自定义Lynis以忽略它们。 您将学习如何在第5步中完成。
在接下来的章节中,我们将介绍Lynis审计输出的不同部分,以便您更好地了解如何使用Lynis对系统进行正确的审核。 让我们来看看如何处理Lynis发布的警告。
第3步 - 修复Lynis审核警告
Lynis的审计输出并不总是带有警告部分,但如果是这样,您将会知道如何解决阅读本节后提出的问题。
警告列在结果部分之后。 每个警告从警告文本本身开始,测试在括号中的同一行生成警告。 下一行将包含一个建议的解决方案(如果存在)。 最后一行是安全控制URL,您可以在其中找到有关警告的一些指导。 不幸的是,URL并不总是提供解释,因此您可能需要进一步研究。
以下输出来自本文中使用的服务器上执行的Lynis审核的警告部分。 我们来看看每个警告,看看如何解决或修复它:
OutputWarnings (3):
----------------------------
! Version of Lynis is very old and should be updated [LYNIS]
https://cisofy.com/controls/LYNIS/
! Reboot of system is most likely needed [KRNL-5830]
- Solution : reboot
https://cisofy.com/controls/KRNL-5830/
! Found one or more vulnerable packages. [PKGS-7392]
https://cisofy.com/controls/PKGS-7392/
第一个警告说,Lynis需要更新。 这也意味着这个审核使用了Lynis的版本,所以结果可能不完整。 如果我们在运行结果之前执行了一个基本的版本检查,那么这可以避免,如第3步所示。这个修复很简单:更新Lynis。
第二个警告表示服务器需要重启。 这可能是因为最近执行了涉及内核升级的系统更新。 这里的解决方案是重启系统。
当对任何警告或任何测试结果有疑问时,您可以通过查询Lynis的测试ID来获取有关测试的更多信息。 完成的命令采取以下形式:
sudo lynis show details test-id
所以对于具有测试编号KRNL-5830的第二个警告,我们可以运行这个命令:
sudo lynis show details KRNL-5830
该特定测试的输出如下。 这让您了解Lynis为每次测试所执行的过程。 从这个输出,Lynis甚至提供了有关引起警告的项目的具体信息:
Output2017-03-21 01:50:03 Performing test ID KRNL-5830 (Checking if system is running on the latest installed kernel)
2017-03-21 01:50:04 Test: Checking presence /var/run/reboot-required.pkgs
2017-03-21 01:50:04 Result: file /var/run/reboot-required.pkgs exists
2017-03-21 01:50:04 Result: reboot is needed, related to 5 packages
2017-03-21 01:50:04 Package: 5
2017-03-21 01:50:04 Result: /boot exists, performing more tests from here
2017-03-21 01:50:04 Result: /boot/vmlinuz not on disk, trying to find /boot/vmlinuz*
2017-03-21 01:50:04 Result: using 4.4.0.64 as my kernel version (stripped)
2017-03-21 01:50:04 Result: found /boot/vmlinuz-4.4.0-64-generic
2017-03-21 01:50:04 Result: found /boot/vmlinuz-4.4.0-65-generic
2017-03-21 01:50:04 Result: found /boot/vmlinuz-4.4.0-66-generic
2017-03-21 01:50:04 Action: checking relevant kernels
2017-03-21 01:50:04 Output: 4.4.0.64 4.4.0.65 4.4.0.66
2017-03-21 01:50:04 Result: Found 4.4.0.64 (= our kernel)
2017-03-21 01:50:04 Result: found a kernel (4.4.0.65) later than running one (4.4.0.64)
2017-03-21 01:50:04 Result: Found 4.4.0.65
2017-03-21 01:50:04 Result: found a kernel (4.4.0.66) later than running one (4.4.0.64)
2017-03-21 01:50:04 Result: Found 4.4.0.66
2017-03-21 01:50:04 Warning: Reboot of system is most likely needed [test:KRNL-5830] [details:] [solution:text:reboot]
2017-03-21 01:50:04 Hardening: assigned partial number of hardening points (0 of 5). Currently having 7 points (out of 14)
2017-03-21 01:50:04 Checking permissions of /usr/share/lynis/include/tests_memory_processes
2017-03-21 01:50:04 File permissions are OK
2017-03-21 01:50:04 ===---------------------------------------------------------------===
对于第三个警告, PKGS-7392是关于易受攻击的软件包,我们将运行以下命令:
sudo lynis show details PKGS-7392
输出为我们提供了有关需要更新的软件包的更多信息:
Output2017-03-21 01:39:53 Performing test ID PKGS-7392 (Check for Debian/Ubuntu security updates)
2017-03-21 01:39:53 Action: updating repository with apt-get
2017-03-21 01:40:03 Result: apt-get finished
2017-03-21 01:40:03 Test: Checking if /usr/lib/update-notifier/apt-check exists
2017-03-21 01:40:03 Result: found /usr/lib/update-notifier/apt-check
2017-03-21 01:40:03 Test: checking if any of the updates contain security updates
2017-03-21 01:40:04 Result: found 7 security updates via apt-check
2017-03-21 01:40:04 Hardening: assigned partial number of hardening points (0 of 25). Currently having 96 points (out of 149)
2017-03-21 01:40:05 Result: found vulnerable package(s) via apt-get (-security channel)
2017-03-21 01:40:05 Found vulnerable package: libc-bin
2017-03-21 01:40:05 Found vulnerable package: libc-dev-bin
2017-03-21 01:40:05 Found vulnerable package: libc6
2017-03-21 01:40:05 Found vulnerable package: libc6-dev
2017-03-21 01:40:05 Found vulnerable package: libfreetype6
2017-03-21 01:40:05 Found vulnerable package: locales
2017-03-21 01:40:05 Found vulnerable package: multiarch-support
2017-03-21 01:40:05 Warning: Found one or more vulnerable packages. [test:PKGS-7392] [details:-] [solution:-]
2017-03-21 01:40:05 Suggestion: Update your system with apt-get update, apt-get upgrade, apt-get dist-upgrade and/or unattended-upgrades [test:PKGS-7392] [details:-] [solution:-]
2017-03-21 01:40:05 ===---------------------------------------------------------------===
解决方案是更新软件包数据库并更新系统。
修复导致警告的项目后,应再次运行审核。 随后的审核应该没有相同的警告,尽管可能会出现新的警告。 在这种情况下,请重复此步骤中显示的过程并修复警告。
现在,您已经知道如何阅读和修复Lynis生成的警告,我们来看看如何实现Lynis提供的建议。
第4步 - 实施Lynis审核建议
在警告部分之后,您将看到一系列建议,如果实施,可以使您的服务器不易受到攻击和恶意软件的攻击。 在这一步中,您将学习如何在审核测试Ubuntu 16.04服务器之后实施Lynis生成的一些建议。 执行此操作的过程与上一节中的步骤完全相同。
具体建议从建议本身开始,其次是测试ID。 然后,根据测试,下一行将告诉您在受影响的服务的配置文件中所做的更改。 最后一行是一个安全控制URL,您可以在其中找到有关该主题的更多信息。
例如,这是Lynis审核的部分建议部分,显示与SSH服务有关的建议:
OutputSuggestions (36):
----------------------------
* Consider hardening SSH configuration [SSH-7408]
- Details : ClientAliveCountMax (3 --> 2)
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408]
- Details : PermitRootLogin (YES --> NO)
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408]
- Details : Port (22 --> )
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408]
- Details : TCPKeepAlive (YES --> NO)
https://cisofy.com/controls/SSH-7408/
* Consider hardening SSH configuration [SSH-7408]
- Details : UsePrivilegeSeparation (YES --> SANDBOX)
https://cisofy.com/controls/SSH-7408/
...
根据您的环境,所有这些建议都可以安全实施。 然而,为了做出这样的决定,你必须知道每个指令的含义。 因为这些属于SSH服务器,所以必须在SSH守护程序配置文件/etc/ssh/sshd_config
中进行所有更改。 如果您对Lynis提供的关于SSH的任何建议有任何疑问,请使用man sshd_config
查找该man sshd_config
。 该信息也可以在线获得 。
其中一个建议要求从22
更改默认SSH端口。 如果进行了更改,并且配置了防火墙,请确保通过该新端口插入SSH访问规则。
与警告部分一样,您可以通过使用sudo lynis show details test-id
查询Lynis的测试ID来获取有关建议的更多详细sudo lynis show details test-id
。
其他建议要求您在服务器上安装其他软件。 拿这个,例如:
Output* Harden the system by installing at least one malware scanner, to perform periodic file system scans [HRDN-7230]
- Solution : Install a tool like rkhunter, chkrootkit, OSSEC
https://cisofy.com/controls/HRDN-7230/
建议安装rkhunter
, chkrootkit
或OSSEC以满足加固测试(HRDN-7230)。 OSSEC是一个基于主机的入侵检测系统,可以生成和发送警报。 这是一个非常好的安全应用程序,将有助于Lynis进行的一些测试。 您可以在这些DigitalOcean教程中了解有关此工具的更多信息。 但是,单独安装OSSEC并不会导致特定的测试通过。 安装chkrootkit
终于让它chkrootkit
。 这是另一种情况,您有时需要进一步研究Lynis的建议。
我们来看另一个例子。 这是一个文件完整性测试结果显示的建议。
Output* Install a file integrity tool to monitor changes to critical and sensitive files [FINT-4350]
https://cisofy.com/controls/FINT-4350/
安全控制URL中提供的建议没有提到前面提到的OSSEC程序,但是安装它后,可以对后续的审核进行测试。 这是因为OSSEC是一个非常好的文件完整性监控工具。
您可以忽略一些不适用于您的建议。 以下是一个例子:
Output* To decrease the impact of a full /home file system, place /home on a separated partition [FILE-6310]
https://cisofy.com/controls/FILE-6310/
* To decrease the impact of a full /tmp file system, place /tmp on a separated partition [FILE-6310]
https://cisofy.com/controls/FILE-6310/
历史上,像/home
, /tmp
, /var
和/usr
这样的核心Linux文件系统安装在单独的分区上,以尽量减少在整个服务器耗尽磁盘空间时的影响。 这不是你经常看到的,特别是在云服务器上。 这些文件系统现在只是作为一个目录安装在同一根分区上。 但是,如果您对这样一个系统进行了Lynis的审核,那么您会收到上述输出中显示的几个建议。 除非您能够实施这些建议,否则您可能会忽略它们并配置Lynis,以便使其生成的测试不会在未来的审核中执行。
使用Lynis进行安全审核不仅仅是修正警告和实施建议; 它还涉及识别多余的测试。 在下一步中,您将学习如何自定义默认配置文件以忽略此类测试。
第5步 - 定制Lynis安全审计
在本节中,您将学习如何自定义Lynis,以便它仅运行服务器所需的那些测试。 用于管理审计运行方式的配置文件在/etc/lynis
目录中的.prf
扩展名的文件中定义。 默认配置文件名为default.prf
。 您不直接编辑该默认配置文件。 相反,您可以将与custom.prf
文件相关的任何更改添加到与custom.prf
文件定义相同的目录中。
使用您的文本编辑器创建一个名为/etc/lynis/custom.prf
的新文件:
sudo nano /etc/lynis/custom.prf
让我们用这个文件告诉Lynis跳过一些测试。 以下是我们要跳过的测试:
- FILE-6310 :用于检查分区的分离。
- HTTP-6622 :用于测试Nginx Web服务器的安装。
- HTTP-6702 :用于检查Apache Web服务器的安装。 此测试和上述的Nginx测试默认执行。 所以如果你已经安装了Nginx而不是Apache,那么你将要跳过Apache测试。
- PRNT-2307和PRNT-2308 :用于检查打印服务器。
- TOOL-5002 :用于检查Puppet和盐等自动化工具。 如果您的服务器上不需要这样的工具,可以跳过此测试。
- SSH-7408:tcpkeepalive :几个Lynis测试可以分组在单个测试ID下。 如果您希望跳过该测试ID中的测试,那么这是如何指定的。
要忽略测试,您可以将skip-test指令传递给您要忽略的测试ID,每行一个。 将以下代码添加到您的文件中:
# Lines starting with "#" are comments
# Skip a test (one per line)
# This will ignore separation of partitions test
skip-test=FILE-6310
# Is Nginx installed?
skip-test=HTTP-6622
# Is Apache installed?
skip-test=HTTP-6702
# Skip checking print-related services
skip-test=PRNT-2307
skip-test=PRNT-2308
# If a test id includes more than one test use this form to ignore a particular test
skip-test=SSH-7408:tcpkeepalive
保存并关闭文件。
下次执行审核时,Lynis将跳过与您在自定义配置文件中配置的测试ID相匹配的测试。 测试将从审核输出的结果部分以及建议部分中省略。
/etc/lynis/custom.prf
文件还允许您修改配置文件中的任何设置。 为此,请将设置从/etc/lynis/default.prf
复制到/etc/lynis/custom.prf
并在其中进行修改。 您很少需要修改这些设置,因此请您集中精力查找可以跳过的测试。
接下来,我们来看看Lynis所说的加固指数 。
第6步 - 解读加固指数
在每个Lynis审核输出的下方部分,就在建议部分的下方,您会看到如下部分:
OutputLynis security scan details:
Hardening index : 64 [############ ]
Tests performed : 206
Plugins enabled : 0
此输出告诉您执行了多少测试,以及强化指数 ,Lynis提供的数字可让您了解您的服务器的安全性。 这个数字是Lynis唯一的。 加固指数将与您修复的警告和实施的建议相关。 该输出显示,系统加固指数为64,来自于新一代Ubuntu 16.04服务器上的Lynis审核。
在修改警告并实施大部分建议后,新的审核提供以下输出。 你可以看到加固指数略高:
OutputLynis security scan details:
Hardening index : 86 [################# ]
Tests performed : 205
Plugins enabled : 0
加固指数不能准确地评估服务器的安全性,而只是衡量服务器基于Lynis执行的测试进行安全配置(或加固)的程度。 正如你所看到的,索引越高越好。 Lynis安全审计的目标不仅仅是获得高加固指标,而且还要解决其产生的警告和建议。
结论
在本教程中,您安装了Lynis,用于对Ubuntu 16.04服务器执行安全审核,探讨了如何修复其生成的警告和建议,以及如何自定义Lynis执行的测试。
这需要一些额外的时间和精力,但是值得投资,使您的机器更安全,而Lynis使这一过程更容易。
有关Lynis的更多信息,请查看Lynis的入门指南 。 Lynis是一个开源项目,所以如果您有兴趣参与,请访问项目的GitHub页面 。