Update ssh_key_checks
This commit is contained in:
parent
e04d6f6056
commit
e9436b6abb
@ -1,22 +1,81 @@
|
|||||||
#!/bin/bash
|
#!/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 "🔍 Buscando archivos de claves SSH en todo el sistema..."
|
||||||
echo "------------------------------------------------------------"
|
echo "------------------------------------------------------------"
|
||||||
printf "%-20s %-50s %-10s %-15s %-10s\n" "Usuario" "Ruta del archivo" "Permisos" "SSH Habilitado" "Llaves"
|
printf "%-20s %-50s %-10s %-15s %-10s\n" "Usuario" "Ruta del archivo" "Permisos" "SSH Habilitado" "Llaves"
|
||||||
echo "------------------------------------------------------------"
|
echo "------------------------------------------------------------"
|
||||||
|
|
||||||
# Buscar archivos que puedan contener claves SSH
|
KEY_FILES=$(find / -type f \( -name "authorized_keys" -o -name "*.pub" -o -name "*id_rsa*" -o -name "*id_ed25519*" \) 2>/dev/null)
|
||||||
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
|
|
||||||
USERS_WITH_KEYS=()
|
USERS_WITH_KEYS=()
|
||||||
|
|
||||||
# Obtener listas de usuarios permitidos/denegados en sshd_config
|
# Obtener listas de usuarios permitidos/denegados en sshd_config
|
||||||
ALLOW_USERS=$(grep -E "^\s*AllowUsers" /etc/ssh/sshd_config | awk '{$1=""; print $0}')
|
SSHD_CONFIG="/etc/ssh/sshd_config"
|
||||||
DENY_USERS=$(grep -E "^\s*DenyUsers" /etc/ssh/sshd_config | awk '{$1=""; print $0}')
|
ALLOW_USERS=$(grep -E "^\s*AllowUsers" "$SSHD_CONFIG" | awk '{$1=""; print $0}')
|
||||||
ALLOW_GROUPS=$(grep -E "^\s*AllowGroups" /etc/ssh/sshd_config | awk '{$1=""; print $0}')
|
DENY_USERS=$(grep -E "^\s*DenyUsers" "$SSHD_CONFIG" | awk '{$1=""; print $0}')
|
||||||
DENY_GROUPS=$(grep -E "^\s*DenyGroups" /etc/ssh/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
|
# Leer usuarios del sistema
|
||||||
while IFS=: read -r username _ _ _ _ homedir _; do
|
while IFS=: read -r username _ _ _ _ homedir _; do
|
||||||
@ -28,8 +87,6 @@ while IFS=: read -r username _ _ _ _ homedir _; do
|
|||||||
file_owner=$(stat -c "%U" "$key_file" 2>/dev/null)
|
file_owner=$(stat -c "%U" "$key_file" 2>/dev/null)
|
||||||
if [[ "$file_owner" == "$username" ]]; then
|
if [[ "$file_owner" == "$username" ]]; then
|
||||||
permisos=$(stat -c "%a" "$key_file")
|
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)
|
num_llaves=$(grep -E -c "^(ssh-rsa|ssh-ed25519)" "$key_file" 2>/dev/null)
|
||||||
|
|
||||||
if [[ $num_llaves -gt 0 ]]; then
|
if [[ $num_llaves -gt 0 ]]; then
|
||||||
@ -41,7 +98,6 @@ while IFS=: read -r username _ _ _ _ homedir _; do
|
|||||||
|
|
||||||
# Determinar si el usuario puede hacer SSH
|
# Determinar si el usuario puede hacer SSH
|
||||||
ssh_habilitado="Sí"
|
ssh_habilitado="Sí"
|
||||||
|
|
||||||
if [[ -n "$ALLOW_USERS" && ! "$ALLOW_USERS" =~ "$username" ]]; then
|
if [[ -n "$ALLOW_USERS" && ! "$ALLOW_USERS" =~ "$username" ]]; then
|
||||||
ssh_habilitado="No"
|
ssh_habilitado="No"
|
||||||
fi
|
fi
|
||||||
@ -68,16 +124,18 @@ while IFS=: read -r username _ _ _ _ homedir _; do
|
|||||||
done
|
done
|
||||||
fi
|
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
|
if [[ ${#user_keys_paths[@]} -gt 0 ]]; then
|
||||||
first_entry=1
|
first_entry=1
|
||||||
|
total_keys=0
|
||||||
for key_entry in "${user_keys_paths[@]}"; do
|
for key_entry in "${user_keys_paths[@]}"; do
|
||||||
IFS=";" read -r key_path permisos num_llaves <<< "$key_entry"
|
IFS=";" read -r key_path permisos num_llaves <<< "$key_entry"
|
||||||
|
total_keys=$((total_keys + num_llaves))
|
||||||
if [[ $first_entry -eq 1 ]]; then
|
if [[ $first_entry -eq 1 ]]; then
|
||||||
printf "%-20s %-50s %-10s %-15s %-10s\n" "$username" "$key_path" "$permisos" "$ssh_habilitado" "$num_llaves"
|
printf "%-20s %-50s %-10s %-15s %-10s\n" "$username" "$key_path" "$permisos" "$ssh_habilitado" "$num_llaves"
|
||||||
first_entry=0
|
first_entry=0
|
||||||
else
|
else
|
||||||
printf "%-20s %-50s %-10s %-15s %-10s\n" "" "$key_path" "$permisos" "" ""
|
printf "%-20s %-50s %-10s %-15s %-10s\n" "" "$key_path" "$permisos" "" "$num_llaves"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
USERS_WITH_KEYS+=("$username:${user_keys_paths[*]}")
|
USERS_WITH_KEYS+=("$username:${user_keys_paths[*]}")
|
||||||
@ -101,8 +159,8 @@ if [[ ${#USERS_WITH_KEYS[@]} -gt 0 ]]; then
|
|||||||
echo "------------------------------------------------------------"
|
echo "------------------------------------------------------------"
|
||||||
|
|
||||||
for key_entry in "${key_paths[@]}"; do
|
for key_entry in "${key_paths[@]}"; do
|
||||||
IFS=";" read -r key_path _ _ <<< "$key_entry"
|
IFS=";" read -r key_path _ num_llaves <<< "$key_entry"
|
||||||
echo "📁 Archivo: $key_path"
|
echo "📁 Archivo: $key_path ($num_llaves claves)"
|
||||||
echo "🔹 Contenido:"
|
echo "🔹 Contenido:"
|
||||||
grep -E "^(ssh-rsa|ssh-ed25519)" "$key_path" 2>/dev/null
|
grep -E "^(ssh-rsa|ssh-ed25519)" "$key_path" 2>/dev/null
|
||||||
echo ""
|
echo ""
|
||||||
@ -111,3 +169,5 @@ if [[ ${#USERS_WITH_KEYS[@]} -gt 0 ]]; then
|
|||||||
else
|
else
|
||||||
echo "❌ No se encontraron usuarios con llaves SSH autorizadas."
|
echo "❌ No se encontraron usuarios con llaves SSH autorizadas."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "🔎 Análisis completado."
|
||||||
Loading…
Reference in New Issue
Block a user