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

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

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

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

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

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

二、脚本核心功能架构

安全审计脚本 账户安全 登录审计 网络检测 进程分析 计划任务 特权账户 空密码账户 SSH暴力破解 异常端口 CPU占用TOP10 隐藏Cron任务

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

bash 复制代码
#!/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. 输出结果需要根据您的实际环境进行分析判断
相关推荐
Johny_Zhao28 分钟前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
用户962377954486 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机9 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机9 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544810 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star10 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544814 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
YuMiao14 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端