← 返回博客
·Linkmetax 安全团队·12 分钟阅读
技术主管必看:如何用 1 个无害化脚本完成企业内网服务器的全面"技术审计"与漏洞扫描
企业服务器无害化技术审计脚本完整方案。系统配置 / 用户权限 / 服务暴露 / 补丁状态 / 弱密码 5 大维度自动化扫描,比外部渗透测试便宜 10 倍。
技术审计漏洞扫描安全检查
「老板说要做安全审计,外部安全公司报价 30 万 / 周。我们公司一共就 50 台服务器,能不能内部做?」
这是中小企业 IT 主管最常纠结的问题。完全自查 → 漏看;外部渗透 → 太贵。最佳路径是:先内部跑无害化审计脚本找出 80% 问题 → 关键场景请外部做穿透测试验证。这篇给一套实操审计方案。
一、为什么"无害化"重要
渗透测试 vs 技术审计
- 渗透测试:模拟黑客真攻击,可能造成业务影响
- 技术审计:只检查配置 / 状态,不实际攻击
技术审计能发现 80% 的安全问题
- 弱密码 / 默认密码
- 危险端口暴露
- 补丁缺失
- 配置不当
- 权限过大
剩余 20% 才需要专业渗透测试发现。
二、5 大审计维度
1. 系统配置(OS / 密码策略 / 防火墙)
2. 用户权限(账号 / 组 / sudo)
3. 服务暴露(端口 / 服务版本)
4. 补丁状态(已知 CVE)
5. 弱密码 / 默认凭据
三、维度 1:系统配置审计
Linux 服务器检查项
#!/bin/bash
# linux-audit.sh
echo "===== 系统配置审计 ====="
# 1. 系统版本
echo "--- OS 版本 ---"
cat /etc/os-release | grep PRETTY_NAME
uname -r
# 2. 密码策略
echo "--- 密码策略 ---"
grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN" /etc/login.defs
# 3. SSH 配置
echo "--- SSH 配置 ---"
grep -E "^(PermitRootLogin|PasswordAuthentication|Port)" /etc/ssh/sshd_config
# 4. 防火墙状态
echo "--- 防火墙 ---"
if command -v ufw &> /dev/null; then
ufw status
elif command -v firewall-cmd &> /dev/null; then
firewall-cmd --list-all
fi
# 5. SELinux / AppArmor
echo "--- SELinux/AppArmor ---"
sestatus 2>/dev/null
aa-status 2>/dev/null | head -5
# 6. 自动更新
echo "--- 自动更新 ---"
if [ -f /etc/apt/apt.conf.d/20auto-upgrades ]; then
cat /etc/apt/apt.conf.d/20auto-upgrades
fi
关键红线项
- ❌
PermitRootLogin yes - ❌
PasswordAuthentication yes且暴露公网 - ❌ 防火墙关闭
- ❌ 密码无过期策略
四、维度 2:用户权限审计
echo "===== 用户权限审计 ====="
# 1. UID 0 的账号(root)
echo "--- UID 0 账号 ---"
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 2. 无密码账号
echo "--- 无密码账号 ---"
awk -F: '$2 == "" {print $1}' /etc/shadow 2>/dev/null
# 3. 可登录账号(shell != nologin)
echo "--- 可登录账号 ---"
grep -E "/bin/(bash|sh|zsh)$" /etc/passwd | cut -d: -f1
# 4. sudo 权限
echo "--- sudoers ---"
cat /etc/sudoers
ls /etc/sudoers.d/ 2>/dev/null
grep -E "^[^#].*ALL" /etc/sudoers.d/* 2>/dev/null
# 5. 90 天未登录的账号
echo "--- 长期未登录账号 ---"
lastlog -b 90 | grep -v "Never logged in"
# 6. 检查 .ssh/authorized_keys
echo "--- SSH Authorized Keys ---"
for u in $(awk -F: '{print $1}' /etc/passwd); do
keyfile="/home/$u/.ssh/authorized_keys"
[ -f "$keyfile" ] && echo "$u: $(wc -l < $keyfile) keys"
done
关键红线项
- ❌ 多个 UID 0 账号
- ❌ 无密码账号
- ❌ 长期未登录但活跃的账号
- ❌ authorized_keys 含未知公钥
五、维度 3:服务暴露审计
echo "===== 服务暴露审计 ====="
# 1. 监听端口
echo "--- 监听端口 ---"
ss -tlnp
# 2. 危险端口检查
echo "--- 危险端口暴露 ---"
DANGER_PORTS="22 23 445 1433 3306 3389 5432 6379 9200 11211 27017"
for port in $DANGER_PORTS; do
if ss -tln | grep -q ":$port "; then
# 检查是否绑定 0.0.0.0
if ss -tln | grep ":$port " | grep -q "0.0.0.0"; then
echo "⚠️ 端口 $port 暴露到 0.0.0.0"
fi
fi
done
# 3. 正在运行的服务版本
echo "--- 服务版本 ---"
for svc in nginx apache2 mysql postgresql redis-server mongod ssh; do
version=$($svc -v 2>&1 | head -1)
[ -n "$version" ] && echo "$svc: $version"
done
关键红线项
- ❌ MySQL / PostgreSQL / Redis / Mongo / ES 暴露到 0.0.0.0
- ❌ SSH 监听公网
- ❌ 服务版本严重过期
六、维度 4:补丁状态审计
echo "===== 补丁状态审计 ====="
# 1. 可用更新数量
echo "--- 可更新包数量 ---"
if command -v apt &> /dev/null; then
apt list --upgradable 2>/dev/null | grep -c upgradable
fi
# 2. 安全更新
echo "--- 安全更新 ---"
if command -v unattended-upgrade &> /dev/null; then
unattended-upgrade --dry-run -d 2>&1 | grep "Packages that will"
fi
# 3. 关键 CVE 检查(kernel)
echo "--- Kernel 版本 ---"
uname -r
# 对比 https://ubuntu.com/security/cve 查最近 CVE
# 4. 上次更新时间
echo "--- 上次 apt update ---"
stat /var/lib/apt/periodic/update-success-stamp 2>/dev/null | grep "Modify"
关键红线项
- ❌ 30+ 天未更新
- ❌ kernel 严重老旧(< 5.x)
- ❌ 有未应用的安全更新
七、维度 5:弱密码审计
⚠️ 注意:只在授权环境扫描
echo "===== 弱密码审计 ====="
# 1. 检查 /etc/shadow 加密强度
echo "--- 密码 hash 类型 ---"
awk -F: '$2 ~ /^\$1\$/ {print $1 ": MD5(弱)"}
$2 ~ /^\$2\$/ {print $1 ": Blowfish"}
$2 ~ /^\$5\$/ {print $1 ": SHA256"}
$2 ~ /^\$6\$/ {print $1 ": SHA512(推荐)"}' /etc/shadow 2>/dev/null
# 2. 检查默认凭据(针对常见服务,需安全审计权限)
# 不建议在生产跑 - 仅在隔离测试环境
关键红线项
- ❌ MD5 加密的密码 hash
- ❌ 默认凭据未改(如 root/root, admin/admin)
八、汇总报告脚本
#!/bin/bash
# full-audit.sh - 完整审计 + HTML 报告
HOSTNAME=$(hostname)
DATE=$(date +%Y%m%d_%H%M%S)
REPORT="/tmp/audit-$HOSTNAME-$DATE.html"
cat > $REPORT <<EOF
<!DOCTYPE html>
<html><head><meta charset="utf-8">
<title>安全审计报告 - $HOSTNAME</title>
<style>
body { font-family: monospace; max-width: 1200px; margin: 20px auto; padding: 20px; }
h2 { background: #2c3e50; color: white; padding: 10px; }
.danger { background: #fff3f3; padding: 10px; border-left: 4px solid #e74c3c; margin: 10px 0; }
.warning { background: #fff8e1; padding: 10px; border-left: 4px solid #f39c12; margin: 10px 0; }
.ok { background: #f0f9eb; padding: 10px; border-left: 4px solid #2ecc71; margin: 10px 0; }
pre { background: #f8f9fa; padding: 15px; overflow-x: auto; }
</style></head><body>
<h1>安全审计报告</h1>
<p><strong>主机</strong>: $HOSTNAME</p>
<p><strong>时间</strong>: $(date)</p>
<p><strong>OS</strong>: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)</p>
EOF
# 运行各项检查并 append
{
echo "<h2>1. 系统配置</h2><pre>"
bash linux-audit.sh 2>&1
echo "</pre>"
echo "<h2>2. 用户权限</h2><pre>"
bash user-audit.sh 2>&1
echo "</pre>"
echo "<h2>3. 服务暴露</h2><pre>"
bash service-audit.sh 2>&1
echo "</pre>"
echo "<h2>4. 补丁状态</h2><pre>"
bash patch-audit.sh 2>&1
echo "</pre>"
echo "</body></html>"
} >> $REPORT
echo "审计完成: $REPORT"
九、专业工具推荐
系统基线
-
Lynis(开源 ⭐):Linux 系统安全审计
sudo apt install lynis lynis audit system -
OpenSCAP:CIS Benchmark 标准
-
Microsoft Baseline Security Analyzer(Windows)
漏洞扫描
- OpenVAS / Greenbone(开源)
- Nessus(商业,年付 5,000 美金)
- Qualys(云端,企业级)
Web 应用
- OWASP ZAP(开源)
- Burp Suite(半免费)
代码扫描
- Trivy(容器镜像 + 代码)
- Semgrep(代码模式扫描)
十、审计后的行动清单
立即修(< 24h)
- 公网暴露的数据库 / Redis
- 弱密码 / 默认凭据
- root SSH 直登
- 暴露的管理界面
1 周内修
- 安全补丁
- 长期未登录账号清理
- 服务版本严重过期
1 月内修
- 完善备份策略
- 加 MFA
- 加 EDR
写在最后
技术审计是发现问题,但修复 + 持续监控才是终点。
我们提供 免费《高级 IT 架构与系统安全漏洞远程审计》:
- 1-3 天扫描你公司全部服务器
- 输出标准化审计报告(含修复建议)
- Linkmetax 内部沉淀的无害化脚本
- 5 大维度 + 50+ 检查项
- 24 小时内出报告
📞 页面留下联系方式 → 联系销售申请免费审计 →
或了解我们的 企业 IT 安全方案。
📥PDF 白皮书
下载《技术主管必看:如何用 1 个无害化脚本完成企业内网服务器的全面"技术审计"与漏洞扫描》PDF 完整版
留下邮箱,立刻获取本文 PDF + 后续企业 AI / 软件采购干货
- ✓ 含全部图表、检查清单、参考链接
- ✓ 可用于内部分享 / 招投标资料引用
- ✓ 后续更新自动推送 · 不发垃圾邮件
