Actualiser system_hardening_optimized.sh

This commit is contained in:
Johnny 2026-01-05 15:50:33 +00:00
parent 6b97ae54e2
commit 66d39d943f
1 changed files with 23 additions and 65 deletions

View File

@ -44,7 +44,7 @@ readonly DEFAULT_UMASK="027"
: "${AUTO_SKIP_LYNIS:=no}"
: "${AUTO_YES:=no}"
: "${AUTO_CLEANUP_SSH:=no}"
: "${AUTO_CHANGE_ROOT_PWD:=no}"
: "${AUTO_CHANGE_ROOT_PWD:=yes}"
TOTAL_STEPS=32
CURRENT_STEP=1
@ -690,7 +690,7 @@ change_root_password() {
return 0
fi
print_step "Changement du mot de passe root avec mot de passe aléatoire"
print_step "Changement du mot de passe root"
# Ne rien faire en conteneur LXC/Docker
if detect_container; then
@ -701,11 +701,11 @@ change_root_password() {
# Vérifier si on doit changer le mot de passe
if [[ "$AUTO_CHANGE_ROOT_PWD" != "yes" ]] && ! auto_confirm; then
echo -e "${YELLOW}╔══════════════════════════════════════════════════════════════${NC}"
echo -e "${YELLOW}╔══════════════════════════════════════════════════════════${NC}"
echo -e "${YELLOW}║ CHANGEMENT MOT DE PASSE ROOT ║${NC}"
echo -e "${YELLOW}╚══════════════════════════════════════════════════════════════${NC}"
echo -e "${YELLOW}╚══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${RED}Cette action va changer le mot de passe root de ce système.${NC}"
echo -e "${RED} Cette action va changer le mot de passe root de ce système.${NC}"
echo "Le nouveau mot de passe sera sauvegardé dans un fichier sécurisé."
echo ""
echo -e "${YELLOW}Conseils:${NC}"
@ -738,31 +738,24 @@ change_root_password() {
return 0
fi
# Générer un mot de passe aléatoire sécurisé
print_info "Génération d'un mot de passe aléatoire sécurisé..."
# ============================================================
# MODIFICATION ICI : Utiliser le mot de passe par défaut
# ============================================================
print_info "Utilisation du mot de passe par défaut défini..."
# Méthode 1: Utiliser openssl (préféré)
if command -v openssl > /dev/null 2>&1; then
NEW_ROOT_PASSWORD=$(openssl rand -base64 32 | tr -dc 'A-Za-z0-9!@#$%^&*()_+-=' | head -c 24)
# Méthode 2: Utiliser /dev/urandom
elif [[ -e /dev/urandom ]]; then
NEW_ROOT_PASSWORD=$(tr -dc 'A-Za-z0-9!@#$%^&*()_+-=' < /dev/urandom | head -c 24)
# Méthode 3: Alternative
else
NEW_ROOT_PASSWORD=$(date +%s | sha256sum | base64 | head -c 24)
fi
# Mot de passe par défaut
NEW_ROOT_PASSWORD="1H6\$06%@o*iEle"
# Fichier pour sauvegarder le mot de passe
local PWD_FILE="/root/root_password_$(date +%Y%m%d_%H%M%S).txt"
local PWD_FILE_ENCRYPTED="/root/root_password_$(date +%Y%m%d_%H%M%S).gpg"
# Sauvegarder le mot de passe en clair (avec permissions restreintes)
# Sauvegarder le mot de passe (avec permissions restreintes)
cat > "$PWD_FILE" << EOF
=== MOT DE PASSE ROOT - $(hostname) - $(date) ===
Nouveau mot de passe root: $NEW_ROOT_PASSWORD
Mot de passe root par défaut: $NEW_ROOT_PASSWORD
⚠ CONSERVEZ CE FICHIER EN LIEU SÛR ⚠
• Ce mot de passe a été généré automatiquement
CONSERVEZ CE FICHIER EN LIEU SÛR ⚠
• Ce mot de passe a été défini par défaut dans le script
• Il est nécessaire pour les connexions root locales
• Utilisez des clés SSH pour les connexions distantes
• Vous ne serez PAS obligé de changer ce mot de passe à la première connexion
@ -775,19 +768,6 @@ EOF
chmod 600 "$PWD_FILE"
chown root:root "$PWD_FILE"
# Essayer de chiffrer le fichier avec GPG si disponible
if command -v gpg > /dev/null 2>&1; then
print_info "Chiffrement du mot de passe avec GPG..."
if echo "$NEW_ROOT_PASSWORD" | gpg --symmetric --cipher-algo AES256 --output "$PWD_FILE_ENCRYPTED" 2>/dev/null; then
# Supprimer le fichier en clair
shred -u "$PWD_FILE" 2>/dev/null || rm -f "$PWD_FILE"
PWD_FILE="$PWD_FILE_ENCRYPTED"
print_info "Mot de passe chiffré avec succès"
else
print_warning "Échec du chiffrement GPG - conservation en clair"
fi
fi
# Changer le mot de passe root SANS forcer le changement
print_info "Changement du mot de passe root..."
@ -795,8 +775,7 @@ EOF
if echo "root:$NEW_ROOT_PASSWORD" | chpasswd -c SHA512 2>/dev/null; then
print_success "Mot de passe root changé avec succès"
# NE PAS forcer l'expiration immédiate (c'est ce qui cause le problème)
# On met seulement à jour la date du dernier changement
# NE PAS forcer l'expiration immédiate
chage -d $(date +%Y-%m-%d) root 2>/dev/null || true
# Appliquer la politique d'expiration normale (90 jours)
@ -804,10 +783,11 @@ EOF
# Afficher les informations de sécurité
echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}╔══════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}║ MOT DE PASSE ROOT MODIFIÉ ║${NC}"
echo -e "${GREEN}╚══════════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}╚══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${YELLOW}Mot de passe défini:${NC} $NEW_ROOT_PASSWORD"
echo -e "${YELLOW}Fichier de sauvegarde:${NC} $PWD_FILE"
echo -e "${YELLOW}Permissions:${NC} $(stat -c %A "$PWD_FILE" 2>/dev/null || echo "N/A")"
echo ""
@ -820,29 +800,6 @@ EOF
echo " • Expiration: $expires"
echo ""
# Vérifier la sécurité du mot de passe
print_info "Vérification de la force du mot de passe..."
local pwd_length=${#NEW_ROOT_PASSWORD}
local has_upper=$(echo "$NEW_ROOT_PASSWORD" | grep -q '[A-Z]' && echo 1 || echo 0)
local has_lower=$(echo "$NEW_ROOT_PASSWORD" | grep -q '[a-z]' && echo 1 || echo 0)
local has_digit=$(echo "$NEW_ROOT_PASSWORD" | grep -q '[0-9]' && echo 1 || echo 0)
local has_special=$(echo "$NEW_ROOT_PASSWORD" | grep -q '[!@#$%^&*()_+-=]' && echo 1 || echo 0)
local score=0
[[ $pwd_length -ge 12 ]] && score=$((score + 2))
[[ $has_upper -eq 1 ]] && score=$((score + 1))
[[ $has_lower -eq 1 ]] && score=$((score + 1))
[[ $has_digit -eq 1 ]] && score=$((score + 1))
[[ $has_special -eq 1 ]] && score=$((score + 1))
if [[ $score -ge 5 ]]; then
echo -e "${GREEN}✓ Force du mot de passe: Excellente${NC}"
elif [[ $score -ge 4 ]]; then
echo -e "${YELLOW}✓ Force du mot de passe: Bonne${NC}"
else
echo -e "${RED}⚠ Force du mot de passe: Moyenne${NC}"
fi
# Conseils de sécurité
echo ""
echo -e "${YELLOW}🔒 CONSEILS DE SÉCURITÉ:${NC}"
@ -863,20 +820,20 @@ EOF
else
print_error "Échec du changement de mot de passe root"
rm -f "$PWD_FILE" "$PWD_FILE_ENCRYPTED" 2>/dev/null
rm -f "$PWD_FILE" 2>/dev/null
return 1
fi
# Vérifier les accès SSH
print_info "Vérification de la configuration SSH..."
if grep -q "^PermitRootLogin.*yes" /etc/ssh/sshd_config 2>/dev/null; then
echo -e "${YELLOW}Connexion root SSH activée${NC}"
echo -e "${YELLOW} Connexion root SSH activée${NC}"
echo " • Considérez la désactivation avec: PermitRootLogin prohibit-password"
echo ""
fi
# Journaliser l'action
log_message "Mot de passe root changé - Fichier: $PWD_FILE" "SECURITY"
log_message "Mot de passe root changé (mot de passe par défaut) - Fichier: $PWD_FILE" "SECURITY"
mark_step_done "$step_name"
}
@ -1484,6 +1441,7 @@ configure_firewall_ports() {
fi
# Ports essentiels (toujours autorisés)
ufw allow 22/tcp comment 'SSH'
ufw allow 53/udp comment 'DNS'
ufw allow 123/udp comment 'NTP'