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

发布于:2025-07-25 ⋅ 阅读:(21) ⋅ 点赞:(0)

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

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

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

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

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

二、脚本核心功能架构

安全审计脚本
账户安全
登录审计
网络检测
进程分析
计划任务
特权账户
空密码账户
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. 检查最近成功登录的IP
echo -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 20
else
    echo "登录失败日志(/var/log/btmp)不存在"
fi

echo -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 -tulnp

echo -e "\n\033[34m============= 进程检查 =============\033[0m"

# 10. 检查高CPU/内存进程
echo -e "\n\033[32m[10] 高CPU使用进程:\033[0m"
ps aux --sort=-pcpu | head -n 10

echo -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 enabled
else
    chkconfig --list | grep ":on"
fi

echo -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. 输出结果需要根据您的实际环境进行分析判断

网站公告

今日签到

点亮在社区的每一天
去签到