Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| clamav [2025/11/10 17:31] – [Scanner son système] cyrille | clamav [2025/11/12 14:26] (Version actuelle) – cyrille | ||
|---|---|---|---|
| Ligne 28: | Ligne 28: | ||
| - | < | + | <code | download> |
| sudo nano / | sudo nano / | ||
| </ | </ | ||
| Ligne 34: | Ligne 34: | ||
| Avec le contenu | Avec le contenu | ||
| - | < | + | <code | download> |
| #!/bin/bash | #!/bin/bash | ||
| # Script : freshclam-auto.sh | # Script : freshclam-auto.sh | ||
| Ligne 73: | Ligne 73: | ||
| On le sauvegarde et on le rend exécutable | On le sauvegarde et on le rend exécutable | ||
| - | < | + | < |
| sudo chmod +x / | sudo chmod +x / | ||
| </ | </ | ||
| Ligne 84: | Ligne 84: | ||
| - | < | + | < |
| [Unit] | [Unit] | ||
| Description=Update ClamAV database 10 minutes after boot (only if outdated) | Description=Update ClamAV database 10 minutes after boot (only if outdated) | ||
| Ligne 104: | Ligne 104: | ||
| On recharge systemd, on active ce script et le lance : | On recharge systemd, on active ce script et le lance : | ||
| - | < | + | < |
| sudo systemctl daemon-reload | sudo systemctl daemon-reload | ||
| sudo systemctl enable freshclam.service | sudo systemctl enable freshclam.service | ||
| Ligne 123: | Ligne 123: | ||
| - | < | + | < |
| / | / | ||
| weekly | weekly | ||
| Ligne 143: | Ligne 143: | ||
| Ce qui donnera finalement dans l’arborescence des logs | Ce qui donnera finalement dans l’arborescence des logs | ||
| - | < | + | < |
| / | / | ||
| / | / | ||
| Ligne 154: | Ligne 154: | ||
| Et voici un exemple de leur contenu | Et voici un exemple de leur contenu | ||
| - | < | + | < |
| / | / | ||
| 2025-11-13 10:12:00 - Lancement de freshclam... | 2025-11-13 10:12:00 - Lancement de freshclam... | ||
| Ligne 173: | Ligne 173: | ||
| - | < | + | < |
| #!/bin/bash | #!/bin/bash | ||
| # Script pour afficher les dernières mises à jour ClamAV | # Script pour afficher les dernières mises à jour ClamAV | ||
| Ligne 206: | Ligne 206: | ||
| Et on peut le tester | Et on peut le tester | ||
| - | < | + | < |
| sudo / | sudo / | ||
| </ | </ | ||
| Ligne 212: | Ligne 212: | ||
| Ce qui donnera une sortie de ce style | Ce qui donnera une sortie de ce style | ||
| - | < | + | < |
| ===== Dernières mises à jour ClamAV ===== | ===== Dernières mises à jour ClamAV ===== | ||
| --- Log actuel (freshclam-update.log) --- | --- Log actuel (freshclam-update.log) --- | ||
| Ligne 255: | Ligne 255: | ||
| Créer le script **/ | Créer le script **/ | ||
| - | < | + | <code | download> |
| #!/bin/bash | #!/bin/bash | ||
| + | # ============================================================ | ||
| # Scan ClamAV incrémental avec priorité CPU/I/O faible et lock | # Scan ClamAV incrémental avec priorité CPU/I/O faible et lock | ||
| - | # Supporte noms de fichiers avec espaces/ | + | # Compatible |
| + | # Exclusions dynamiques des sous-montages | ||
| # Usage : cron toutes les heures | # Usage : cron toutes les heures | ||
| + | # Auteur : CB | ||
| + | # ============================================================ | ||
| LOGFILE="/ | LOGFILE="/ | ||
| Ligne 265: | Ligne 270: | ||
| CURRENT_HOUR=$(date ' | CURRENT_HOUR=$(date ' | ||
| - | # Disques et horaires (heures | + | # Disques et heures |
| declare -A MOUNTS_SCHEDULE=( | declare -A MOUNTS_SCHEDULE=( | ||
| ["/ | ["/ | ||
| Ligne 272: | Ligne 277: | ||
| ["/" | ["/" | ||
| ) | ) | ||
| + | |||
| + | # Rotation simple du log (5 Mo max) | ||
| + | [ -f " | ||
| for MOUNT in " | for MOUNT in " | ||
| Ligne 279: | Ligne 287: | ||
| if mountpoint -q " | if mountpoint -q " | ||
| + | # Normalise le nom du lock et timestamp (pour dashboard) | ||
| + | if [ " | ||
| + | NAME=" | ||
| + | else | ||
| + | NAME=$(basename " | ||
| + | fi | ||
| - | # Normalise le nom du lock (évite le cas de "/" | ||
| - | NAME=$(basename " | ||
| - | [ -z " | ||
| mkdir -p / | mkdir -p / | ||
| LOCKFILE="/ | LOCKFILE="/ | ||
| Ligne 294: | Ligne 305: | ||
| # Fichier de suivi de la dernière exécution | # Fichier de suivi de la dernière exécution | ||
| - | TIMESTAMP_FILE="/ | + | TIMESTAMP_FILE="/ |
| - | | + | |
| - | | + | |
| - | else | + | |
| - | LAST_RUN=" | + | |
| - | fi | + | |
| - | # Liste temporaire | + | # Liste temporaire |
| FILE_LIST=$(mktemp) | FILE_LIST=$(mktemp) | ||
| - | find " | + | |
| + | |||
| + | # Construction dynamique des exclusions si c'est la racine | ||
| + | if [ " | ||
| + | # Liste des chemins à exclure pour le scan du système | ||
| + | EXCLUDES=( | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | "/ | ||
| + | ) | ||
| + | |||
| + | # Construction dynamique du filtre d' | ||
| + | PRUNE_EXPR="" | ||
| + | |||
| + | # On exclut d' | ||
| + | for DISK in " | ||
| + | [ " | ||
| + | done | ||
| + | |||
| + | # Puis on ajoute les exclusions système | ||
| + | for EXCL in " | ||
| + | PRUNE_EXPR=" | ||
| + | done | ||
| + | |||
| + | # Supprime le dernier -o éventuel (sinon find râle) | ||
| + | PRUNE_EXPR=${PRUNE_EXPR% -o} | ||
| + | |||
| + | echo " | ||
| + | |||
| + | # Recherche des fichiers modifiés en ignorant les exclusions | ||
| + | find / \( $PRUNE_EXPR \) -prune -o -type f -newermt " | ||
| + | else | ||
| + | # Pour les autres montages, on scanne tout | ||
| + | | ||
| + | fi | ||
| if [ -s " | if [ -s " | ||
| - | # Limiter | + | |
| - | SCAN_OUTPUT=$(ionice -c3 nice -n19 xargs -0 -a " | + | |
| + | | ||
| + | SCAN_OUTPUT=$(ionice -c3 nice -n19 \ | ||
| + | | ||
| echo " | echo " | ||
| - | # Alerte mail si virus trouvé | + | # Envoi d' |
| if echo " | if echo " | ||
| - | echo -e " | + | |
| + | | ||
| + | echo | ||
| + | echo "$SCAN_OUTPUT" | ||
| + | } | / | ||
| fi | fi | ||
| else | else | ||
| Ligne 318: | Ligne 377: | ||
| fi | fi | ||
| - | # Nettoyage | + | # Sauvegarde du timestamp et nettoyage |
| - | rm -f " | + | |
| date '+%F %T' > " | date '+%F %T' > " | ||
| + | rm -f " | ||
| + | trap - EXIT | ||
| else | else | ||
| Ligne 330: | Ligne 390: | ||
| fi | fi | ||
| done | done | ||
| + | |||
| + | |||
| + | |||
| + | |||
| </ | </ | ||
| Ligne 335: | Ligne 399: | ||
| Il va falloir que vous adaptiez cette fonction bash à votre environnement | Il va falloir que vous adaptiez cette fonction bash à votre environnement | ||
| - | < | + | < |
| declare -A MOUNTS_SCHEDULE=( | declare -A MOUNTS_SCHEDULE=( | ||
| ["/ | ["/ | ||
| Ligne 347: | Ligne 411: | ||
| Pensez également à adapter cette ligne | Pensez également à adapter cette ligne | ||
| - | < | + | < |
| MAILTO=" | MAILTO=" | ||
| </ | </ | ||
| Ligne 357: | Ligne 421: | ||
| - | < | + | < |
| 0 * * * * / | 0 * * * * / | ||
| </ | </ | ||
| Ligne 368: | Ligne 432: | ||
| - | < | + | < |
| / | / | ||
| weekly | weekly | ||
| Ligne 392: | Ligne 456: | ||
| - | < | + | < |
| + | # --- Date de scan --- | ||
| print_clamav_last_run() { | print_clamav_last_run() { | ||
| local mount=$1 | local mount=$1 | ||
| - | local base=$(basename " | + | local base |
| - | [ -z "$base" ] && | + | |
| + | | ||
| + | else | ||
| + | base=$(basename " | ||
| + | fi | ||
| local ts_file="/ | local ts_file="/ | ||
| local color=$GREEN | local color=$GREEN | ||
| Ligne 406: | Ligne 475: | ||
| local now_epoch=$(date +%s) | local now_epoch=$(date +%s) | ||
| local age_hours=$(( (now_epoch - last_epoch) / 3600 )) | local age_hours=$(( (now_epoch - last_epoch) / 3600 )) | ||
| + | |||
| if [ " | if [ " | ||
| color=$GREEN | color=$GREEN | ||
| Ligne 417: | Ligne 487: | ||
| fi | fi | ||
| - | # Alignement | + | |
| - | printf " | + | local label=" |
| + | [ " | ||
| + | |||
| + | | ||
| + | printf " | ||
| } | } | ||
| + | |||
| </ | </ | ||
| Et pour insérer les entrées, ajouter les lignes suivantes à votre dashboard | Et pour insérer les entrées, ajouter les lignes suivantes à votre dashboard | ||
| - | < | + | < |
| echo "💽 Disques :" | echo "💽 Disques :" | ||
| MOUNTS=("/ | MOUNTS=("/ | ||