> 技术文档 > Linux服务器安全自动化审计实战:一键扫描账户/网络/进程/计划任务风险(附开源脚本)

Linux服务器安全自动化审计实战:一键扫描账户/网络/进程/计划任务风险(附开源脚本)


一、背景与痛点:为什么需要安全审计脚本

在日常服务器运维中,安全团队常面临三大挑战:

  1. 人工巡检效率低下:手动检查账户、网络连接等需执行十余条命令
  2. 隐蔽威胁难发现:异常计划任务、伪装进程等易被忽略
  3. 合规压力:等保2.0等规范要求定期安全审计

为此,我们开发了这款开源的Linux安全自动化审计脚本,可实现:

  • 5分钟内完成全维度安全检查
  • 输出结构化风险报告
  • 关键风险项自动标红预警

二、脚本核心功能架构

#mermaid-svg-S3gko2zYC5cULlMT {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-S3gko2zYC5cULlMT .error-icon{fill:#552222;}#mermaid-svg-S3gko2zYC5cULlMT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-S3gko2zYC5cULlMT .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-S3gko2zYC5cULlMT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-S3gko2zYC5cULlMT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-S3gko2zYC5cULlMT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-S3gko2zYC5cULlMT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-S3gko2zYC5cULlMT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-S3gko2zYC5cULlMT .marker.cross{stroke:#333333;}#mermaid-svg-S3gko2zYC5cULlMT svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-S3gko2zYC5cULlMT .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-S3gko2zYC5cULlMT .cluster-label text{fill:#333;}#mermaid-svg-S3gko2zYC5cULlMT .cluster-label span{color:#333;}#mermaid-svg-S3gko2zYC5cULlMT .label text,#mermaid-svg-S3gko2zYC5cULlMT span{fill:#333;color:#333;}#mermaid-svg-S3gko2zYC5cULlMT .node rect,#mermaid-svg-S3gko2zYC5cULlMT .node circle,#mermaid-svg-S3gko2zYC5cULlMT .node ellipse,#mermaid-svg-S3gko2zYC5cULlMT .node polygon,#mermaid-svg-S3gko2zYC5cULlMT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-S3gko2zYC5cULlMT .node .label{text-align:center;}#mermaid-svg-S3gko2zYC5cULlMT .node.clickable{cursor:pointer;}#mermaid-svg-S3gko2zYC5cULlMT .arrowheadPath{fill:#333333;}#mermaid-svg-S3gko2zYC5cULlMT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-S3gko2zYC5cULlMT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-S3gko2zYC5cULlMT .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-S3gko2zYC5cULlMT .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-S3gko2zYC5cULlMT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-S3gko2zYC5cULlMT .cluster text{fill:#333;}#mermaid-svg-S3gko2zYC5cULlMT .cluster span{color:#333;}#mermaid-svg-S3gko2zYC5cULlMT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-S3gko2zYC5cULlMT :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}安全审计脚本账户安全登录审计网络检测进程分析计划任务特权账户空密码账户SSH暴力破解异常端口CPU占用TOP10隐藏Cron任务

三、SSH安全检查脚本:包含了检查系统账户、登录、网络连接、进程和计划任务等安全项,并添加注释和格式输出:

