首页 / 帮助文档 / CentOS安全之使用lynis自动生成合规整改建议

CentOS安全之使用lynis自动生成合规整改建议

在CentOS服务器安全加固工作中,lynis是一款开源的安全审计工具,它能自动扫描系统配置、内核参数、网络设置、文件权限、用户账户等数十个维度,最终生成一份详细的合规整改建议报告。简单来说,你只需要在CentOS上安装并运行lynis,它就会像一个经验丰富的安全工程师一样,逐条告诉你哪里有风险、该怎么改。这篇文章会从安装、运行、解读报告到逐项整改,把整个流程讲透。

为什么选择lynis而不是其他安全工具

市面上安全扫描工具不少,比如OpenSCAP、Nessus、CIS-CAT等,但lynis有几个独特优势:第一,它是纯命令行工具,不需要图形界面,适合所有CentOS版本;第二,它不仅做扫描,还会针对每个发现给出具体的修复建议和参考链接;第三,它支持自定义测试项,可以针对等保2.0、CIS Benchmark等合规标准做定向检查。对于运维人员来说,lynis的输出结果直接可用,不需要二次翻译。

在CentOS上安装lynis的具体步骤

CentOS 7和CentOS 8/Stream的安装方式略有不同,但都很简单。CentOS 7需要先启用EPEL源,CentOS 8则可以直接从官方仓库或源码安装。推荐使用源码安装,因为版本更新更快。

# CentOS 7 安装方法
yum install -y epel-release
yum install -y lynis

# 或者使用源码安装(推荐)
cd /opt
git clone https://github.com/CISOfy/lynis.git
cd lynis
./lynis audit system
# CentOS 8 / Stream 安装方法
dnf install -y lynis

# 或者源码安装
cd /opt
git clone https://github.com/CISOfy/lynis.git
cd lynis
./lynis audit system

安装完成后,验证版本:

lynis show version

运行lynis并理解扫描模式

lynis有三种运行模式:快速扫描、标准扫描和深度扫描。日常安全检查用标准扫描就够了,如果是做合规审计或者上线前检查,建议用深度扫描。

# 快速扫描(只检查关键项)
lynis audit system --quick

# 标准扫描(默认模式,推荐)
lynis audit system

# 深度扫描(包含所有测试项,耗时较长)
lynis audit system --auditor "security-scanner" --tests all

标准扫描通常需要5到15分钟,取决于服务器配置。扫描过程中你会看到大量测试项在屏幕上滚动,每一项后面会显示OK、WARNING或者FOUND。FOUND就意味着发现了问题需要整改。

如何读懂lynis生成的报告

扫描完成后,lynis会在屏幕上输出摘要,同时生成一份详细的日志文件,默认路径是/var/log/lynis-report.dat。你可以用以下命令查看完整报告:

lynis show report
# 或者直接查看日志文件
cat /var/log/lynis-report.dat | less

报告中每个发现都有一个编号,比如"WRN-1234"或"TEST-5678"。编号前面的字母代表类型:WRN是警告,SUG是建议,TEST是测试项。每个问题后面都会跟着具体的描述和修复方法。例如你可能看到这样的内容:

Test: AUTH-9228 (SSH)
Result: Found SSH protocol version 1 enabled
Suggestion: Disable SSH protocol version 1 in /etc/ssh/sshd_config
Reference: https://cisofy.com/controls/9228/

这就是lynis最有价值的地方——它不只是告诉你有问题,还告诉你改哪个文件、改什么参数、参考什么标准。

CentOS常见安全问题及lynis整改建议详解

下面我按照lynis经常发现的几大类问题,逐一给出具体整改方法。

1. SSH安全配置

lynis通常会发现SSH允许root登录、使用了旧协议版本、密码认证未关闭等问题。整改方法如下:

# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 修改以下参数
PermitRootLogin no
Protocol 2
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

# 重启SSH服务
systemctl restart sshd

改完之后记得测试能否正常登录,避免把自己锁在外面。

2. 用户账户与密码策略

lynis会检查是否存在空密码账户、密码过期策略、UID为0的非root用户等。整改建议:

# 检查空密码账户
awk -F: '($2 == "") {print $1}' /etc/shadow

# 锁定不需要的账户
usermod -L username

