Linux 安全实战:防火墙配置 + 漏洞修复(符合企业合规标准)

JSON 2026-01-20 15:15:24 234

一、企业级防火墙配置实战

Linux 防火墙基于内核态 netfilter 框架,用户态常用工具分为三类:firewalld(动态管理,推荐生产环境)、iptables(经典工具,规则灵活)、nftables(新一代框架,性能更优)。合规配置核心要求:默认拒绝所有入站/转发流量、仅开放业务必需端口、启用审计日志、规则持久化、定期审计。

1. 合规前提准备

先清理无用服务,减少攻击面,再确认防火墙工具状态:

# 停止并禁用不必要网络服务(如rpcbind、telnet、vsftpd)
systemctl stop rpcbind telnet vsftpd
systemctl disable rpcbind telnet vsftpd

# 优先启用firewalld(CentOS/RHEL 7+、Debian/Ubuntu 20.04+)
systemctl enable --now firewalld
systemctl status firewalld  # 验证状态为active(running)

2. firewalld 企业级合规配置(推荐)

firewalld 基于“区域(zone)”管理规则,public 区域默认策略严格,适合公网服务器,支持动态加载规则不中断业务。

(1)核心合规原则

  • 入站规则:默认拒绝(drop),仅开放业务必需端口/服务;
  • 出站规则:默认允许,可按需限制敏感流量(如恶意IP访问);
  • 日志审计:记录所有被拒绝流量,支撑安全事件追溯;
  • 规则持久化:写入配置文件,避免重启后失效。

(2)实战配置步骤(Web服务器示例)

配置目标
命令操作
合规说明
设置默认拒绝策略
firewall-cmd --set-default-zone=public --permanent firewall-cmd --zone=public --set-target=DROP --permanent
遵循最小权限,阻断所有未授权入站流量
开放业务必需端口
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent
仅开放HTTP/HTTPS,避免多余攻击面
限制SSH仅内网访问
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept' --permanent
防止暴力破解,等保2.0明确要求
启用拒绝流量日志
firewall-cmd --set-log-denied=all --permanent
日志存储于/var/log/firewalld,支持审计追溯
基础DDoS防护
firewall-cmd --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port=80 protocol=tcp limit value="100/s" accept' --permanent
限制单IP每秒100个连接,缓解SYN洪水
规则生效与验证
firewall-cmd --reload firewall-cmd --list-all --permanent
动态重载规则,无需重启服务,验证配置准确性

(3)数据库服务器额外加固

数据库端口(如MySQL 3306)需严格限制访问源,仅允许应用服务器连接:

firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.10" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --reload
# 备份配置,防止误操作丢失
cp -r /etc/firewalld/ /etc/firewalld_bak_$(date +%Y%m%d)

3. iptables 传统配置(兼容旧系统)

若系统未安装firewalld,可使用iptables配置,核心是确保规则持久化,避免重启失效。

(1)核心规则脚本(可直接执行)

#!/bin/bash
# 清空现有规则
iptables -F
iptables -X

# 设置默认策略:拒绝入站/转发,允许出站
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许回环接口(本地通信必需,避免系统异常)
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立连接的流量(如SSH会话保持、业务请求响应)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 开放业务端口与受限SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# 启用日志,记录被拒绝流量(前缀标识,便于排查)
iptables -A INPUT -j LOG --log-prefix "[IPTABLES_DENY] " --log-level 6

# 规则持久化(按系统类型保存)
# CentOS/RHEL
service iptables save
# Debian/Ubuntu(需先安装iptables-persistent)
# apt install -y iptables-persistent
# netfilter-persistent save

(2)合规关键点

  • 必须保留lo回环接口和ESTABLISHED,RELATED状态规则,否则导致系统内部通信异常;
  • 配置开机自启:CentOS/RHEL执行systemctl enable iptables,Debian/Ubuntu启用netfilter-persistent;
  • 日志默认输出至/var/log/messages,需定期归档,保留期限≥90天。

4. 防火墙合规审计要点

检查项
合规标准
验证命令/方法
默认策略
入站/转发默认拒绝
firewall-cmd --list-all / iptables -L -n
端口管控
仅开放业务必需端口,无高危端口暴露
ss -tulnp(对比防火墙开放端口)
日志审计
拒绝流量日志已启用,可追溯
grep "IPTABLES_DENY" /var/log/messages
规则持久化
重启后规则不丢失
systemctl restart firewalld/iptables 后验证

