diff --git a/system_hardening_optimized.sh b/system_hardening_optimized.sh index 7ea5c47..00975c4 100644 --- a/system_hardening_optimized.sh +++ b/system_hardening_optimized.sh @@ -46,7 +46,7 @@ readonly DEFAULT_UMASK="027" : "${AUTO_CLEANUP_SSH:=no}" : "${AUTO_CHANGE_ROOT_PWD:=yes}" -TOTAL_STEPS=33 +TOTAL_STEPS=32 CURRENT_STEP=1 # Variables de contrôle @@ -573,7 +573,7 @@ show_help() { echo " $0 --yes" echo "" echo " # Mode autonome sans certains composants" - echo " AUTO_ENABLE_CLAMAV=no AUTO_ENABLE_AIDE=no $0 --unattended" + echo " AUTO_ENABLE_CLAMAV=yes AUTO_ENABLE_AIDE=yes $0 --unattended" echo "" echo -e "${RED}⚠ AVERTISSEMENT:${NC}" echo " En mode autonome, le script prend des décisions automatiques." @@ -1193,14 +1193,143 @@ configure_clamav() { print_step "Configuration de ClamAV" - print_info "Mise à jour de la base de données ClamAV..." + # Créer les répertoires nécessaires avec les bonnes permissions + print_info "Création des répertoires ClamAV..." + mkdir -p /var/log/clamav + mkdir -p /var/lib/clamav + mkdir -p /run/clamav + + # Vérifier si l'utilisateur clamav existe, sinon le créer + if ! id -u clamav >/dev/null 2>&1; then + print_info "Création de l'utilisateur clamav..." + useradd -r -M -d /var/lib/clamav -s /bin/false -c "Clam AntiVirus" clamav 2>/dev/null || true + fi + + # Définir les permissions correctes + chown -R clamav:clamav /var/log/clamav 2>/dev/null || true + chown -R clamav:clamav /var/lib/clamav 2>/dev/null || true + chown -R clamav:clamav /run/clamav 2>/dev/null || true + + chmod 755 /var/log/clamav 2>/dev/null || true + chmod 755 /var/lib/clamav 2>/dev/null || true + chmod 755 /run/clamav 2>/dev/null || true + + # Créer les fichiers de log avec les bonnes permissions + touch /var/log/clamav/freshclam.log 2>/dev/null || true + touch /var/log/clamav/clamav.log 2>/dev/null || true + + chown clamav:clamav /var/log/clamav/freshclam.log 2>/dev/null || true + chown clamav:clamav /var/log/clamav/clamav.log 2>/dev/null || true + + chmod 640 /var/log/clamav/freshclam.log 2>/dev/null || true + chmod 640 /var/log/clamav/clamav.log 2>/dev/null || true + + # Configuration de freshclam + if [[ -f /etc/clamav/freshclam.conf ]]; then + backup_file "/etc/clamav/freshclam.conf" + + # S'assurer que le fichier de log est bien configuré + sed -i 's|^#UpdateLogFile.*|UpdateLogFile /var/log/clamav/freshclam.log|' /etc/clamav/freshclam.conf + sed -i 's|^UpdateLogFile.*|UpdateLogFile /var/log/clamav/freshclam.log|' /etc/clamav/freshclam.conf + + # S'assurer que DatabaseOwner est défini + if ! grep -q "^DatabaseOwner" /etc/clamav/freshclam.conf; then + echo "DatabaseOwner clamav" >> /etc/clamav/freshclam.conf + fi + fi + + # Configuration de clamd + if [[ -f /etc/clamav/clamd.conf ]]; then + backup_file "/etc/clamav/clamd.conf" + + # S'assurer que le fichier de log est bien configuré + sed -i 's|^#LogFile.*|LogFile /var/log/clamav/clamav.log|' /etc/clamav/clamd.conf + sed -i 's|^LogFile.*|LogFile /var/log/clamav/clamav.log|' /etc/clamav/clamd.conf + fi + + # Arrêter les services avant la mise à jour + print_info "Arrêt temporaire des services ClamAV..." systemctl stop clamav-freshclam 2>/dev/null || true - freshclam --quiet 2>/dev/null || print_warning "Échec mise à jour ClamAV" + systemctl stop clamav-daemon 2>/dev/null || true + + # Attendre que les processus se terminent + sleep 2 + + # Mise à jour de la base de données + print_info "Mise à jour de la base de données ClamAV..." + + # Tenter la mise à jour avec freshclam en tant qu'utilisateur clamav + if su - clamav -s /bin/bash -c "freshclam --quiet" 2>&1 | tee -a "$LOG_FILE"; then + print_success "Base de données ClamAV mise à jour" + else + # Si ça échoue, essayer en root avec les bonnes permissions + print_warning "Tentative de mise à jour en root..." + if freshclam --user=clamav --quiet 2>&1 | tee -a "$LOG_FILE"; then + print_success "Base de données ClamAV mise à jour" + else + print_warning "Échec mise à jour ClamAV - les services démarreront avec l'ancienne base" + fi + fi + + # Vérifier que les fichiers de base de données existent + if [[ ! -f /var/lib/clamav/main.cvd ]] && [[ ! -f /var/lib/clamav/main.cld ]]; then + print_warning "Base de données principale ClamAV manquante" + print_info "Tentative de téléchargement manuel..." + + cd /var/lib/clamav + wget -q http://database.clamav.net/main.cvd 2>/dev/null || \ + print_warning "Impossible de télécharger la base principale" + wget -q http://database.clamav.net/daily.cvd 2>/dev/null || \ + print_warning "Impossible de télécharger la base quotidienne" + wget -q http://database.clamav.net/bytecode.cvd 2>/dev/null || \ + print_warning "Impossible de télécharger la base bytecode" + + chown clamav:clamav /var/lib/clamav/*.cvd 2>/dev/null || true + cd - > /dev/null + fi + + # Activer et démarrer les services + print_info "Démarrage des services ClamAV..." systemctl enable clamav-freshclam 2>/dev/null || true - systemctl start clamav-freshclam 2>/dev/null || true systemctl enable clamav-daemon 2>/dev/null || true - systemctl start clamav-daemon 2>/dev/null || true + + if systemctl start clamav-freshclam 2>&1 | tee -a "$LOG_FILE"; then + print_success "Service freshclam démarré" + else + print_warning "Service freshclam non démarré" + fi + + # Attendre un peu avant de démarrer le daemon + sleep 3 + + if systemctl start clamav-daemon 2>&1 | tee -a "$LOG_FILE"; then + print_success "Service clamav-daemon démarré" + else + print_warning "Service clamav-daemon non démarré" + fi + + # Vérification du statut + echo "" + print_info "Vérification des services ClamAV..." + + if systemctl is-active --quiet clamav-freshclam 2>/dev/null; then + echo " ✓ freshclam: actif" + else + echo " ⚠ freshclam: inactif" + fi + + if systemctl is-active --quiet clamav-daemon 2>/dev/null; then + echo " ✓ clamav-daemon: actif" + else + echo " ⚠ clamav-daemon: inactif" + fi + + # Afficher la version de la base de données + if command -v sigtool > /dev/null 2>&1; then + local db_version=$(sigtool --info /var/lib/clamav/main.cvd 2>/dev/null | grep "Version" | head -1) + [[ -n "$db_version" ]] && echo " • Base de données: $db_version" + fi print_success "ClamAV configuré" mark_step_done "$step_name"