Linux 安全审计实战:用 Lynis 给服务器做一次全面体检,读懂硬化指数与整改优先级

服务器「看起来没事」不等于安全:为什么需要一次系统级安全审计

很多站长判断服务器安全的方式是:能正常访问、没被挂马、没收到告警短信。但这三个信号都只是「还没出事」,不代表「没有风险」。一个典型的场景是:服务器上开着一堆用不到的服务、SSH 还允许 root 密码登录、内核参数是发行版默认值、日志里早就有一堆爆破尝试、某些敏感文件的权限是 777——这些都不会让网站立刻挂掉,但每一条都是攻击者可以踩的台阶。

问题是,靠人眼去逐条检查这些配置既枯燥又容易漏。Lynis 就是为解决这件事而生的:一个跑在服务器本地的开源安全审计工具,几百项检查一次性跑完,最后给你一份打分报告和「优先修哪几条」的建议清单。它不需要联网上传数据,不装 agent,下载即用,非常适合个人站长对自己的 VPS 做一次体检。

Lynis 能查什么:不是杀毒,是审计

先纠正一个常见误解:Lynis 不是杀毒软件,不会实时拦截攻击,也不会告诉你「哪个文件是木马」。它的定位是 配置审计与加固建议。它检查的范围大致包括:

系统基础信息与启动项、内核与内核参数(sysctl 安全项)、已安装的软件包与过期版本、认证与授权(用户账户、密码策略、SSH 配置)、网络配置与开放端口、防火墙规则、日志与审计(auditd、日志权限)、文件系统与权限、以及持久化机制(cron、systemd 服务、启动脚本)等。

跑完之后它会给出一个 Hardening index(加固指数,0~100 分)和一份 suggestions 列表,按重要性排序。你的任务不是追求 100 分——很多检查项在个人 VPS 场景下并不适用——而是从报告里挑出真正影响你这台机器的几条去修。

安装:三种方式,推荐官方源或直接下载

最简单的是用包管理器。Debian/Ubuntu 的官方源里就有 Lynis(版本可能偏旧,但够用):

apt-get update
apt-get install -y lynis
lynis --version

想要最新版就用 CISOfy 官方仓库:

# 添加官方源(以 Debian 为例,实际源地址以官网为准)
wget -O - https://packages.cisofy.com/keys/cisofy-software-public.key | apt-key add -
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" > /etc/apt/sources.list.d/cisofy-lynis.list
apt-get update
apt-get install -y lynis

如果不想动源,也可以直接下 tar 包解压即用(无依赖,最干净):

cd /opt
wget https://downloads.cisofy.com/lynis/lynis-3.1.1.tar.gz
tar xzf lynis-3.1.1.tar.gz
cd lynis
./lynis --version

跑一次完整审计

推荐用 root 运行(否则很多文件权限、内核项查不了,报告会缺一大块):

sudo lynis audit system

如果只想快速看结论不刷屏,可以指定报告文件:

sudo lynis audit system --report-file /root/lynis-report.dat

运行过程会逐项检查,屏幕上会实时显示 [OK]、[WARNING]、[SUGGESTION]、[NOT FOUND] 等标记。跑完的完整报告默认在 /var/log/lynis.log,审计数据在 /var/log/lynis-report.dat。

读懂报告:硬化指数与三类标记