二、漏洞全流程修复(企业合规闭环)

漏洞修复需遵循“扫描→评估→修复→验证→归档”闭环流程,避免盲目修复导致业务中断,同时满足合规对漏洞时效性、可追溯性的要求。

1. 核心合规要求

  • 定期扫描:至少每月1次全量漏洞扫描,高危漏洞24小时内响应;
  • 测试验证:修复前在测试环境验证补丁兼容性,避免生产故障;
  • 闭环管理:修复后复测确认,记录台账并定期复查;
  • 应急机制:建立0day漏洞应急响应方案,无官方补丁时采取临时缓解措施。

2. 漏洞扫描(发现问题)

结合自动化工具与轻量命令,覆盖系统、应用、配置三类漏洞,满足合规扫描要求。

扫描类型
推荐工具
实战命令/操作
合规说明
系统漏洞(CVE)
OpenVAS/Nessus、yum/apt
CentOS:yum update --security -y Debian/Ubuntu:apt install -y debsecan && debsecan --format short
支持等保2.0漏洞扫描,生成合规报告
端口/服务漏洞
nmap
nmap -sV --script vuln 192.168.1.100
识别开放端口服务版本及已知漏洞
Web应用漏洞
OWASP ZAP/Burp Suite
用OWASP ZAP扫描目标URL,检测SQL注入、XSS等
覆盖Tomcat/Nginx等Web服务漏洞
配置合规漏洞
Lynis/CIS-CAT
lynis audit system(生成详细配置漏洞报告)
验证是否符合CIS安全基准

3. 漏洞分级评估(合规核心)

按CVSS评分结合业务影响划分优先级,优先修复高危漏洞,合理分配运维资源。

漏洞级别
CVSS评分
修复时限
示例场景
高危
9.0-10.0
24小时内
远程代码执行(RCE)、内核提权(如CVE-2021-4034)
中危
4.0-8.9
7天内
弱密码、敏感信息泄露
低危
0.1-3.9
30天内
非敏感信息暴露、配置冗余
信息
0.0
按需修复
软件版本信息暴露

评估要点

  • 业务影响:非核心服务的低危漏洞可暂缓修复,优先保障生产业务;
  • 修复风险:评估操作影响范围(如内核升级需重启,需申请维护窗口)。

4. 漏洞修复实战(分场景)

(1)系统漏洞修复(内核+组件)

系统漏洞主要源于未更新的软件包、过时内核,修复核心是“安全补丁升级+热修复兜底”。

# 1. 修复前备份关键数据(合规必做,避免数据丢失)
tar -zcvf /backup/system_bak_$(date +%Y%m%d).tar.gz /etc /var/www

# 2. 仅升级安全补丁(减少业务影响,不更新所有包)
# CentOS/RHEL
yum update --security -y
# Debian/Ubuntu
apt update && apt upgrade -y --security

# 3. 内核补丁处理(需重启生效,生产环境提前规划窗口)
yum update kernel -y && reboot

# 4. 内核热修复(7×24业务,无需重启,CentOS/RHEL示例)
yum install kpatch -y
kpatch load /usr/lib/kpatch/[内核版本]/[补丁名].ko

# 5. 修复验证
yum list-security --installed  # CentOS/RHEL
apt-get changelog <package-name>  # Debian/Ubuntu

注意:禁止使用CentOS 6、Ubuntu 16.04等已停止维护(EOL)的系统版本,需升级至主流支持版本(如CentOS 7/8、Ubuntu 20.04/22.04)。

(2)高危漏洞应急修复(无官方补丁)

针对0day漏洞或无补丁场景,采取临时缓解措施,阻断攻击路径:

  • SSH弱口令漏洞:禁用密码登录,启用密钥认证 sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config systemctl restart sshd # 生成SSH密钥(客户端操作) ssh-keygen -t rsa -b 4096 ssh-copy-id 用户名@服务器IP
  • 禁用高危服务:关闭Telnet等非必要服务 systemctl stop telnet.socket systemctl disable telnet.socket

(3)应用漏洞修复(Web+中间件)

应用漏洞修复核心是“版本升级+配置加固”,覆盖Web应用、中间件、权限配置三类场景。

场景1:Web服务加固(Nginx/Apache)

