- Ajout des droits pfx
This commit is contained in:
parent
134d7a4166
commit
7fea497dbe
228
func/deb_sys.sh
228
func/deb_sys.sh
|
|
@ -609,9 +609,7 @@ do_deb_sys_cert_install(){
|
|||
--not-after=8760h \
|
||||
--force
|
||||
|
||||
|
||||
|
||||
msg_success "Certificat généré avec succès dans /etc/ssl/wildcard/"
|
||||
msg_success "Certificat généré avec succès dans /etc/ssl/wildcard/"
|
||||
|
||||
msg_warning "[4/6] Installation automatique du Root CA..."
|
||||
|
||||
|
|
@ -638,115 +636,195 @@ do_deb_sys_cert_install(){
|
|||
msg_error "Source introuvable dans $TEMP_ROOT. Vérifie que l'étape 3 a réussi."
|
||||
fi
|
||||
|
||||
# --- ÉTAPE 6 (Cron & Nettoyage final) ---
|
||||
# ---(Cron & Nettoyage final) ---
|
||||
# C'est seulement MAINTENANT qu'on peut supprimer
|
||||
#rm -rf "/tmp/step-config"
|
||||
rm -rf "/tmp/step-config"
|
||||
|
||||
# ==================================================================
|
||||
# [5/6] ATTRIBUTION DES DROITS (D'abord les droits, ensuite le cron)
|
||||
# [5/6] ATTRIBUTION DES DROITS
|
||||
# ==================================================================
|
||||
msg_warning "[5/6] Finalisation des droits et redémarrage des services..."
|
||||
|
||||
# 1. On s'assure que le groupe technique existe
|
||||
groupadd -f ssl-cert
|
||||
# Fichiers de certificats
|
||||
local cert_dir="/etc/ssl/wildcard"
|
||||
local cert_crt="${cert_dir}/server.crt"
|
||||
local cert_key="${cert_dir}/server.key"
|
||||
local cert_pfx="${cert_dir}/server.pfx"
|
||||
|
||||
# Boucle sur la liste des services
|
||||
for SVC in $CONFIG_DEB_INSTALL_DEFAULT_CA_SERVICES; do
|
||||
# Groupe utilisé pour l'accès aux certificats
|
||||
local cert_group="ssl-cert"
|
||||
|
||||
# Normalisation du nom
|
||||
UNIT="${SVC%.service}.service"
|
||||
# Création du groupe si nécessaire
|
||||
groupadd -f "$cert_group"
|
||||
|
||||
# Vérification réelle de l'existence du service
|
||||
LOAD_STATE=$(systemctl show "$UNIT" --property=LoadState --value 2>/dev/null)
|
||||
# Liste des services valides et actifs (utilisée aussi pour le cron)
|
||||
local -a active_services=()
|
||||
local -A processed_users=()
|
||||
|
||||
if [ "$LOAD_STATE" != "loaded" ]; then
|
||||
# Service inexistant, on passe au suivant
|
||||
continue
|
||||
fi
|
||||
# Permissions de base (appliquées une seule fois)
|
||||
chown root:"$cert_group" "$cert_key" "$cert_pfx" 2>/dev/null
|
||||
chmod 640 "$cert_key" "$cert_pfx" 2>/dev/null
|
||||
chmod 644 "$cert_crt" 2>/dev/null
|
||||
|
||||
# Parcours des services configurés
|
||||
for svc in $CONFIG_DEB_INSTALL_DEFAULT_CA_SERVICES; do
|
||||
local unit="${svc%.service}.service"
|
||||
local load_state
|
||||
local svc_user
|
||||
local pid
|
||||
|
||||
# Vérifie que l'unité existe réellement
|
||||
load_state="$(systemctl show "$unit" --property=LoadState --value 2>/dev/null)"
|
||||
[[ "$load_state" != "loaded" ]] && continue
|
||||
|
||||
# Vérifie que le service est actif
|
||||
if ! systemctl is-active --quiet "$UNIT"; then
|
||||
continue
|
||||
fi
|
||||
systemctl is-active --quiet "$unit" || continue
|
||||
|
||||
# Recherche d'un PID
|
||||
PID=$(pgrep -f "${SVC%.service}" | head -n1)
|
||||
[ -z "$PID" ] && continue
|
||||
# Ajout à la liste des services à redémarrer
|
||||
active_services+=("$unit")
|
||||
|
||||
# Utilisateur du processus
|
||||
SVC_USER=$(ps -o user= -p "$PID" | tr -d ' ')
|
||||
[ -z "$SVC_USER" ] && continue
|
||||
# Récupération de l'utilisateur défini dans le service (plus fiable que pgrep/ps)
|
||||
svc_user="$(systemctl show "$unit" --property=User --value 2>/dev/null)"
|
||||
|
||||
# Si User= n'est pas défini, systemd exécute le service en root
|
||||
[[ -z "$svc_user" ]] && svc_user="root"
|
||||
|
||||
# Ignore root
|
||||
if [ ! "$SVC_USER" = "root" ]; then
|
||||
[[ "$svc_user" == "root" ]] && continue
|
||||
|
||||
msg_info "🔧 Configuration de $UNIT (Utilisateur : $SVC_USER)"
|
||||
# Évite de traiter plusieurs fois le même utilisateur
|
||||
[[ -n "${processed_users[$svc_user]}" ]] && continue
|
||||
processed_users["$svc_user"]=1
|
||||
|
||||
# Ajout au groupe ssl-cert
|
||||
usermod -aG ssl-cert "$SVC_USER"
|
||||
msg_info "🔧 Configuration de $unit (Utilisateur : $svc_user)"
|
||||
|
||||
# Permissions certificats
|
||||
chown root:ssl-cert /etc/ssl/wildcard/server.key /etc/ssl/wildcard/server.pfx
|
||||
chmod 640 /etc/ssl/wildcard/server.key /etc/ssl/wildcard/server.pfx
|
||||
chmod 644 /etc/ssl/wildcard/server.crt
|
||||
fi
|
||||
|
||||
# Redémarrage
|
||||
if systemctl restart "$UNIT"; then
|
||||
msg_success "Service $UNIT redémarré avec succès."
|
||||
# Ajout de l'utilisateur au groupe ssl-cert
|
||||
if usermod -aG "$cert_group" "$svc_user"; then
|
||||
msg_success "Utilisateur $svc_user ajouté au groupe $cert_group."
|
||||
else
|
||||
msg_error "Impossible de redémarrer $UNIT."
|
||||
msg_error "Impossible d'ajouter $svc_user au groupe $cert_group."
|
||||
continue
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# Redémarrage immédiat des services pour prise en compte du nouveau groupe
|
||||
for unit in "${active_services[@]}"; do
|
||||
if systemctl restart "$unit"; then
|
||||
msg_success "Service $unit redémarré avec succès."
|
||||
else
|
||||
msg_error "Impossible de redémarrer $unit."
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# ==================================================================
|
||||
# [6/6] PLANIFICATION & GÉNÉRATION PFX
|
||||
# ==================================================================
|
||||
msg_warning "[6/6] Activation du renouvellement automatique..."
|
||||
|
||||
local CERT_CRT="/etc/ssl/wildcard/server.crt"
|
||||
local CERT_KEY="/etc/ssl/wildcard/server.key"
|
||||
local CERT_PFX="/etc/ssl/wildcard/server.pfx"
|
||||
# Détection du groupe actuel du dossier (normalement ssl-cert)
|
||||
local current_group
|
||||
current_group="$(stat -c '%G' "$cert_dir")"
|
||||
|
||||
# DYNAMIQUE : On détecte 'ssl-cert' car on l'a appliqué au dossier juste au-dessus
|
||||
local CURRENT_GROUP=$(stat -c '%G' /etc/ssl/wildcard/)
|
||||
# Binaire step
|
||||
local step_bin
|
||||
step_bin="$(command -v step)"
|
||||
if [[ -z "$step_bin" ]]; then
|
||||
msg_error "Le binaire 'step' est introuvable."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# La commande de génération PFX qui préserve les droits
|
||||
local PFX_CMD="openssl pkcs12 -export -out $CERT_PFX -inkey $CERT_KEY -in $CERT_CRT -passout pass: -legacy && chown root:$CURRENT_GROUP $CERT_PFX && chmod 640 $CERT_PFX"
|
||||
local STEP_BIN=$(which step)
|
||||
local RENEW_CMD="$STEP_BIN certificate renew $CERT_CRT $CERT_KEY --force"
|
||||
# ------------------------------------------------------------------
|
||||
# Commande de renouvellement
|
||||
# ------------------------------------------------------------------
|
||||
local renew_cmd
|
||||
renew_cmd="$step_bin certificate renew \"$cert_crt\" \"$cert_key\" --force"
|
||||
|
||||
# Récupération des services à redémarrer
|
||||
local RESTART_CMD=""
|
||||
for SVC in $CONFIG_DEB_INSTALL_DEFAULT_CA_SERVICES; do
|
||||
if systemctl is-active --quiet "$SVC"; then
|
||||
RESTART_CMD="$RESTART_CMD $SVC"
|
||||
fi
|
||||
done
|
||||
# ------------------------------------------------------------------
|
||||
# Commande de génération du PFX
|
||||
# IMPORTANT:
|
||||
# - -legacy pour compatibilité maximale avec Jellyfin/.NET
|
||||
# - -passout pass: pour mot de passe vide
|
||||
# - exporte la chaîne complète via -certfile si fullchain.crt existe
|
||||
# ------------------------------------------------------------------
|
||||
local pfx_input="$cert_crt"
|
||||
local cert_fullchain="${cert_dir}/fullchain.crt"
|
||||
|
||||
# Construction de la commande Cron
|
||||
local FULL_COMMAND="$RENEW_CMD >> /var/log/cert-renew.log 2>&1 && $PFX_CMD"
|
||||
[ -n "$RESTART_CMD" ] && FULL_COMMAND="$FULL_COMMAND && systemctl restart $RESTART_CMD"
|
||||
if [[ -f "$cert_fullchain" ]]; then
|
||||
pfx_input="$cert_fullchain"
|
||||
fi
|
||||
|
||||
local pfx_cmd
|
||||
pfx_cmd="openssl pkcs12 -export \
|
||||
-out \"$cert_pfx\" \
|
||||
-inkey \"$cert_key\" \
|
||||
-in \"$pfx_input\" \
|
||||
-passout pass: \
|
||||
-legacy \
|
||||
&& chown root:\"$current_group\" \"$cert_pfx\" \
|
||||
&& chmod 640 \"$cert_pfx\""
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Construction de la liste des services à redémarrer
|
||||
# ------------------------------------------------------------------
|
||||
local restart_cmd=""
|
||||
if [[ ${#active_services[@]} -gt 0 ]]; then
|
||||
restart_cmd="systemctl restart"
|
||||
local unit
|
||||
for unit in "${active_services[@]}"; do
|
||||
restart_cmd+=" \"$unit\""
|
||||
done
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Commande complète du cron
|
||||
# ------------------------------------------------------------------
|
||||
local full_command
|
||||
full_command="$renew_cmd >> /var/log/cert-renew.log 2>&1 \
|
||||
&& $pfx_cmd \
|
||||
&& chown root:\"$current_group\" \"$cert_key\" \"$cert_crt\" \
|
||||
&& chmod 640 \"$cert_key\" \
|
||||
&& chmod 644 \"$cert_crt\""
|
||||
|
||||
if [[ -n "$restart_cmd" ]]; then
|
||||
full_command+=" && $restart_cmd"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Installation du cron
|
||||
# ------------------------------------------------------------------
|
||||
local marker="# $CONFIG_DEB_INSTALL_DEFAULT_CA_CRON"
|
||||
|
||||
# Injection Crontab
|
||||
local MARKER="# $CONFIG_DEB_INSTALL_DEFAULT_CA_CRON"
|
||||
(
|
||||
crontab -l 2>/dev/null | sed "/$MARKER/,/$MARKER/d"
|
||||
echo "$MARKER"
|
||||
echo "0 0 1 * * $FULL_COMMAND"
|
||||
echo "$MARKER"
|
||||
crontab -l 2>/dev/null | sed "/^${marker//\//\\/}$/,/^${marker//\//\\/}$/d"
|
||||
echo "$marker"
|
||||
echo "0 0 1 * * $full_command"
|
||||
echo "$marker"
|
||||
) | crontab -
|
||||
|
||||
# EXECUTION IMMÉDIATE : On génère le PFX et on fixe les droits des fichiers existants
|
||||
eval $PFX_CMD
|
||||
chown root:$CURRENT_GROUP $CERT_KEY $CERT_CRT
|
||||
chmod 640 $CERT_KEY
|
||||
chmod 644 $CERT_CRT
|
||||
msg_success "Tâche cron installée avec succès."
|
||||
|
||||
# CRITIQUE : Redémarrage final pour que l'app prenne en compte son nouveau groupe
|
||||
for SVC in $CONFIG_DEB_INSTALL_DEFAULT_CA_SERVICES; do
|
||||
[ -n "$RESTART_CMD" ] && systemctl restart $SVC
|
||||
# ------------------------------------------------------------------
|
||||
# Exécution immédiate de la génération du PFX
|
||||
# ------------------------------------------------------------------
|
||||
if eval "$pfx_cmd"; then
|
||||
chown root:"$current_group" "$cert_key" "$cert_crt"
|
||||
chmod 640 "$cert_key"
|
||||
chmod 644 "$cert_crt"
|
||||
msg_success "Fichier PFX généré avec succès."
|
||||
else
|
||||
msg_error "Échec de la génération du fichier PFX."
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Redémarrage final (sécurité)
|
||||
# ------------------------------------------------------------------
|
||||
for unit in "${active_services[@]}"; do
|
||||
if systemctl restart "$unit"; then
|
||||
msg_success "Service $unit redémarré avec succès."
|
||||
else
|
||||
msg_error "Impossible de redémarrer $unit."
|
||||
fi
|
||||
done
|
||||
|
||||
msg_success "Infrastructure PKI prête. Groupe : $CURRENT_GROUP"
|
||||
|
|
|
|||
Loading…
Reference in New Issue