# 设置密码过期策略
vim /etc/login.defs
# 修改 PASS_MAX_DAYS 90(密码最长90天)
# 修改 PASS_MIN_DAYS 7(最短7天后可改密码)
# 修改 PASS_WARN_AGE 14(过期前14天提醒)

# 对已有用户强制修改密码
chage -M 90 -m 7 -W 14 username

3. 文件权限与系统完整性

lynis会扫描/etc/passwd、/etc/shadow、/etc/group等关键文件的权限是否合理,还会检查是否有SUID/SGID文件异常。常见整改:

# 修正关键文件权限
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
chmod 644 /etc/gshadow

# 查找并清理危险的SUID文件
find / -perm -4000 -type f 2>/dev/null

# 对不需要SUID权限的文件移除
chmod u-s /path/to/file

4. 内核参数与网络安全

lynis会检查TCP SYN Cookie、ICMP重定向、IP转发等内核参数。针对CentOS的sysctl整改:

# 编辑sysctl配置
vim /etc/sysctl.conf

# 添加以下安全参数
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.ip_forward = 0

# 立即生效
sysctl -p

5. 日志审计与服务管理

lynis会检查rsyslog是否运行、auditd是否启用、不必要的服务是否关闭。整改方法:

# 确保auditd运行
systemctl enable auditd
systemctl start auditd

# 检查并关闭不必要的服务
systemctl list-unit-files --state=enabled
systemctl disable servicename

# 确保rsyslog正常运行
systemctl enable rsyslog
systemctl start rsyslog

6. 防火墙与SELinux配置

lynis会检查firewalld或iptables规则是否合理,SELinux是否处于 enforcing 模式。建议:

# 查看SELinux状态
getenforce

# 如果是disabled或permissive,改为enforcing
setenforce 1
vim /etc/selinux/config
# 修改 SELINUX=enforcing

# 检查防火墙规则
firewall-cmd --list-all

# 只开放必要端口
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload

7. 软件包与自动更新

lynis会提示是否有过期的软件包、是否启用了自动安全更新。CentOS 7使用yum-cron,CentOS 8使用dnf-automatic:

# CentOS 7 启用自动安全更新
yum install -y yum-cron
vim /etc/yum/yum-cron.conf
# 修改 apply_updates = yes
systemctl enable yum-cron
systemctl start yum-cron

# CentOS 8 启用自动安全更新
dnf install -y dnf-automatic
vim /etc/dnf/automatic.conf
# 修改 apply_updates = yes
systemctl enable dnf-automatic.timer
systemctl start dnf-automatic.timer

如何将lynis报告转化为合规整改文档

很多企业做等保测评或者行业合规检查时,需要提交整改报告。lynis的报告可以直接作为技术依据,但需要进一步整理。建议做法:将lynis输出的每个FOUND项对应到具体的合规条款,比如等保2.0中"身份鉴别""访问控制""安全审计"等控制项。然后按照"问题描述—风险等级—整改措施—验证方法"的格式整理成表格,这样审核人员一目了然。

你也可以用lynis的JSON输出功能配合脚本生成结构化报告:

# 生成JSON格式报告
lynis audit system --json-output --report-file /tmp/lynis-report.json

定期扫描与持续合规的建议

安全不是一次性的工作。建议将lynis扫描加入定期运维计划,每周至少跑一次快速扫描,每月一次完整扫描。可以配合crontab实现自动化:

# 每周日凌晨3点执行快速扫描并发送邮件
0 3 * * 0 /opt/lynis/lynis audit system --quick --cronjob 2>&1 | mail -s "Weekly Lynis Security Scan" admin@example.com

每次扫描后对比报告,关注新增的FOUND项,及时处理。对于长期无法修复的问题(比如某些老旧业务依赖的配置),要做好风险接受记录并上报。

总结

lynis是CentOS安全加固中非常实用的工具,它的核心价值在于自动化发现问题并给出可操作的整改建议。从SSH配置到内核参数,从文件权限到日志审计,lynis覆盖了服务器安全的方方面面。关键是不要只跑一次就完事,要把它纳入日常运维流程,持续跟踪、持续整改,才能真正把CentOS服务器的安全水位提上去。对于需要做等保、CIS合规的团队,lynis的报告可以直接作为技术支撑材料,大幅减少人工排查的工作量。