# Nginx加固
# 1. 升级至最新稳定版
yum update nginx -y
# 2. 隐藏版本信息,禁用危险HTTP方法
vi /etc/nginx/nginx.conf
server_tokens off;  # 隐藏版本
# 禁用PUT/DELETE等方法
if ($request_method !~ ^(GET|POST|HEAD)$) {
    return 403;
}
systemctl restart nginx

# Apache加固
vi /etc/httpd/conf/httpd.conf
ServerTokens Prod  # 仅显示Apache,不暴露版本
ServerSignature Off
systemctl restart httpd

场景2:中间件加固(Tomcat示例)

  • 升级至最新稳定版:wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz;
  • 禁用默认管理后台:删除webapps/manager和webapps/host-manager目录;
  • 加固用户权限:修改conf/tomcat-users.xml,仅授权最小权限用户。

场景3:弱口令与权限配置修复

# 1. 配置密码复杂度策略
vi /etc/login.defs
PASS_MIN_LEN 12  # 密码最小长度12位
PASS_COMPLEXITY_CHECKS 1  # 启用复杂度检查

# 2. 检查并锁定空密码账号
grep -E '^[^:]+::' /etc/shadow  # 查找空密码账号
passwd -l 账号名  # 锁定账号

# 3. 限制sudo权限,避免普通用户提权
visudo  # 编辑sudoers文件(防止语法错误)
user1 ALL=(ALL) /usr/bin/ls, /usr/bin/cat  # 仅授权特定命令

5. 修复验证与合规闭环

  1. 复测漏洞:用原扫描工具(如OpenVAS、nmap)重新扫描,确认漏洞已消除;
  2. 记录台账:填写漏洞修复记录表,包含漏洞编号、修复时间、操作人、验证结果,归档保存≥1年;
  3. 定期复查:每月执行全量扫描,每季度复盘漏洞修复流程,优化应急方案。

三、企业合规附加加固措施

结合防火墙与漏洞修复,补充账号、日志、备份三类配套措施,全面满足合规要求。

1. 账号权限管理

  • 禁用root远程登录:修改/etc/ssh/sshd_config,设置PermitRootLogin no,重启sshd服务;
  • 最小权限授权:创建普通运维账号,通过sudo分配细分权限,定期清理无用账号(userdel 账号名);
  • 入侵检测:部署fail2ban,自动封禁暴力破解IP yum install fail2ban -y systemctl start fail2ban systemctl enable fail2ban

2. 日志审计管理

  • 开启系统日志:启用rsyslog服务,将防火墙日志、系统日志同步至中央日志服务器(如ELK),避免日志篡改;
  • 日志留存:配置日志保留期限≥6个月,满足合规追溯要求;
  • 定期审计:每周分析日志,排查异常访问、漏洞攻击等行为。

3. 备份与灾备

  • 定期备份:用tar/rsync备份防火墙配置、系统配置、业务数据,备份文件异地存储;
  • 灾备演练:每季度执行一次灾难恢复演练,验证备份有效性与业务恢复能力。

四、实战案例:Web服务器合规加固完整流程

  1. 环境准备:禁用rpcbind、telnet无用服务,启用firewalld并设置开机自启;
  2. 防火墙配置:仅开放80/443/22(限制192.168.1.0/24网段),启用拒绝日志,备份配置;
  3. 漏洞扫描:用OpenVAS扫描,发现Apache高危漏洞(CVE-2023-25690);
  4. 漏洞修复:升级Apache至最新版本(yum update httpd -y),重启服务;
  5. 验证归档:重新扫描确认漏洞消除,记录修复台账,备份系统数据;
  6. 定期复查:每月用lynis扫描配置漏洞,每周审计防火墙日志。

五、Linux安全合规自查脚本(自动化工具)

脚本适用于CentOS/RHEL 7+/Debian/Ubuntu 20.04+,覆盖防火墙、漏洞、服务、权限四大模块,自动生成带时间戳的自查报告,标注合规状态及修复建议,优化后贴合企业审计归档规范。

1. 优化后脚本内容

#!/bin/bash
##############################################################################
# Linux安全合规自查脚本(防火墙+漏洞修复+服务加固)
# 合规标准:等保2.0(GB/T 22239)、PCI DSS、CIS安全基准
# 检查模块:防火墙配置、系统补丁、服务加固、文件权限
# 报告规范:符合企业审计归档要求,含合规依据、风险等级、整改建议
##############################################################################

