#!/bin/bash
# =============================================================================
#  Durcissement SSH du NAS sas_nexte — 01/09/2026
#
#  A COLLER DANS : DSM -> Panneau de configuration -> Planificateur de taches
#                  -> Creer -> Tache declenchee -> Script defini par l utilisateur
#                  Utilisateur : root      puis "Executer" manuellement
#
#  Effet : seules les cles SSH sont acceptees. Les mots de passe ne le sont plus.
#
#  FILET DE SECURITE : ce script NE TOUCHE PAS au pare-feu et ne coupe pas DSM.
#  En cas de probleme, l interface DSM (https://192.168.1.82) reste accessible
#  et une seconde tache root permet de restaurer la sauvegarde ecrite ci-dessous.
# =============================================================================

CONF=/etc/ssh/sshd_config
SAUVEGARDE=/etc/ssh/sshd_config.260901.bak
RAPPORT=/volume1/homes/SAS_NEXTE/.ssh/durcissement_ssh.txt

# --- 1. Sauvegarde horodatee (une seule fois : on ne l ecrase jamais) --------
[ -f "$SAUVEGARDE" ] || cp -p "$CONF" "$SAUVEGARDE"

# --- 2. Desactiver TOUTES les voies d authentification par mot de passe ------
#     Piege classique : desactiver PasswordAuthentication seul ne suffit pas.
#     KbdInteractive (clavier interactif) rouvre la meme porte via PAM.
#     Les trois directives doivent passer a "no" pour fermer reellement.
for d in PasswordAuthentication ChallengeResponseAuthentication KbdInteractiveAuthentication; do
    if grep -qiE "^[[:space:]]*#?[[:space:]]*$d" "$CONF"; then
        sed -i -E "s|^[[:space:]]*#?[[:space:]]*$d.*|$d no|I" "$CONF"
    else
        echo "$d no" >> "$CONF"
    fi
done

# --- 3. S assurer que les cles restent acceptees ----------------------------
#     Sans cette garantie, desactiver les mots de passe fermerait TOUT acces.
if grep -qiE "^[[:space:]]*#?[[:space:]]*PubkeyAuthentication" "$CONF"; then
    sed -i -E "s|^[[:space:]]*#?[[:space:]]*PubkeyAuthentication.*|PubkeyAuthentication yes|I" "$CONF"
else
    echo "PubkeyAuthentication yes" >> "$CONF"
fi

# --- 4. VALIDER la syntaxe AVANT de recharger -------------------------------
#     Recharger une configuration invalide arrete sshd et coupe l acces.
{
  echo "=== Durcissement SSH du NAS — $(date) ==="
  echo
  if sshd -t 2>&1; then
      echo "Syntaxe sshd_config : VALIDE"
      # Rechargement a chaud : les sessions en cours ne sont pas coupees
      synosystemctl restart sshd 2>/dev/null || systemctl restart sshd 2>/dev/null \
          || kill -HUP "$(cat /var/run/sshd.pid 2>/dev/null)" 2>/dev/null
      echo "Service sshd recharge."
  else
      echo "!!! SYNTAXE INVALIDE — restauration de la sauvegarde, aucun changement applique !!!"
      cp -p "$SAUVEGARDE" "$CONF"
  fi
  echo
  echo "--- Directives effectives ---"
  grep -iE "^[[:space:]]*(PasswordAuthentication|ChallengeResponse|KbdInteractive|PubkeyAuthentication)" "$CONF"
  echo
  echo "--- Sauvegarde conservee ---"
  ls -l "$SAUVEGARDE"
} > "$RAPPORT" 2>&1

chown SAS_NEXTE:users "$RAPPORT"
chmod 644 "$RAPPORT"
