diff --git a/ssh_key_checks b/ssh_key_checks index e4eaae4..ca5d10f 100644 --- a/ssh_key_checks +++ b/ssh_key_checks @@ -1,22 +1,81 @@ #!/bin/bash -# Se debe ejecutar como root para poder leer archivos protegidos +# Script para analizar configuraciones de SSH y buscar claves en el sistema. +SSHD_CONFIG="/etc/ssh/sshd_config" +DEFAULT_SSH="/etc/default/ssh" + +echo "🔍 Analizando $SSHD_CONFIG..." +echo "--------------------------------------" + +# Buscar lĂ­neas Include en sshd_config +INCLUDE_FILES=$(grep -E "^\s*Include\s+" "$SSHD_CONFIG" | awk '{print $2}') +if [[ -n "$INCLUDE_FILES" ]]; then + echo "✅ Se encontraron archivos incluidos en sshd_config:" + echo "$INCLUDE_FILES" +else + echo "❌ No se encontraron archivos Include en sshd_config." +fi +echo "--------------------------------------" + +# Verificar si AuthorizedKeysFile estĂĄ presente en sshd_config o archivos incluidos +AUTHORIZED_KEYS_FOUND=0 +SEARCH_FILES=("$SSHD_CONFIG") + +# Agregar archivos incluidos a la lista de bĂșsqueda +for file in $INCLUDE_FILES; do + [[ -f "$file" ]] && SEARCH_FILES+=("$file") +done + +for file in "${SEARCH_FILES[@]}"; do + if grep -qE "^\s*AuthorizedKeysFile" "$file"; then + echo "✅ Se encontrĂł AuthorizedKeysFile en: $file" + AUTHORIZED_KEYS_FOUND=1 + fi +done + +if [[ $AUTHORIZED_KEYS_FOUND -eq 0 ]]; then + echo "❌ No se encontrĂł AuthorizedKeysFile en sshd_config ni en archivos incluidos." +fi +echo "--------------------------------------" + +# Analizar /etc/default/ssh +echo "🔍 Analizando $DEFAULT_SSH..." +if [[ ! -f "$DEFAULT_SSH" ]]; then + echo "❌ El archivo $DEFAULT_SSH no existe." +else + SSHD_OPTS_VALUE=$(grep -E "^SSHD_OPTS=" "$DEFAULT_SSH" | cut -d '=' -f2- | tr -d ' ') + TOTAL_LINES=$(grep -vE "^\s*(#|$)" "$DEFAULT_SSH" | wc -l) + + if [[ -z "$SSHD_OPTS_VALUE" ]]; then + echo "✅ La variable SSHD_OPTS estĂĄ vacĂ­a." + else + echo "❌ La variable SSHD_OPTS tiene un valor: '$SSHD_OPTS_VALUE'" + fi + + if [[ "$TOTAL_LINES" -eq 1 ]]; then + echo "✅ No hay lĂ­neas adicionales en $DEFAULT_SSH." + else + echo "❌ Se encontraron lĂ­neas adicionales en $DEFAULT_SSH." + fi +fi + +echo "--------------------------------------" + +# Buscar archivos de claves SSH en todo el sistema echo "🔍 Buscando archivos de claves SSH en todo el sistema..." echo "------------------------------------------------------------" printf "%-20s %-50s %-10s %-15s %-10s\n" "Usuario" "Ruta del archivo" "Permisos" "SSH Habilitado" "Llaves" echo "------------------------------------------------------------" -# Buscar archivos que puedan contener claves SSH -KEY_FILES=$(find / -type f \( -name "authorized_keys" -o -name "*.pub" -o -name "*keys*" -o -name "*id_rsa*" -o -name "*id_ed25519*" \) 2>/dev/null) - -# Variables para almacenar usuarios con llaves +KEY_FILES=$(find / -type f \( -name "authorized_keys" -o -name "*.pub" -o -name "*id_rsa*" -o -name "*id_ed25519*" \) 2>/dev/null) USERS_WITH_KEYS=() # Obtener listas de usuarios permitidos/denegados en sshd_config -ALLOW_USERS=$(grep -E "^\s*AllowUsers" /etc/ssh/sshd_config | awk '{$1=""; print $0}') -DENY_USERS=$(grep -E "^\s*DenyUsers" /etc/ssh/sshd_config | awk '{$1=""; print $0}') -ALLOW_GROUPS=$(grep -E "^\s*AllowGroups" /etc/ssh/sshd_config | awk '{$1=""; print $0}') -DENY_GROUPS=$(grep -E "^\s*DenyGroups" /etc/ssh/sshd_config | awk '{$1=""; print $0}') +SSHD_CONFIG="/etc/ssh/sshd_config" +ALLOW_USERS=$(grep -E "^\s*AllowUsers" "$SSHD_CONFIG" | awk '{$1=""; print $0}') +DENY_USERS=$(grep -E "^\s*DenyUsers" "$SSHD_CONFIG" | awk '{$1=""; print $0}') +ALLOW_GROUPS=$(grep -E "^\s*AllowGroups" "$SSHD_CONFIG" | awk '{$1=""; print $0}') +DENY_GROUPS=$(grep -E "^\s*DenyGroups" "$SSHD_CONFIG" | awk '{$1=""; print $0}') # Leer usuarios del sistema while IFS=: read -r username _ _ _ _ homedir _; do @@ -28,10 +87,8 @@ while IFS=: read -r username _ _ _ _ homedir _; do file_owner=$(stat -c "%U" "$key_file" 2>/dev/null) if [[ "$file_owner" == "$username" ]]; then permisos=$(stat -c "%a" "$key_file") - - # Verificar si el archivo contiene claves SSH num_llaves=$(grep -E -c "^(ssh-rsa|ssh-ed25519)" "$key_file" 2>/dev/null) - + if [[ $num_llaves -gt 0 ]]; then user_has_keys=1 user_keys_paths+=("$key_file;$permisos;$num_llaves") @@ -41,14 +98,13 @@ while IFS=: read -r username _ _ _ _ homedir _; do # Determinar si el usuario puede hacer SSH ssh_habilitado="SĂ­" - if [[ -n "$ALLOW_USERS" && ! "$ALLOW_USERS" =~ "$username" ]]; then ssh_habilitado="No" fi if [[ -n "$DENY_USERS" && "$DENY_USERS" =~ "$username" ]]; then ssh_habilitado="No" fi - + # Si hay restricciones por grupo user_groups=$(id -Gn "$username") if [[ -n "$ALLOW_GROUPS" ]]; then @@ -68,16 +124,18 @@ while IFS=: read -r username _ _ _ _ homedir _; do done fi - # Mostrar en pantalla si tiene llaves vĂĄlidas + # Mostrar en pantalla solo si hay llaves vĂĄlidas if [[ ${#user_keys_paths[@]} -gt 0 ]]; then first_entry=1 + total_keys=0 for key_entry in "${user_keys_paths[@]}"; do IFS=";" read -r key_path permisos num_llaves <<< "$key_entry" + total_keys=$((total_keys + num_llaves)) if [[ $first_entry -eq 1 ]]; then printf "%-20s %-50s %-10s %-15s %-10s\n" "$username" "$key_path" "$permisos" "$ssh_habilitado" "$num_llaves" first_entry=0 else - printf "%-20s %-50s %-10s %-15s %-10s\n" "" "$key_path" "$permisos" "" "" + printf "%-20s %-50s %-10s %-15s %-10s\n" "" "$key_path" "$permisos" "" "$num_llaves" fi done USERS_WITH_KEYS+=("$username:${user_keys_paths[*]}") @@ -101,8 +159,8 @@ if [[ ${#USERS_WITH_KEYS[@]} -gt 0 ]]; then echo "------------------------------------------------------------" for key_entry in "${key_paths[@]}"; do - IFS=";" read -r key_path _ _ <<< "$key_entry" - echo "📁 Archivo: $key_path" + IFS=";" read -r key_path _ num_llaves <<< "$key_entry" + echo "📁 Archivo: $key_path ($num_llaves claves)" echo "đŸ”č Contenido:" grep -E "^(ssh-rsa|ssh-ed25519)" "$key_path" 2>/dev/null echo "" @@ -110,4 +168,6 @@ if [[ ${#USERS_WITH_KEYS[@]} -gt 0 ]]; then done else echo "❌ No se encontraron usuarios con llaves SSH autorizadas." -fi \ No newline at end of file +fi + +echo "🔎 AnĂĄlisis completado." \ No newline at end of file