# 定义核心参数(可按企业业务调整)
REPORT_FILE="linux_compliance_report_$(date +%Y%m%d_%H%M%S).txt"
ALLOW_PORTS=("80" "443" "22")  # 业务允许端口(需与企业安全基线一致)
INTERNAL_NET="192.168.1.0/24"  # 内网可信网段
HIGH_RISK_PORTS=("23" "3389" "135" "139" "445")  # 高危端口清单
RISK_LEVEL=("严重" "高危" "中危" "低危" "合规")  # 风险等级定义

# 初始化报告(标准化格式,含审计必备要素)
{
echo "================================================================"
echo "                  Linux系统安全合规自查报告"
echo "================================================================"
echo "报告编号:COMP-$(date +%Y%m%d%H%M%S)"
echo "自查主机:$(hostname)(IP:$(hostname -I | awk '{print $1}'))"
echo "系统版本:$(cat /etc/os-release | grep PRETTY_NAME | cut -d '"' -f 2)"
echo "自查时间:$(date +"%Y-%m-%d %H:%M:%S")"
echo "执行账号:$(whoami)"
echo "合规标准:等保2.0(GB/T 22239)、PCI DSS V4.0、CIS Linux Benchmark"
echo "报告说明:1.风险等级分为严重/高危/中危/低危/合规;2.整改建议需留存执行记录;3.报告保存期限≥1年"
echo "================================================================"
echo -e "\n【一、防火墙配置检查】"
echo "---------------------------------------------------------------"
} > $REPORT_FILE

# 模块1:防火墙配置检查(补充合规依据,标准化风险描述)
check_firewall() {
    if systemctl is-active --quiet firewalld; then
        echo "1.1 防火墙状态:firewalld已启用(合规)" >> $REPORT_FILE
        echo "   合规依据:等保2.0 7.1.2.2 网络访问控制要求" >> $REPORT_FILE
        
        DEFAULT_ZONE=$(firewall-cmd --get-default-zone)
        if [ "$DEFAULT_ZONE" = "public" ]; then
            echo "1.2 默认区域:$DEFAULT_ZONE(合规)" >> $REPORT_FILE
        else
            echo "1.2 默认区域:$DEFAULT_ZONE(低危)" >> $REPORT_FILE
            echo "   整改建议:执行firewall-cmd --set-default-zone=public --permanent,将默认区域改为public" >> $REPORT_FILE
        fi
        
        OPEN_PORTS=$(firewall-cmd --list-ports | cut -d '/' -f 1 | tr ' ' ',')
        echo "1.3 已开放端口:$OPEN_PORTS" >> $REPORT_FILE
        for PORT in ${HIGH_RISK_PORTS[@]}; do
            if echo $OPEN_PORTS | grep -q $PORT; then
                echo "1.4 高危端口风险:端口$PORT已开放(高危)" >> $REPORT_FILE
                echo "   合规依据:PCI DSS 1.2.1 禁止开放非必要高危端口" >> $REPORT_FILE
                echo "   整改建议:执行firewall-cmd --remove-port=$PORT/tcp --permanent,关闭高危端口并重启firewalld" >> $REPORT_FILE
            fi
        done
        
        SSH_RULE=$(firewall-cmd --list-rich-rules | grep "port=\"22\"")
        if echo $SSH_RULE | grep -q $INTERNAL_NET; then
            echo "1.5 SSH访问控制:仅允许内网$INTERNAL_NET访问(合规)" >> $REPORT_FILE
        else
            echo "1.5 SSH访问控制:未限制内网访问(中危)" >> $REPORT_FILE
            echo "   整改建议:执行firewall-cmd --add-rich-rule='rule family=\"ipv4\" source address=\"$INTERNAL_NET\" port port=\"22\" protocol=\"tcp\" accept' --permanent" >> $REPORT_FILE
        fi
        
        LOG_STATUS=$(firewall-cmd --get-log-denied)
        if [ "$LOG_STATUS" = "all" ]; then
            echo "1.6 防火墙日志:已启用拒绝流量日志(合规)" >> $REPORT_FILE
            echo "   日志路径:/var/log/firewalld" >> $REPORT_FILE
        else
            echo "1.6 防火墙日志:未启用拒绝流量日志(中危)" >> $REPORT_FILE
            echo "   整改建议:执行firewall-cmd --set-log-denied=all --permanent,启用日志并reload生效" >> $REPORT_FILE
        fi
    elif iptables -L &>/dev/null; then
        echo "1.1 防火墙状态:iptables已启用(合规)" >> $REPORT_FILE
        echo "   合规依据:等保2.0 7.1.2.2 网络访问控制要求" >> $REPORT_FILE
        
        INPUT_POLICY=$(iptables -L INPUT -n | grep "policy" | awk '{print $4}')
        FORWARD_POLICY=$(iptables -L FORWARD -n | grep "policy" | awk '{print $4}')
        if [ "$INPUT_POLICY" = "DROP" -a "$FORWARD_POLICY" = "DROP" ]; then
            echo "1.2 默认策略:入站/转发均为DROP(合规)" >> $REPORT_FILE
        else
            echo "1.2 默认策略:入站=$INPUT_POLICY/转发=$FORWARD_POLICY(高危)" >> $REPORT_FILE
            echo "   整改建议:执行iptables -P INPUT DROP && iptables -P FORWARD DROP,设置默认拒绝并持久化规则" >> $REPORT_FILE
        fi
        
        if iptables -L INPUT -n | grep -q "LOG"; then
            echo "1.3 防火墙日志:已启用拒绝流量日志(合规)" >> $REPORT_FILE
        else
            echo "1.3 防火墙日志:未启用拒绝流量日志(中危)" >> $REPORT_FILE
            echo "   整改建议:执行iptables -A INPUT -j LOG --log-prefix \"[IPTABLES_DENY] \" --log-level 6,启用日志" >> $REPORT_FILE
        fi
    else
        echo "1.1 防火墙状态:未启用任何防火墙(严重)" >> $REPORT_FILE
        echo "   合规依据:等保2.0 7.1.2.2 强制要求网络访问控制" >> $REPORT_FILE
        echo "   整改建议:立即安装并启用firewalld/iptables,配置默认拒绝策略" >> $REPORT_FILE
    fi
}

