你有没有想过你的 ?Linux 机器安全不安全吗?Linux 有很多发行版本,每个发行版本都有自己的默认设置。你在后台运行了几十个不同版本的软件包和许多服务,我们几乎不知道或不关心这些。
要确定安全情况(指你的 Linux 运行在机器上的软件、网络和服务的整体安全状态),可以运行几个命令,获取一些零碎的相关信息,但需要分析的数据量巨大。
如果你能操作一个工具并生成一份关于机器安全的报告,那就好多了。幸运的是,有这样一个软件: Lynis 。它是一种非常流行的开源安全审计工具,可以帮助加强基于 Linux 和 Unix 系统。本项目介绍:
“它运行在系统本身,可以进行深入的安全扫描。主要目标是测试安全防御措施,并提供进一步强化系统的提示。它还将扫描一般系统信息、易受攻击的软件包和可能的配置问题。Lynis 经常被系统管理员和审计员用来评估其系统的安全防御。” |
安装 Lynis
你的 Linux 软件仓库可能是 Lynis。若有,可采用以下方法安装:
dnfinstalllynis或
aptinstalllynis但是,如果你的仓库版本不是最新的,你最好从 GitHub 安装在上面。(我用的是 Red Hat Linux 系统,但你可以在任何 Linux 在发行版上运行)。就像所有的工具一样,在虚拟机上尝试是有意义的。GitHub 安装在上面:
$cat/etc/redhat-releaseRedHatEnterpriseLinuxServerrelease7.8(Maipo)$$uname-r3.10.0-1127.el7.x86_64$$gitclonehttps://github.com/CISOfy/lynis.gitCloninginto'lynis'...remote:Enumeratingobjects:30,done.remote:Countingobjects:100%(30/30),done.remote:Compressingobjects:100%(30/30),done.remote:Total12566(delta15),reused8(delta0),pack-reused12536Receivingobjects:100%(12566/12566),6.36MiB|911.00KiB/s,done.Resolvingdeltas:100%(9264/9264),done.$一旦你克隆了这个版本库,进入目录,看看里面有什么可用的。主要工具是 lynis 文件中。它实际上是 shell 脚本,所以你可以打开它看看它在做什么。事实上,Lynis 主要用于 shell 脚本来实现的:
$cdlynis/$lsCHANGELOG.mdCONTRIBUTING.mddbdeveloper.prfFAQincludeLICENSElynis.8READMESECURITY.mdCODE_OF_CONDUCT.mdCONTRIBUTORS.mddefault.prfextrasHAPPY_USERS.mdINSTALLlynispluginsREADME.md$$filelynislynis:POSIXshellscript,ASCIItextexecutable,withverylonglines$运行 Lynis
通过给 Lynis 一个 -h 选项查看帮助部分,以便大致了解:
$./lynis-h你会看到一个简短的信息屏幕,然后是 Lynis 支持的所有子命令。
接下来,尝试一些大致熟悉的测试命令。检查你正在使用的 Lynis 版本,请操作:
$./lynisshowversion3.0.0$要查看 Lynis 所有可用命令:
$./lynisshowcommandsCommands:lynisauditlynisconfigurelynisgeneratelynisshowlynisupdatelynisupload-only$审计 Linux 系统
运行以下命令:
$./lynisauditsystem这个命令运行得很快,并返回一份详细的报告。输出结果一开始可能看起来很可怕,但我会引导你在下面阅读它。该命令的输出也将保存在日志文件中,因此您可以随时回顾任何可能感兴趣的东西。
Lynis 在这里保存日志:
Files:-Testanddebuginformation:/var/log/lynis.log-Reportdata:/var/log/lynis-report.dat您可以验证日志文件是否已创建。它确实创建了:
$ls-l/var/log/lynis.log-rw-r-----.1rootroot341489Apr3005:52/var/log/lynis.log$$ls-l/var/log/lynis-report.dat-rw-r-----.1rootroot638Apr3005:55/var/log/lynis-report.dat$探索报告
Lynis 提供了相当全面的报告,所以我将介绍一些重要的部分。作为初始化的一部分,Lynis 做的第一件事就是找出机器上操作系统的完整信息。然后检查是否安装了系统工具和插件:
[ ]Initializingprogram-------------------------------------DetectingOS...[DONE]-Checkingprofiles...[DONE]---------------------------------------------------Programversion:3.0.0Operatingsystem:LinuxOperatingsystemname:RedHatEnterpriseLinuxServer7.8(Maipo)Operatingsystemversion:7.8Kernelversion:3.10.0Hardwareplatform:x86_64Hostname:example---------------------------------------------------<<截断>>[ ]SystemTools-------------------------------------Scanningavailabletools...-Checkingsystembinaries...[ ]Plugins(phase1)------------------------------------Note:pluginshavemoreextensivetestsandmaytakeseveralminutestocomplete-Plugin:pam[..]-Plugin:systemd[................]接下来,报告分为不同的部分,每个部分都以 [ ] 符号开始。下面可以看到一些章节。(哇,有这么多地方需要审查,Lynis 是最合适的工具!
[ ]Bootandservices[ ]Kernel[ ]MemoryandProcesses[ ]Users,GroupsandAuthentication[ ]Shells[ ]Filesystems[ ]USBDevices[ ]Storage[ ]NFS[ ]Nameservices[ ]Portsandpackages[ ]Networking[ ]PrintersandSpools[ ]Software:e-mailandmessaging[ ]Software:firewalls[ ]Software:webserver[ ]SSHSupport[ ]SNMPSupport[ ]Databases[ ]LDAPServices[ ]PHP[ ]SquidSupport[ ]Loggingandfiles[ ]Insecureservices[ ]Bannersandidentification[ ]Scheduledtasks[ ]Accounting[ ]TimeandSynchronization[ ]Cryptography[ ]Virtualization[ ]Containers[ ]Securityframeworks[ ]Software:fileintegrity[ ]Software:Systemtooling[ ]Software:Malware[ ]FilePermissions[ ]Homedirectories[ ]KernelHardening[ ]Hardening[ ]CustomtestsLynis 使用颜色编码使报告更容易解释。
- 绿色。一切正常
- 黄色。跳过,找不到,可能有建议
- 红色。你可能需要仔细看看这个
在我的案例中,大部分红色标记都是 “Kernel Hardening” 部分找到了它。内核有各种可调设置,它们定义了内核的功能,其中一些可调设置可能有其安全场景。由于各种原因,发行版本可能没有默认设置,但你应该检查每个项目,看看你是否需要根据你的安全情况来改变它的值:
[ ]KernelHardening-------------------------------------Comparingsysctlkeypairswithscanprofile-fs.protected_hardlinks(exp:1)[OK]-fs.protected_symlinks(exp:1)[OK]-fs.suid_dumpable(exp:0)[OK]-kernel.core_uses_pid(exp:1)[OK]-kernel.ctrl-alt-del(exp:0)[OK]-kernel.dmesg_restrict(exp:1)[DIFFERENT]-kernel.kptr_restrict(exp:2)[DIFFERENT]-kernel.randomize_va_space(exp:2)[OK]-kernel.sysrq(exp:0)[DIFFERENT]-kernel.yama.ptrace_scope(exp:123)[DIFFERENT]-net.ipv4.conf.all.accept_redirects(exp:0)[DIFFERENT]-net.ipv4.conf.all.accept_source_route(exp:0)[OK]-net.ipv4.conf.all.bootp_relay(exp:0)[OK]-net.ipv4.conf.all.forwarding(exp:0)[OK]-net.ipv4.conf.all.log_martians(exp:1)[DIFFERENT]-net.ipv4.conf.all.mc_forwarding(exp:0)[OK]-net.ipv4.conf.all.proxy_arp(exp:0)[OK]-net.ipv4.conf.all.rp_filter(exp:1)[OK]-net.ipv4.conf.all.send_redirects(exp:0)[DIFFERENT]-net.ipv4.conf.default.accept_redirects(exp:0)[DIFFERENT]-net.ipv4.conf.default.accept_source_route(exp:0)[OK]-net.ipv4.conf.default.log_martians(exp:1)[DIFFERENT]-net.ipv4.icmp_echo_ignore_broadcasts(exp:1)[OK]-net.ipv4.icmp_ignore_bogus_error_responses(exp:1)[OK]-net.ipv4.tcp_syncookies(exp:1)[OK]-net.ipv4.tcp_timestamps(exp:01)[OK]-net.ipv6.conf.all.accept_redirects(exp:0)[DIFFERENT]-net.ipv6.conf.all.accept_source_route(exp:0)[OK]-net.ipv6.conf.default.accept_redirects(exp:0)[DIFFERENT]-net.ipv6.conf.default.accept_source_route(exp:0)[OK]看看 SSH 这个例子,因为它是一个需要确保安全的关键领域。这里没有红色的东西,但 Lynis 对我的环境给予了很大的加强SSH 服务建议:
[ ]SSHSupport-------------------------------------CheckingrunningSSHdaemon[FOUND]-SearchingSSHconfiguration[FOUND]-OpenSSHoption:AllowTcpForwarding[SUGGESTION]-OpenSSHoption:ClientAliveCountMax[SUGGESTION]-OpenSSHoption:ClientAliveInterval[OK]-OpenSSHoption:Compression[SUGGESTION]-OpenSSHoption:FingerprintHash[OK]-OpenSSHoption:GatewayPorts[OK]-OpenSSHoption:IgnoreRhosts[OK]-OpenSSHoption:LoginGraceTime[OK]-OpenSSHoption:LogLevel[SUGGESTION]-OpenSSHoption:MaxAuthTries[SUGGESTION]-OpenSSHoption:MaxSessions[SUGGESTION]-OpenSSHoption:PermitRootLogin[SUGGESTION]-OpenSSHoption:PermitUserEnvironment[OK]-OpenSSHoption:PermitTunnel[OK]-OpenSSHoption:Port[SUGGESTION]-OpenSSHoption:PrintLastLog[OK]-OpenSSHoption:StrictModes[OK]-OpenSSHoption:TCPKeepAlive[SUGGESTION]-OpenSSHoption:UseDNS[SUGGESTION]-OpenSSHoption:X11Forwarding[SUGGESTION]-OpenSSHoption:AllowAgentForwarding[SUGGESTION]-OpenSSHoption:UsePrivilegeSeparation[OK]-OpenSSHoption:AllowUsers[NOTFOUND]-OpenSSHoption:AllowGroups[NOTFOUND]虚拟机或容器在我的系统上没有运行,所以显示的结果是空的:
[ ]Virtualization------------------------------------[ ]Containers------------------------------------Lynis 从安全角度检查一些重要文件的文件权限:
[ ]FilePermissions-------------------------------------StartingfilepermissionscheckFile:/boot/grub2/grub.cfg[SUGGESTION]File:/etc/cron.deny[OK]File:/etc/crontab[SUGGESTION]File:/etc/group[OK]File:/etc/group-[OK]File:/etc/hosts.allow[OK]File:/etc/hosts.deny[OK]File:/etc/issue[OK]File:/etc/issue.net[OK]File:/etc/motd[OK]File:/etc/passwd[OK]File:/etc/passwd-[OK]File:/etc/ssh/sshd_config[OK]Directory:/root/.ssh[SUGGESTION]Directory:/etc/cron.d[SUGGESTION]Directory:/etc/cron.daily[SUGGESTION]Directory:/etc/cron.hourly[SUGGESTION]Directory:/etc/cron.weekly[SUGGESTION]Directory:/etc/cron.monthly[SUGGESTION]在报告的底部,Lynis 根据报告的发现提出建议。每个建议背后都有 “TEST-ID”(为方便下一部分,请保存)。
Suggestions(47):----------------------------*Ifnotrequired,considerexplicitdisablingofcoredumpin/etc/security/limits.conffile[KRNL-5820]https://cisofy.com/lynis/controls/KRNL-5820/*CheckPAMconfiguration,addroundsifapplicableandexpirepasswordstoencryptwithnewvalues[AUTH-9229]https://cisofy.com/lynis/controls/AUTH-9229/Lynis 提供找到更多关于每个建议的信息,您可以使用 show details 命令和 TEST-ID 号访问:
./lynisshowdetailsTEST-ID这将显示测试的其他信息。例如,我检查了 SSH-7408 详情:
$./lynisshowdetailsSSH-74082020-04-3005:52:23PerformingtestIDSSH-7408(CheckSSHspecificdefinedoptions)2020-04-3005:52:23Test:Checkingspecificdefinedoptionsin/tmp/lynis.k8JwazmKc62020-04-3005:52:23Result:addedadditionaloptionsforOpenSSH<7.52020-04-3005:52:23Test:CheckingAllowTcpForwardingin/tmp/lynis.k8JwazmKc62020-04-3005:52:23Result:OptionAllowTcpForwardingfound2020-04-3005:52:23Result:OptionAllowTcpForwardingvalueisYES2020-04-3005:52:23Result:OpenSSHoptionAllowTcpForwardingisinaweakconfigurationstateandshouldbefixed2020-04-3005:52:23Suggestion:ConsiderhardeningSSHconfiguration[test:SSH-7408][details:AllowTcpForwarding(setYEStoNO)][solution:-]试试吧
如果你想更多地了解你的 Linux 机器试机器的安全性 Lynis。假如你想知道 Lynis 如何工作,可以研究它的 shell 脚本,看看它是如何收集这些信息的。