lynis 命令 #
lynis
是一个开源的安全审计工具,用于评估 Linux 和 Unix 系统的安全状态。它执行数百项安全控制检查,包括系统配置、软件安装、文件权限等,并提供详细的报告和改进建议。Lynis 适用于系统管理员、安全专业人员和合规审计人员。
语法 #
lynis [选项] 命令
常用选项 #
选项 | 描述 |
---|---|
--auditor 名称 |
设置审计员名称 |
--check-all |
执行所有可用的安全检查 |
--check-update |
检查 Lynis 更新 |
--cronjob |
在 cron 作业中运行(无彩色输出) |
--debug |
调试模式 |
--dump-options |
显示所有可用选项 |
--help |
显示帮助信息 |
--log-file 文件 |
指定日志文件 |
--no-colors |
不使用彩色输出 |
--no-log |
不创建日志文件 |
--pentest |
渗透测试模式 |
--profile 文件 |
使用特定的审计配置文件 |
--quick |
快速模式,跳过一些测试 |
--quiet |
安静模式,减少输出 |
--report-file 文件 |
指定报告文件 |
--reverse-colors |
反转颜色(适用于深色背景) |
--skip-plugins |
跳过插件执行 |
--tests 测试ID |
执行特定的测试 |
--upload |
上传数据到 Lynis Enterprise 服务器 |
--verbose |
显示更多详细信息 |
--version |
显示版本信息 |
常用命令 #
命令 | 描述 |
---|---|
audit system |
审计系统(默认命令) |
show |
显示信息 |
update |
更新 Lynis |
generate |
生成数据 |
常见用法 #
1. 执行完整系统审计 #
lynis audit system
这将执行所有安全检查并生成报告。
2. 以非交互模式运行(适用于脚本) #
lynis audit system --cronjob
3. 执行特定类别的测试 #
lynis audit system --tests FILE-7524
4. 使用自定义配置文件 #
lynis audit system --profile /path/to/custom.prf
5. 显示 Lynis 版本 #
lynis show version
6. 检查 Lynis 更新 #
lynis update info
7. 生成安全报告 #
lynis audit system --report-file /path/to/report.dat
8. 以渗透测试模式运行 #
lynis audit system --pentest
9. 快速审计(跳过一些测试) #
lynis audit system --quick
10. 显示可用的测试 #
lynis show tests
高级用法 #
1. 创建自定义审计配置文件 #
创建一个名为custom.prf
的文件:
# 自定义Lynis配置文件
# 启用/禁用特定测试
skip-test=SSH-7408
skip-test=BANN-7126
# 设置自定义设置
config:ssh_daemon_port=2222
config:nginx_config_directory=/etc/nginx/conf.d
# 包含其他配置文件
include=/etc/lynis/profiles/hardening.prf
然后使用此配置文件运行 Lynis:
lynis audit system --profile custom.prf
2. 自动化安全审计 #
创建一个脚本security-audit.sh
:
#!/bin/bash
# 设置变量
DATE=$(date +%Y%m%d)
REPORT_DIR="/var/log/security-audits"
REPORT_FILE="$REPORT_DIR/lynis-report-$DATE.dat"
LOG_FILE="$REPORT_DIR/lynis-log-$DATE.log"
# 创建报告目录
mkdir -p $REPORT_DIR
# 运行Lynis审计
lynis audit system --cronjob --report-file $REPORT_FILE --log-file $LOG_FILE
# 提取关键发现
echo "Security Issues Found:" > $REPORT_DIR/summary-$DATE.txt
grep "suggestion" $LOG_FILE >> $REPORT_DIR/summary-$DATE.txt
grep "warning" $LOG_FILE >> $REPORT_DIR/summary-$DATE.txt
# 发送摘要邮件
mail -s "Security Audit Report - $DATE" [email protected] < $REPORT_DIR/summary-$DATE.txt
设置为每周运行:
# 编辑crontab
crontab -e
# 添加以下行,每周日凌晨3点运行
0 3 * * 0 /path/to/security-audit.sh
3. 与其他工具集成 #
与 Ansible 集成 #
创建一个 Ansible 任务:
- name: Run Lynis security audit
command: lynis audit system --cronjob
register: lynis_output
changed_when: false
- name: Display Lynis summary
debug:
msg: "{{ lynis_output.stdout_lines }}"
- name: Check for security warnings
shell: grep "warning" /var/log/lynis.log
register: security_warnings
changed_when: false
failed_when: false
- name: Send notification if warnings found
mail:
subject: "Security warnings detected on {{ inventory_hostname }}"
body: "{{ security_warnings.stdout }}"
to: [email protected]
when: security_warnings.stdout != ""
与 CI/CD 管道集成 #
在 Jenkins pipeline 中:
stage('Security Audit') {
steps {
sh 'lynis audit system --cronjob --report-file lynis-report.dat'
sh 'grep -c "warning" /var/log/lynis.log || true'
}
post {
always {
archiveArtifacts artifacts: 'lynis-report.dat', fingerprint: true
}
}
}
4. 自定义测试和插件 #
创建自定义测试插件/usr/local/lynis/plugins/custom_tests.db
:
#!/bin/sh
# 自定义测试插件
# 创建者: Your Name
# 描述: 检查特定的安全配置
# 注册插件
PLUGIN_NAME="custom_tests"
PLUGIN_VERSION="1.0.0"
PLUGIN_AUTHOR="Your Name"
PLUGIN_DESC="Custom security tests"
# 测试函数
custom_test_ssh_timeout() {
# 检查SSH超时设置
LogText "Test: 检查SSH客户端保持连接设置"
if [ -f /etc/ssh/ssh_config ]; then
if grep -q "^ServerAliveInterval" /etc/ssh/ssh_config; then
LogText "Result: 找到ServerAliveInterval设置"
Display --indent 2 --text "- 检查SSH保持连接设置" --result "找到" --color GREEN
else
LogText "Result: 未找到ServerAliveInterval设置"
Display --indent 2 --text "- 检查SSH保持连接设置" --result "未找到" --color YELLOW
ReportSuggestion "CUST-SSH-1" "考虑在SSH客户端配置中设置ServerAliveInterval以保持连接"
fi
fi
}
# 主函数
custom_tests_main() {
# 执行测试
custom_test_ssh_timeout
}
# 注册插件
RegisterPlugin
然后在配置文件中启用插件:
# 在custom.prf中
plugin=custom_tests
5. 生成 HTML 报告 #
创建一个脚本lynis-html-report.sh
:
#!/bin/bash
# 运行Lynis并生成HTML报告
# 设置变量
DATE=$(date +%Y%m%d)
REPORT_DIR="/var/www/html/security-reports"
REPORT_FILE="$REPORT_DIR/lynis-report-$DATE.html"
LOG_FILE="/var/log/lynis.log"
# 创建报告目录
mkdir -p $REPORT_DIR
# 运行Lynis
lynis audit system --cronjob
# 生成HTML报告头部
cat > $REPORT_FILE << EOF
<!DOCTYPE html>
<html>
<head>
<title>Lynis Security Audit Report - $DATE</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #2c3e50; }
h2 { color: #3498db; }
.warning { color: #e74c3c; }
.suggestion { color: #f39c12; }
.good { color: #27ae60; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
tr:nth-child(even) { background-color: #f9f9f9; }
</style>
</head>
<body>
<h1>Lynis Security Audit Report</h1>
<p>Date: $DATE</p>
<p>Hostname: $(hostname)</p>
<p>Lynis Version: $(lynis show version)</p>
<h2>Security Warnings</h2>
<ul>
EOF
# 添加警告
grep "warning" $LOG_FILE | sed 's/^.*\[warning\] //' | sort | uniq | while read line; do
echo " <li class=\"warning\">$line</li>" >> $REPORT_FILE
done
# 添加建议
cat >> $REPORT_FILE << EOF
</ul>
<h2>Security Suggestions</h2>
<ul>
EOF
grep "suggestion" $LOG_FILE | sed 's/^.*\[suggestion\] //' | sort | uniq | while read line; do
echo " <li class=\"suggestion\">$line</li>" >> $REPORT_FILE
done
# 添加安全评分
HARDENING_INDEX=$(grep "Hardening index" $LOG_FILE | awk -F: '{print $2}' | tr -d ' ')
TESTS_PERFORMED=$(grep "Tests performed" $LOG_FILE | awk -F: '{print $2}' | tr -d ' ')
cat >> $REPORT_FILE << EOF
</ul>
<h2>Security Metrics</h2>
<p>Hardening Index: <span class="good">$HARDENING_INDEX</span></p>
<p>Tests Performed: $TESTS_PERFORMED</p>
<h2>System Information</h2>
<table>
<tr><th>Item</th><th>Value</th></tr>
<tr><td>Operating System</td><td>$(grep "Operating system" $LOG_FILE | awk -F: '{print $2}' | tr -d ' ')</td></tr>
<tr><td>Kernel Version</td><td>$(uname -r)</td></tr>
<tr><td>Hostname</td><td>$(hostname)</td></tr>
</table>
</body>
</html>
EOF
echo "HTML report generated: $REPORT_FILE"
配置文件 #
Lynis 的主要配置文件和目录:
/etc/lynis/default.prf
:默认配置文件/etc/lynis/custom.prf
:自定义配置文件/usr/share/lynis/
或/usr/local/lynis/
:Lynis 安装目录/var/log/lynis.log
:默认日志文件/var/log/lynis-report.dat
:默认报告文件
测试类别 #
Lynis 包含多个测试类别:
类别 | 描述 | 示例测试 ID |
---|---|---|
ACCT | 账户安全 | ACCT-9622 |
AUTH | 认证机制 | AUTH-9328 |
BANN | 系统横幅 | BANN-7126 |
BOOT | 引导加载程序 | BOOT-5121 |
CRYP | 加密设置 | CRYP-7902 |
DBS | 数据库安全 | DBS-1816 |
FINT | 文件完整性 | FINT-4315 |
FILE | 文件系统安全 | FILE-6310 |
FIRE | 防火墙配置 | FIRE-4512 |
HRDN | 系统加固 | HRDN-7222 |
KERN | 内核安全 | KERN-1004 |
LOGG | 日志和审计 | LOGG-2190 |
MALW | 恶意软件 | MALW-3280 |
NETW | 网络配置 | NETW-3012 |
PKGS | 软件包管理 | PKGS-7370 |
PRNT | 打印机安全 | PRNT-2307 |
PROC | 进程安全 | PROC-3612 |
SCHD | 计划任务 | SCHD-7704 |
SHLL | Shell 配置 | SHLL-6211 |
SNMP | SNMP 安全 | SNMP-3306 |
SQLD | SQL 数据库 | SQLD-3306 |
SSH | SSH 安全 | SSH-7408 |
TIME | 时间同步 | TIME-3104 |
TOOL | 安全工具 | TOOL-5002 |
USB | USB 设备 | USB-1000 |
VIRT | 虚拟化 | VIRT-1902 |
WEB | Web 服务器 | HTTP-6622 |
常见问题排查 #
1. 权限问题 #
[WARNING]: Could not open logfile: /var/log/lynis.log
解决方法:
sudo lynis audit system
2. 测试失败或跳过 #
[WARNING]: Test ABCD-1234 had a non-zero return status
可能的原因:
- 缺少依赖项
- 配置文件不可访问
- 系统限制
解决方法:
# 检查详细日志
grep "ABCD-1234" /var/log/lynis.log
# 使用调试模式
lynis audit system --debug
3. 自定义测试不执行 #
可能的原因:
- 插件路径不正确
- 插件权限问题
- 插件未在配置中启用
解决方法:
# 检查插件权限
chmod 755 /usr/local/lynis/plugins/custom_tests.db
# 确保在配置文件中启用
echo "plugin=custom_tests" >> /etc/lynis/custom.prf
安全最佳实践 #
根据 Lynis 的常见建议,以下是一些安全最佳实践:
- 更新系统:定期应用安全更新和补丁
- 加固 SSH:禁用 root 登录,使用密钥认证,限制访问
- 配置防火墙:实施最小权限原则,只开放必要端口
- 启用审计:配置系统日志和审计功能
- 文件权限:确保关键文件和目录具有适当的权限
- 密码策略:实施强密码策略和密码期限
- 禁用未使用的服务:减少攻击面
- 配置内核参数:优化系统安全设置
- 实施文件完整性监控:使用 AIDE 或类似工具
- 定期备份:确保关键数据得到备份
与其他安全工具的比较 #
工具 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Lynis | 轻量级、易于使用、全面的检查 | 有限的修复功能 | 系统审计、合规检查 |
OpenVAS | 全面的漏洞扫描 | 资源密集型、配置复杂 | 网络漏洞评估 |
Nessus | 强大的漏洞扫描、详细报告 | 商业软件、成本高 | 企业安全评估 |
CIS-CAT | 基于 CIS 基准的评估 | 有限的自定义选项 | 合规性检查 |
Tiger | 简单的安全审计 | 功能较少、更新不频繁 | 基本系统检查 |
提示 #
- 定期运行 Lynis 以跟踪系统安全状态的变化
- 使用
--cronjob
选项在自动化脚本中运行 Lynis - 创建自定义配置文件以适应特定环境需求
- 关注"警告"和"建议",优先解决高风险问题
- 将 Lynis 集成到 CI/CD 管道中,确保新部署的系统符合安全标准
- 使用
--profile
选项可以为不同类型的系统创建特定的安全配置 - 结合其他安全工具使用 Lynis,获得更全面的安全评估
- 使用
--tests
选项可以专注于特定的安全领域 - 保存历史报告以跟踪安全状态的改进
- 将 Lynis 作为更广泛的安全计划的一部分,包括培训、策略和程序