Lynis是一个基于主机的、开源的安全审计应用程序,它可以评估安全性配置文件、Linux和其他类UNIX操作系统的安全态势。在本教程中,你将学会安装Lynis,并用它在一台Ubuntu 16.04服务器上执行安全审计。然后,你将会探究一个审计样本的结果,并通过配置Lynis来忽略那些与你的需求所不相关的各种测试。
Lynis不会自动执行任何系统的加固,但它能提供一些建议,以向你展示如何去自行加固系统。因此, 如果你有Linux系统安全方面的基本知识的话,它将对你很有帮助。你还应该对你所计划执行审计的机器上的那些正在运行服务有所熟悉,例如各种web服务器、数据库和其他Lynis可能会默认扫描到的服务。这将有助于你去识别出那些能够被安全地忽略掉的结果。
注意:执行安全审计是需要时间和耐心的。你可能需要在安装Lynis和用它来审计你的服务器之前,花上一些时间来仔细地阅读本文全部内容。
先决条件
为了吃透本文,你需要有:一台Ubuntu 16.04服务器,并配置了一个具有sudo特权的非根用户和防火墙,你可以参考《用Ubuntu 16.04来初始化服务器的设置》教程来实现。
步骤1 在你的服务器上安装Lynis
安装Lynis可以有多种方法。你可以从源代码来编译它,下载并复制其二进制文件到系统上的一个适当的位置;或者你可以用包管理器来安装它。使用包管理器是安装并更新Lynis的最简便的方法,所以我们在此将使用该方法。
不过,在Ubuntu 16.04上,资源库里所提供的版本并非是最新的。为了获得其最新的特性,我们将从其项目的官方资源库来安装Lynis。
Lynis的软件资源库使用的是HTTPS协议,因此我们首先需要确保支持HTTPS的包管理器已被安装。你可以使用以下的命令来进行检查:
$ dpkg -s apt-transport-https | grep -i status
如果已安装,该命令的输出结果应该是:
Output
Status: install ok installed
如果输出结果显示未安装,则可用sudo apt-get install apt-transport-https来安装。
扫清并安装了这个唯一的依赖性之后,我们就可以来安装Lynis了。为了触发此过程,我们要添加库的键值:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F
你将能看到如下的输出结果,它表明键值已被添加成功:
Output
Executing: /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) " 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在审计时一般用到的是概要文件(profiles),它们就像配置文件一样通过设置来控制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