lynis命令

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 的常见建议,以下是一些安全最佳实践:

  1. 更新系统:定期应用安全更新和补丁
  2. 加固 SSH:禁用 root 登录,使用密钥认证,限制访问
  3. 配置防火墙:实施最小权限原则,只开放必要端口
  4. 启用审计:配置系统日志和审计功能
  5. 文件权限:确保关键文件和目录具有适当的权限
  6. 密码策略:实施强密码策略和密码期限
  7. 禁用未使用的服务:减少攻击面
  8. 配置内核参数:优化系统安全设置
  9. 实施文件完整性监控:使用 AIDE 或类似工具
  10. 定期备份:确保关键数据得到备份

与其他安全工具的比较 #

工具 优点 缺点 适用场景
Lynis 轻量级、易于使用、全面的检查 有限的修复功能 系统审计、合规检查
OpenVAS 全面的漏洞扫描 资源密集型、配置复杂 网络漏洞评估
Nessus 强大的漏洞扫描、详细报告 商业软件、成本高 企业安全评估
CIS-CAT 基于 CIS 基准的评估 有限的自定义选项 合规性检查
Tiger 简单的安全审计 功能较少、更新不频繁 基本系统检查

提示 #

  • 定期运行 Lynis 以跟踪系统安全状态的变化
  • 使用--cronjob选项在自动化脚本中运行 Lynis
  • 创建自定义配置文件以适应特定环境需求
  • 关注"警告"和"建议",优先解决高风险问题
  • 将 Lynis 集成到 CI/CD 管道中,确保新部署的系统符合安全标准
  • 使用--profile选项可以为不同类型的系统创建特定的安全配置
  • 结合其他安全工具使用 Lynis,获得更全面的安全评估
  • 使用--tests选项可以专注于特定的安全领域
  • 保存历史报告以跟踪安全状态的改进
  • 将 Lynis 作为更广泛的安全计划的一部分,包括培训、策略和程序