#!/bin/bash# SSH安全审计脚本# 功能:检查系统账户、登录、网络连接、进程和计划任务等安全项echo -e \"\\n\\033[34m============= 账户安全检查 =============\\033[0m\"# 1. 检查新增异常账户echo -e \"\\n\\033[32m[1] 检查/etc/passwd中的异常账户:\\033[0m\"cat /etc/passwd | awk -F: \'{if($3>=500 && $3<65534 || $3==0) print $0}\' | grep -v \"^root\"# 2. 检查属组为0的非root账户echo -e \"\\n\\033[32m[2] 检查属组为0的非root账户:\\033[0m\"awk -F: \'$4==0 && $1!=\"root\"{print $1}\' /etc/passwd# 3. 检查特权用户(uid为0)echo -e \"\\n\\033[32m[3] 检查特权用户(uid为0):\\033[0m\"awk -F: \'$3==0{print $1}\' /etc/passwd# 4. 检查可远程登录的账户echo -e \"\\n\\033[32m[4] 检查可远程登录的账户:\\033[0m\"awk -F: \'($2!=\"*\" && $2!=\"!!\"){print $1}\' /etc/shadow# 5. 检查有sudo权限的非root账户echo -e \"\\n\\033[32m[5] 检查有sudo权限的非root账户:\\033[0m\"grep -v \"^#\\|^$\\|^root\" /etc/sudoers | grep \"ALL=(ALL)\"echo -e \"\\n\\033[34m============= 登录安全检查 =============\\033[0m\"# 6. 检查最近成功登录的IPecho -e \"\\n\\033[32m[6] 最近成功登录的IP:\\033[0m\"last | head -n 20# 7. 检查登录失败的记录echo -e \"\\n\\033[32m[7] 最近登录失败的记录:\\033[0m\"if [ -f /var/log/btmp ]; then lastb | head -n 20else echo \"登录失败日志(/var/log/btmp)不存在\"fiecho -e \"\\n\\033[34m============= 网络连接检查 =============\\033[0m\"# 8. 检查当前网络连接echo -e \"\\n\\033[32m[8] 当前网络连接:\\033[0m\"netstat -antp | grep -E \'ESTABLISHED|LISTEN\'# 9. 检查开放端口echo -e \"\\n\\033[32m[9] 当前开放端口:\\033[0m\"netstat -tulnpecho -e \"\\n\\033[34m============= 进程检查 =============\\033[0m\"# 10. 检查高CPU/内存进程echo -e \"\\n\\033[32m[10] 高CPU使用进程:\\033[0m\"ps aux --sort=-pcpu | head -n 10echo -e \"\\n\\033[32m[11] 高内存使用进程:\\033[0m\"ps aux --sort=-pmem | head -n 10# 11. 检查长时间运行进程echo -e \"\\n\\033[32m[12] 长时间运行进程:\\033[0m\"ps -eo pid,user,comm,etime | grep -E \' ([0-9]+-)?[0-9]{2}:[0-9]{2}:[0-9]{2}\'echo -e \"\\n\\033[34m============= 计划任务检查 =============\\033[0m\"# 12. 检查系统计划任务echo -e \"\\n\\033[32m[13] 系统cron任务:\\033[0m\"cat /etc/crontab | grep -v \"^#\"# 13. 检查用户计划任务echo -e \"\\n\\033[32m[14] 用户cron任务:\\033[0m\"for user in $(cut -f1 -d: /etc/passwd); do crontab -l -u $user 2>/dev/null; done# 14. 检查cron.d目录echo -e \"\\n\\033[32m[15] /etc/cron.d/目录内容:\\033[0m\"ls -la /etc/cron.d/echo -e \"\\n\\033[34m============= 启动项检查 =============\\033[0m\"# 15. 检查启动项echo -e \"\\n\\033[32m[16] /etc/init.d/目录内容:\\033[0m\"ls -la /etc/init.d/echo -e \"\\n\\033[32m[17] /etc/rc.local内容:\\033[0m\"cat /etc/rc.local | grep -v \"^#\"echo -e \"\\n\\033[32m[18] 检查系统服务:\\033[0m\"if command -v systemctl >/dev/null; then systemctl list-unit-files | grep enabledelse chkconfig --list | grep \":on\"fiecho -e \"\\n\\033[34m============= 检查完成 =============\\033[0m\"

使用说明:

  1. 将上述脚本保存为security_check.sh
  2. 给脚本执行权限:chmod +x security_check.sh
  3. 执行脚本生成日志:sh /usr/local/bin/security_check.sh > security_audit_$(date +%F).log

脚本特点:

  1. 按类别分组输出,颜色区分不同部分
  2. 每个检查项都有编号和标题
  3. 对关键信息进行过滤,减少干扰
  4. 自动检测系统类型使用合适的命令
  5. 对可能不存在的日志文件进行检查

注意事项:

  1. 部分命令需要root权限才能获取完整信息,建议使用sudo执行
  2. 某些系统可能没有lastb命令或/var/log/btmp文件
  3. 输出结果需要根据您的实际环境进行分析判断