#!/usr/bin/env bash # check-credential-leaks — falla si journald reciente contiene patrones de credencial. # Regla permanente: los secretos jamás en logs. Ejecutar manualmente o desde cron # (sin timer propio: no fue autorizado). set -euo pipefail SINCE="${1:-2 hours ago}" HITS=$(journalctl --since "$SINCE" --no-pager 2>/dev/null | grep -cE "(postgres|postgresql)://[A-Za-z0-9_]+:[^@[:space:]]{8,}@|nsec1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{50,}" || true) if [ "$HITS" -gt 0 ]; then echo "ALERTA: $HITS líneas de journald (desde $SINCE) contienen patrones de credencial" >&2 journalctl --since "$SINCE" --no-pager 2>/dev/null | grep -nE "(postgres|postgresql)://[A-Za-z0-9_]+:[^@[:space:]]{8,}@|nsec1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{50,}" | sed -E "s#(://[A-Za-z0-9_]+:)[^@[:space:]]{8,}@#\1***@#" | head -5 exit 1 fi echo "OK: sin patrones de credencial en journald desde $SINCE"