报告末尾会有类似这样的总结段:

  Hardening index : 63 [############        ]
  Tests performed : 265
  Plugins enabled : 1

硬化指数 63 分对新装的系统是常见值(默认配置通常就是 60~70)。真正有价值的是下面的建议列表,标记含义要分清:

[WARNING] 是已经存在明显风险的问题,比如 SSH 允许密码登录、没有配置防火墙。这类优先处理。

[SUGGESTION] 是「可以做得更好」的改进项,比如给 /tmp 单独挂载并加 noexec、启用 auditd。按需处理,不必全做。

[NOT FOUND] / [DISABLED] 表示某项工具或功能没装/没开,要看它建议的东西对你是否必要。

想快速筛出最关键的:

grep -E "Warning|Suggestion" /var/log/lynis.log | head -50

或者只看 hardening 相关的行:

grep "hardening" /var/log/lynis.log

实战:把最常见的几条建议真正修掉

下面几条几乎是每台新 VPS 跑完 Lynis 都会冒出来的,我按优先级给出具体修法。

1. SSH 允许 root 直接登录、允许密码登录。 这是最危险的两条。改 /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

改完先别急着断连接,另开一个窗口用密钥登录验证成功,再重启 sshd:systemctl restart sshd。否则改错会把自己锁在外面(这就是为什么改 SSH 前一定保留一个已登录的会话)。

2. 没有启用防火墙。 哪怕只放行 22、80、443 三个端口,也比完全裸奔好:

# 用 nftables 或 ufw 都行,这里以 ufw 为例
apt-get install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

3. 缺少自动安全更新。 手动打补丁容易忘,用 unattended-upgrades 自动装安全更新:

apt-get install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

4. 内核参数未加固。 Lynis 常提示 net.ipv4.conf.all.rp_filter、kernel.sysrq 等项。可以在 /etc/sysctl.d/99-hardening.conf 里集中配置,例如:

net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.tcp_syncookies=1
kernel.sysrq=0

应用:sysctl --system。注意改内核参数要结合你的业务,比如某些容器或网络场景依赖特定设置,别照抄网上的一键脚本。

5. 关键目录可挂载加固。 如果 /tmp、/var/tmp、/dev/shm 是独立分区,可以加 noexec、nosuid、nodev,降低被写入可执行文件后利用的风险。编辑 /etc/fstab,例如:

tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0

改完 mount -o remount /tmp。注意 noexec 会让某些需要在 /tmp 里执行脚本的程序出问题(部分安装包、PHP 上传临时执行),上生产前要测试。

把 Lynis 变成定期体检而不是一次性任务

审计不是做一次就完事。系统会变化——你装了个新服务、改了下配置、加了个新用户,风险面就变了。建议用 cron 每月自动跑一次,并把报告留存对比:

# 每月 1 号凌晨 3 点跑一次
0 3 1 * * /usr/sbin/lynis audit system --quiet --report-file /root/lynis-report-$(date +\%Y\%m).dat

更进阶一点,可以解析 /var/log/lynis-report.dat 里的 hardening_index,和上月对比,分数掉了就说明新配置引入了新风险。这个指标对「我改了这么多设置到底有没有变好」这个问题,比任何主观感觉都可靠。

进阶:Lynis 插件帮你查更细的东西

Lynis 内置了一批可选用插件,能针对特定软件做专项检查。跑完基础审计后如果报告里提示有可用插件,可以按需启用。常见的插件覆盖面包括:检查某个 Web 服务(如 Apache、Nginx)的配置安全、检查某个数据库的账户与权限设置、检查 Docker 相关配置等。启用方式是 lynis show plugins 看列表,然后在命令里加 --plugin 插件名,或把插件放到 lynis 的 plugins 目录后重跑。

插件机制的好处是你能针对自己真实使用的软件做针对性检查,而不是被一堆「你没装所以 N/A」的通用项刷屏。比如你确实在用 Docker,那么对 Docker 守护进程配置、容器运行权限的专项检查就比通用项有价值得多。

怎么把审计结果变成可执行的整改清单

一份 Lynis 报告动辄上百条,新手最容易被淹。我的做法是分三档处理,别追求一次改完:

第一档(当天就改): 所有 [WARNING] 里和远程访问、认证相关的。具体就是 SSH 配置、防火墙缺失、明文服务暴露。这几条不改,等于大门没锁。改完重跑一次 Lynis,看硬化指数有没有上去、WARNING 有没有减少。

第二档(一周内处理): 内核参数加固、自动安全更新、日志与审计开启(auditd、logrotate 保障)。这些属于「防止问题扩大」的项,短期不出事但长期很重要。

第三档(按需、可忽略): 面向企业合规或大型集群的建议,比如入侵检测系统(IDS)、集中日志服务器、SELinux 严格策略等。个人 VPS 上这些要么资源开销不划算,要么配置复杂度远超收益,了解即可,不必勉强上。

每一轮整改后留存报告文件,形成一个「分数变化曲线」。这比记住「我改过什么」直观得多,也能在分数突然下降时及时发现是哪个新装的服务引入了风险。

几个必须知道的注意事项

Lynis 的建议不能无脑全做。 它是通用工具,很多建议面向企业合规或大型服务器场景,对你的个人 VPS 可能过重甚至有害。比如它可能建议启用 SELinux/AppArmor 的严格策略,但在你现有配置下一开就可能让 Nginx、PHP 起不来。原则是:先读建议、理解影响、再决定改不改。

别在业务高峰期跑全量审计。 大量文件扫描会消耗 IO,虽然一般很快,但对小配置 VPS 仍可能造成短时负载升高,选凌晨跑更稳妥。

结合其他工具形成闭环。 Lynis 负责「配置审计」,AIDE 负责「文件完整性监控」(文件被改了能告警),auditd 负责「行为审计」(谁改了什么留下记录),fail2ban 负责「实时拦截爆破」。四者定位不同、互补使用,才能覆盖「事前加固—事中检测—事后溯源」的完整链路。单独一个工具给不了你安全感。

对个人站长来说,花一个下午跑一次 Lynis、修掉报告里最要紧的五到十条、再挂一个每月自动跑的 cron,是投入产出比非常高的一件事。它不会让你「变安全到无懈可击」,但能把你从「完全不知道自己在裸奔」带到「清楚风险在哪、关键项已收口」的状态——这本身就已经跑赢绝大多数疏于运维的站点。

Last modification:October 7th, 2026 at 10:27 pm

Leave a Comment