# 模块2:系统漏洞与补丁检查(补充补丁管理合规要求)
check_system_vuln() {
    echo -e "\n\n【二、系统漏洞与补丁检查】" >> $REPORT_FILE
    echo "---------------------------------------------------------------" >> $REPORT_FILE
    
    OS_VERSION=$(cat /etc/os-release | grep VERSION_ID | cut -d '"' -f 2)
    OS_NAME=$(cat /etc/os-release | grep ID | head -1 | cut -d '=' -f 2)
    if [ "$OS_NAME" = "centos" -a "$OS_VERSION" -lt 7 ] || [ "$OS_NAME" = "ubuntu" -a "$OS_VERSION" -lt 20 ]; then
        echo "2.1 系统版本:$OS_NAME $OS_VERSION(严重)" >> $REPORT_FILE
        echo "   合规依据:CIS Benchmark 1.1.1 禁用EOL系统版本" >> $REPORT_FILE
        echo "   整改建议:升级至CentOS 7+/Ubuntu 20.04+,停止使用已停止维护版本" >> $REPORT_FILE
    else
        echo "2.1 系统版本:$OS_NAME $OS_VERSION(合规)" >> $REPORT_FILE
    fi
    
    echo -e "2.2 安全补丁检查:" >> $REPORT_FILE
    if [ "$OS_NAME" = "centos" ]; then
        SEC_PATCH=$(yum check-update --security 2>/dev/null | wc -l)
    else
        apt update -qq 2>/dev/null
        SEC_PATCH=$(apt list --upgradable -qq | grep -i security | wc -l)
    fi
    if [ $SEC_PATCH -eq 0 ]; then
        echo "   无待安装安全补丁(合规)" >> $REPORT_FILE
        echo "   合规依据:等保2.0 7.1.6.1 补丁管理要求" >> $REPORT_FILE
    else
        echo "   存在$SEC_PATCH个待安装安全补丁(高危)" >> $REPORT_FILE
        echo "   整改建议:CentOS执行yum update --security -y;Ubuntu执行apt upgrade -y --security,升级后重启验证" >> $REPORT_FILE
    fi
    
    if command -v lynis &>/dev/null; then
        echo "2.3 漏洞扫描工具:lynis已安装(合规)" >> $REPORT_FILE
    else
        echo "2.3 漏洞扫描工具:lynis未安装(低危)" >> $REPORT_FILE
        echo "   整改建议:CentOS执行yum install lynis -y;Ubuntu执行apt install lynis -y,用于配置漏洞扫描" >> $REPORT_FILE
    fi
}

