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. 输出结果需要根据您的实际环境进行分析判断
相关推荐
Python私教2 小时前
签名 URL 刷新导致审批失效?别急着删掉所有 query
python·安全
weixin_618232302 小时前
OpenAI 因安全暂停 Astra:前沿 Agent 第一次撞上“关键级”红线
安全
Python私教3 小时前
一次性批准令牌:挡住旧授权误发新版本的工程设计
python·安全
漫路在线3 小时前
无境红日靶场五 wp
网络·安全·web安全
sxstj4 小时前
Ubuntu 完整安装并启用 Flatpak 教程
linux·运维·ubuntu
Sylvia33.4 小时前
从轮询到推送:足球数据API架构演进与火星数据技术拆解
java·服务器·网络·python·websocket·架构
天疆说4 小时前
Ubuntu 26.04 下 Intel Meteor Lake 核显 + NPU 驱动配置与 PyTorch NPU 推理实测
linux·pytorch·ubuntu
AmyLin_20014 小时前
PDF 脱敏技术【1】:PDF 脱敏不是盖黑框:为什么敏感信息仍能被复制,正确的保护方式是什么?
安全·pdf·sdk·脱敏·文档安全·pdf 脱敏·智能脱敏
mounter6255 小时前
突破单点限制:BPF 多跟踪点高效附加机制与新 ftrace 架构解析
linux·ebpf·linux kernel·kernel·ftrace
刘某的Cloud5 小时前
Galera Cluster部署 mariadb 节点down机,log sequence number恢复
linux·运维·数据库·负载均衡·mariadb·集群·高可用