ANALYSIS
创建安全漏洞扫描脚本 security_scan.sh
PRTCL // BASH
#!/bin/bash
# 配置:安全扫描参数(可按需修改)REPORT_DIR="$HOME/security_reports"DATE=$(date +%Y%m%d_%H%M%S)REPORT_FILE="$REPORT_DIR/security_report_$DATE.txt"EMAIL="admin@example.com"
# 创建报告目录mkdir -p "$REPORT_DIR"
# 初始化报告文件echo "安全扫描报告 - $(date)" > "$REPORT_FILE"echo "========================================" >> "$REPORT_FILE"
# 检查开放端口echo "1. 开放端口检查:" >> "$REPORT_FILE"netstat -tuln | grep LISTEN >> "$REPORT_FILE"echo "" >> "$REPORT_FILE"
# 检查 SSH 配置echo "2. SSH 配置检查:" >> "$REPORT_FILE"if grep -q "PermitRootLogin yes" /etc/ssh/sshd_config; then echo "[警告] SSH 允许 root 登录" >> "$REPORT_FILE"else echo "[安全] SSH 禁止 root 登录" >> "$REPORT_FILE"fi
if grep -q "PasswordAuthentication yes" /etc/ssh/sshd_config; then echo "[警告] SSH 允许密码认证" >> "$REPORT_FILE"else echo "[安全] SSH 禁用密码认证" >> "$REPORT_FILE"fi
if ! grep -q "Port 22" /etc/ssh/sshd_config; then echo "[安全] SSH 端口已更改" >> "$REPORT_FILE"else echo "[警告] SSH 使用默认端口 22" >> "$REPORT_FILE"fiecho "" >> "$REPORT_FILE"
# 检查用户权限echo "3. 用户权限检查:" >> "$REPORT_FILE"echo "具有 sudo 权限的用户:" >> "$REPORT_FILE"grep -Po '^sudo.+ALL=\(ALL\) .+' /etc/group | cut -d: -f4 >> "$REPORT_FILE"echo "" >> "$REPORT_FILE"
# 检查弱密码用户echo "4. 弱密码用户检查:" >> "$REPORT_FILE"# 检查密码为空或过期的账户awk -F: '($2==""){print $1" has empty password"}' /etc/shadow >> "$REPORT_FILE"awk -F: '($2!="*" && $2!="!" && $2!~ /^\$[12356]/){print $1" has weak password hash"}' /etc/shadow >> "$REPORT_FILE"echo "" >> "$REPORT_FILE"
# 检查系统更新echo "5. 系统更新检查:" >> "$REPORT_FILE"if command -v apt-get &> /dev/null; then UPDATES=$(apt-get -s -o Debug::NoLocking=true upgrade | grep -c "^Inst") echo "可用更新数量: $UPDATES" >> "$REPORT_FILE"elif command -v yum &> /dev/null; then UPDATES=$(yum check-update --quiet | wc -l) echo "可用更新数量: $UPDATES" >> "$REPORT_FILE"fiecho "" >> "$REPORT_FILE"
# 检查防火墙状态echo "6. 防火墙状态检查:" >> "$REPORT_FILE"if command -v ufw &> /dev/null && ufw status | grep -q "Status: active"; then echo "[安全] UFW 防火墙已启用" >> "$REPORT_FILE" ufw status >> "$REPORT_FILE"elif command -v iptables &> /dev/null && iptables -L | grep -q "policy"; then echo "[安全] iptables 防火墙已启用" >> "$REPORT_FILE" iptables -L -n >> "$REPORT_FILE"else echo "[警告] 防火墙未启用或未安装" >> "$REPORT_FILE"fiecho "" >> "$REPORT_FILE"
# 检查系统日志中的异常登录echo "7. 异常登录检查:" >> "$REPORT_FILE"FAIL_LOGINS=$(grep -i "failed\|invalid\|error" /var/log/auth.log | tail -20)if [ -n "$FAIL_LOGINS" ]; then echo "最近的登录失败记录:" >> "$REPORT_FILE" echo "$FAIL_LOGINS" >> "$REPORT_FILE"else echo "未发现异常登录记录" >> "$REPORT_FILE"fiecho "" >> "$REPORT_FILE"
# 检查 Web 服务器安全配置(如果安装了 Apache 或 Nginx)echo "8. Web 服务器安全配置检查:" >> "$REPORT_FILE"if command -v apache2 &> /dev/null || command -v httpd &> /dev/null; then if [ -f /etc/apache2/conf-available/security.conf ] || [ -f /etc/httpd/conf.d/security.conf ]; then if grep -q "ServerTokens Prod" /etc/apache2/conf-available/security.conf 2>/dev/null || grep -q "ServerTokens Prod" /etc/httpd/conf.d/security.conf 2>/dev/null; then echo "[安全] Apache ServerTokens 已设置为 Prod" >> "$REPORT_FILE" else echo "[警告] Apache ServerTokens 可能暴露版本信息" >> "$REPORT_FILE" fi fielif command -v nginx &> /dev/null; then if grep -q "server_tokens off" /etc/nginx/nginx.conf 2>/dev/null || grep -q "server_tokens off" /etc/nginx/conf.d/*.conf 2>/dev/null; then echo "[安全] Nginx server_tokens 已禁用" >> "$REPORT_FILE" else echo "[警告] Nginx server_tokens 可能暴露版本信息" >> "$REPORT_FILE" fifiecho "" >> "$REPORT_FILE"
# 检查文件权限echo "9. 重要文件权限检查:" >> "$REPORT_FILE"echo "/etc/passwd 权限: $(ls -l /etc/passwd)" >> "$REPORT_FILE"echo "/etc/shadow 权限: $(ls -l /etc/shadow)" >> "$REPORT_FILE"echo "/etc/hosts.allow 权限: $(ls -l /etc/hosts.allow)" >> "$REPORT_FILE"echo "/etc/hosts.deny 权限: $(ls -l /etc/hosts.deny)" >> "$REPORT_FILE"echo "" >> "$REPORT_FILE"
# 检查是否发现高风险问题HIGH_RISK=$(grep -c "\[警告\]" "$REPORT_FILE")if [ "$HIGH_RISK" -gt 0 ]; then echo "发现 $HIGH_RISK 个高风险问题,请立即处理!" >> "$REPORT_FILE"
# 发送告警邮件 if command -v mail &> /dev/null; then echo "安全扫描发现 $HIGH_RISK 个高风险问题,请立即查看报告: $REPORT_FILE" | mail -s "安全告警 - $(hostname)" "$EMAIL" fielse echo "未发现高风险问题,系统安全状况良好。" >> "$REPORT_FILE"fi
echo "安全扫描完成,报告已保存到: $REPORT_FILE"R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.06
Auth_Verified: 2026.04.06