# 模块3:服务加固检查(细化SSH/Web服务合规要点)
check_service_harden() {
    echo -e "\n\n【三、服务加固检查】" >> $REPORT_FILE
    echo "---------------------------------------------------------------" >> $REPORT_FILE
    SSH_CONFIG="/etc/ssh/sshd_config"
    
    echo -e "3.1 SSH服务加固:" >> $REPORT_FILE
    ROOT_LOGIN=$(grep -E "^PermitRootLogin" $SSH_CONFIG | cut -d ' ' -f 2)
    if [ "$ROOT_LOGIN" = "no" ]; then
        echo "   3.1.1 禁止root远程登录:已配置(合规)" >> $REPORT_FILE
    else
        echo "   3.1.1 禁止root远程登录:未配置(高危)" >> $REPORT_FILE
        echo "      整改建议:sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' $SSH_CONFIG,重启sshd服务" >> $REPORT_FILE
    fi
    
    PWD_AUTH=$(grep -E "^PasswordAuthentication" $SSH_CONFIG | cut -d ' ' -f 2)
    if [ "$PWD_AUTH" = "no" ]; then
        echo "   3.1.2 SSH密钥认证:已启用(合规)" >> $REPORT_FILE
    else
        echo "   3.1.2 SSH密钥认证:未启用(中危)" >> $REPORT_FILE
        echo "      整改建议:sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' $SSH_CONFIG,配置密钥认证后重启sshd" >> $REPORT_FILE
    fi
    
    PROTOCOL=$(grep -E "^Protocol" $SSH_CONFIG | cut -d ' ' -f 2)
    if [ "$PROTOCOL" = "2" ]; then
        echo "   3.1.3 SSH协议版本:仅启用SSH2(合规)" >> $REPORT_FILE
    else
        echo "   3.1.3 SSH协议版本:可能启用SSH1(低危)" >> $REPORT_FILE
        echo "      整改建议:在$SSH_CONFIG中添加Protocol 2,禁用SSH1协议" >> $REPORT_FILE
    fi
    
    echo -e "\n3.2 Web服务加固(无Web业务则忽略):" >> $REPORT_FILE
    if command -v nginx &>/dev/null; then
        NGINX_CONF=$(nginx -V 2>&1 | grep "conf-path" | cut -d '=' -f 2)
        SERVER_TOKENS=$(grep "server_tokens" $NGINX_CONF 2>/dev/null | awk '{print $2}')
        if [ "$SERVER_TOKENS" = "off;" ]; then
            echo "   3.2.1 Nginx版本隐藏:已配置(合规)" >> $REPORT_FILE
        else
            echo "   3.2.1 Nginx版本隐藏:未配置(低危)" >> $REPORT_FILE
            echo "      整改建议:在$NGINX_CONF中添加server_tokens off;,重启nginx服务" >> $REPORT_FILE
        fi
    elif command -v apache2 &>/dev/null; then
        SERVER_TOKENS=$(grep "ServerTokens" /etc/apache2/apache2.conf 2>/dev/null | awk '{print $2}')
        if [ "$SERVER_TOKENS" = "Prod" ]; then
            echo "   3.2.1 Apache版本隐藏:已配置(合规)" >> $REPORT_FILE
        else
            echo "   3.2.1 Apache版本隐藏:未配置(低危)" >> $REPORT_FILE
            echo "      整改建议:在apache2.conf中设置ServerTokens Prod,重启apache服务" >> $REPORT_FILE
        fi
    else
        echo "   未检测到Nginx/Apache服务(无Web业务,合规)" >> $REPORT_FILE
    fi
}

# 模块4:文件权限与账号检查(补充敏感文件权限合规标准)
check_file_perm() {
    echo -e "\n\n【四、文件权限与账号检查】" >> $REPORT_FILE
    echo "---------------------------------------------------------------" >> $REPORT_FILE
    
    echo -e "4.1 敏感文件权限检查:" >> $REPORT_FILE
    SHADOW_PERM=$(stat -c "%a" /etc/shadow)
    PASSWD_PERM=$(stat -c "%a" /etc/passwd)
    if [ "$SHADOW_PERM" -eq 600 ]; then
        echo "   4.1.1 /etc/shadow权限:$SHADOW_PERM(合规)" >> $REPORT_FILE
        echo "      合规依据:CIS Benchmark 6.1.1 敏感文件权限控制" >> $REPORT_FILE
    else
        echo "   4.1.1 /etc/shadow权限:$SHADOW_PERM(高危)" >> $REPORT_FILE
        echo "      整改建议:执行chmod 600 /etc/shadow,限制仅root可读写" >> $REPORT_FILE
    fi
    if [ "$PASSWD_PERM" -eq 644 ]; then
        echo "   4.1.2 /etc/passwd权限:$PASSWD_PERM(合规)" >> $REPORT_FILE
    else
        echo "   4.1.2 /etc/passwd权限:$PASSWD_PERM(中危)" >> $REPORT_FILE
        echo "      整改建议:执行chmod 644 /etc/passwd,配置正确权限" >> $REPORT_FILE
    fi
    
    EMPTY_PWD=$(grep -E '^[^:]+::' /etc/shadow | wc -l)
    if [ $EMPTY_PWD -eq 0 ]; then
        echo "4.2 空密码账号:无(合规)" >> $REPORT_FILE
    else
        echo "4.2 空密码账号:存在$EMPTY_PWD个(严重)" >> $REPORT_FILE
        echo "   整改建议:执行passwd -l 账号名锁定空密码账号,或设置复杂密码" >> $REPORT_FILE
    fi
    
    SUDO_USER=$(grep -v "^#" /etc/sudoers | grep -v "root ALL" | grep "ALL=(ALL)" | wc -l)
    if [ $SUDO_USER -eq 0 ]; then
        echo "4.3 sudo权限管控:无过度授权(合规)" >> $REPORT_FILE
    else
        echo "4.3 sudo权限管控:$SUDO_USER个用户全量授权(中危)" >> $REPORT_FILE
        echo "   整改建议:通过visudo编辑sudoers文件,仅授权用户必需命令" >> $REPORT_FILE
    fi
}

# 模块5:自查总结(统计风险项,生成整改清单)
check_summary() {
    echo -e "\n\n【五、自查总结与整改清单】" >> $REPORT_FILE
    echo "---------------------------------------------------------------" >> $REPORT_FILE
    SEVERE=$(grep -c "(严重)" $REPORT_FILE)
    HIGH=$(grep -c "(高危)" $REPORT_FILE)
    MEDIUM=$(grep -c "(中危)" $REPORT_FILE)
    LOW=$(grep -c "(低危)" $REPORT_FILE)
    COMPLIANT=$(grep -c "(合规)" $REPORT_FILE)
    
    echo "风险统计:" >> $REPORT_FILE
    echo "   严重风险项:$SEVERE 项(需立即整改,整改时限≤24小时)" >> $REPORT_FILE
    echo "   高危风险项:$HIGH 项(整改时限≤24小时)" >> $REPORT_FILE
    echo "   中危风险项:$MEDIUM 项(整改时限≤7天)" >> $REPORT_FILE
    echo "   

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/566.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
网站如何设404页面、500等错误页面,有什么漏洞?怎么预
阿里云系统漏洞修复合集——高危漏洞提醒【云盾-安骑士】
Java JSON 组件选型之 FastJson 为什么总有漏洞
查查你是个什么企业,骗子的帮凶,诈骗的集中营,通过查查骚扰企业电话不断,为所欲为的查查
Java有序读取配置文件,有序读取ini配置文件
Springboot + Freemarker 集成配置
ICP怎么操作取消备案,企业、个人怎么自己申请取消备案?
Shiro教程(四)Shiro + Redis配置
阿里云Linux、代理Squid服务安装,高匿、用户/密码校验配置
Springboot + Mybatis +Maven 自动生成 Mapper.xml,Entity,Dao。 generator 配置
最新文章
文件上传漏洞与防御 4058
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 1444
物联网时代2026年时序数据库选型指南 1151
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 1269
神经网络:从构造到模型训练全链路解析 1168
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 1593
Linux sudo提权完整指南:从基础用法到生产级安全配置 691
XSS 和 CSRF 的本质区别及开发防御全解析 772
JVM垃圾回收(GC)全维度解析:从原理到调优实战 813
Linux动静态库与ELF加载全解析:从实操制作到底层原理 912
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 783114
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 711464
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679993
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562673
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512621
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484794
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 302947
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247433
Elasticsearch教程(一),全程直播(小白级别) 233097
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228329
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...