Mettre à jour kaspersky sous kwartz

kaspersky-banner

Kaspersky est largement utilisé dans les réseaux pédagogiques de l’académie de Lille et quoique gourmand en ressources mémoire il s’avère très efficace en terme de sécurité. Mais attention pourtant, faire une installation par défaut et laisser chaque postes de vos salles pupitres récupérer sa propre version de mise à jour quotidienne des définitions de virus, risque de sérieusement encombrer la bande passante de votre établissement. Heureusement Kasperky offre la possibilité de récupérer ces définitions de virus localement ou depuis un partage réseau …

Et qui d’autre de mieux placé que votre serveur Kwartz pour récupérer cette mise à jour ? humm ?!

Commençons …

Alors soyons clair, je ne vais pas ici vous faire un cour détaillé sur le shell bash, je vais juste vous donner les quelques pistes pour mieux comprendre ce script et le configurer par vous même selon vos préférences et les spécifications de votre établissement.

Il existe plusieurs méthodes pour éditer du script, la plus simple et de loin la moins bonne étant de l’éditer avec le notepad Windows. Le problème est que l’encodage des caractères risque de rendre votre script complétement illisible par un système Linux. La meilleur solutions est donc de télécharger le freeware Notepad++ et de l’installer. Il a le gros avantage d’être beaucoup plus complet que son alter ego avec notamment la colorisation syntaxique de nombreux langages et l’encodage selon les OS . Donc premièrement lancez Notepad++ faites Fichier/Nouveau puis Langage/Shell et enfin Format/Convertir en format Unix. Vous voilà avec une page de script aux normes, on a plus qu’à commençer à taper nos lignes de code.

1.#!/bin/bash
2.############################################################
3.# SCRIPT DE MISE A JOUR DES DEFINITIONS DE VIRUS KASPERSKY #
4.############################################################

Explications : La première ligne « prévient » le système que le langage utilisé est en bash et détermine la localisation de son interpréteur.
La suite c’est juste une fioriture, histoire de mettre un titre à votre script

Répertoires de stockage

05.#PARAMETRES DE CONFIGURATION (personnalisables)
06.#---------------------------------------------
07.#    =>CHEMINS ET FICHIERS
08.#        //Répertoires d'exécution
09. path="/home/kwartz/Programmes/KASPERSKY/"; #Repertoire racine ( contient le script )
10. cpath=${path}"cache/"; #Repertoire de stockage des archives téléchargés
11. dpath=${path}"definitions/"; #Repertoire de stockage des fichiers de dépôt des définitions
12. lpath=${path}"logs/"; #Repertoire de stockage des fichiers de journalisation du script
13.#        //Liste des fichiers à nettoyer dans le repertoire de dépôt des définitions
14.#          (séparés par des espaces - recommandation : ne pas modifier)
15. old_files=" avc cfg dll dt ini klb lst mhk vnd set txt xml ";

Explications : Ces éléments de configuration sont personnalisables, j’ai opté pour une installation du script dans le partage Programmes du serveur Kwartz puisque le script sera exécuté par l’utilisateur winadmin.  Il est « seul » à posséder les droit en écritures dans ce répertoire, ce qui évite qu’un petit malin vienne vous supprimer vos fichiers.

Miroir mon beau miroir …

16.#    =>MIROIRS ET CONFIG DE CHARGEMENT
17.miror[0]="http://dnl-eu8.kaspersky-labs.com/zips/"; #Miroir France
18.miror[1]="http://dnl-eu9.kaspersky-labs.com/zips/"; #Miroir France
19.miror[2]="http://dnl-eu7.kaspersky-labs.com/zips/"; #Miroir Belgique
20.miror[3]="http://dnl-eu5.kaspersky-labs.com/zips/"; #Miroir Belgique
21.miror[4]="http://dnl-eu6.kaspersky-labs.com/zips/"; #Miroir Belgique
22.miror[5]="http://dnl-us9.kaspersky-labs.com/zips/"; #Miroir Etats-Unis
23.miror[6]="http://dnl-us5.kaspersky-labs.com/zips/"; #Miroir Etats-Unis
24.miror[7]="http://dnl-eu10.kaspersky-labs.com/zips/";#Miroir Estonie
25.#miror[8]="http://dnl-pr1.kaspersky-labs.com/zips/";#Miroir Russie
26.#        //Liste des archives à récupérer sur le site de Kaspersky (recommandation : ne pas modifier)
27.archives[0]="av-i386-cumul.zip";
28.archives[1]="av-i386-weekly.zip";
29.archives[2]="av-i386-daily.zip";
30.#        //Configuration du téléchargement
31.attempt=2; #tentative par miroir (defaut 2)
32.waiting=10; #temps d'attente avant d'annuler une tentative sans réponse
33. #( defaut 10 secondes / mettre à 30 pour une connexion lente type 56ko/s)

Explications : Dans la première partie on renseigne tous les miroirs de téléchargements où le script ira chercher les archives contenant les définitions de virus (miror[n]). Vous pouvez changer l’ordre des priorités en changeant la numérotation, attention cela dit à démarrer de 0, qu’ils se suivent et à ne pas mettre plusieurs fois le même numéro. Pour désactiver un miroir, il suffit de commenter la ligne en ajoutant un « # » (Cf. l.10 : #miror[8] …). Il est également possible d’ajouter vos propres miroirs.

Les variables archives[n] sont les trois archives de définitions récupérés par le script, il est recommandé de ne pas modifier ces paramètres.

attempt correspond au nombre de tentatives effectué par miroir en cas d’échec

waiting est le temps d’attente sans réponses avant de considérer en échec une tentative de connexion au miroir

Numéro de version et temporisation

34.#    =>VERSION D'EXECUTION DU SCRIPT (!!ne pas modifier!!)
35. version=$(date +%d-%m-%Y);
36. time=$(date +%Hh%M);
37.#        //Jour du mois pour effectuer la mise à jour cumulative
38.monthly_day="01";
39.#        //Jour de la semaine pour effectuer la mise à jour hebdomadaire
40.weekly_day="0";

Explications : version et time servent à nommer les fichiers et renseigner la journalisation, ne changez pas ces paramètres …
En revanche monthly_day permet de choisir le jour du mois pour faire la mise à jour cumulatives (jour à 2 chiffres => le 01 par defaut).

De même weekly_day permet de définir le jour de la semaine quand faire la Maj hebdomadaire (0:dimanche , 1:lundi, …, 6:samedi => 0 par defaut)

Journalisation des mises à jour

41.#    =>FICHIERS DE LOG ( Récupération des infos de mise à jour)
42.#        //Nom des fichiers
43.suffix="upddef.log" #suffixe des fichiers de log
44.detail="${version}_${time}_${suffix}"; #nom du fichier inclus l'heure et la date
45.log="${version}_${suffix}"; #nom du fichier inclus la date
46.#        //Texte de séparation des éléments des blocs d'informations
47.#          (doit toujours commencer par un # ou simplement un retour chariot: \r)
48.separator="#---------------------------------#\r";
49.#        //Entête des fichiers de log
50.header="#\tMISE A JOUR DES DEFINITIONS DE KASPERSKY DU ${version}\t#\r\r";
51.#        //Durée de conservation des logs (en jours)
52.cache="3";
53.
54.#    =>MAIL
55.#        //Envoie du fichier de log par mail (defaut : `true` mettre à `false` si vous ne souhaitez pas envoyer le fichier de log par mail)
56.sendmail=true;
57.#        //destinataires du mail ( separés par des espaces ex: " winadmin gates.bill steve.jobs tovald.linus@tux.fr " les mails vers les comptes exterieurs ne fonctionneront que si votre smtp kwartz est configuré  )
58.to=" winadmin ";
59.<pre>

Explications : Cette fonctionnalité va vous permettre de journaliser les mises à jour dans un fichier texte et le cas échéant d’identifier les problèmes

Le gros morceau qui va bien

060.#################################################################################################################################
061.
062.#ETAPE 1 : ENVOIE PAR MAIL DU LOG DE LA VEILLE (facultatif)
063.#-----------------------------------------------------------------------------
064.yesterday=$(date -d "-1 day" +%d-%m-%Y);
065.if ${sendmail}  && [ -e ${lpath}${yesterday}_${suffix} ]  && ! [ -e ${cpath}${version}_mail.cache ]
066.then cat ${lpath}${yesterday}_${suffix} | mail -s "mise à jour de kaspersky ${yesterday}" ${to}
067.touch ${cpath}${version}_mail.cache;
068.fi
069.
070.#ETAPE 2 : TEST D'ECRITURE ET CREATION DE L'ARBORESCENCE DES REPERTOIRES
071.#--------------------------------------------------------------------------------------------------------
072.if ! [ -e ${path} ]; then echo "ATTENTION - Le dossier ${path} n'existe pas - FIN D'EXECUTION DU SCRIPT"; exit; fi #Test d'existance du dossier racine (echec=> arrêt du script)
073.if ! [ -w  ${path} ]; then echo "ATTENTION - Le dossier ${path} n'est pas inscriptible - FIN D'EXECUTION DU SCRIPT "; exit; fi #Test d'écriture du dossier racine (echec=> arrêt du script)
074.[ -e ${cpath} ] || mkdir ${cpath}; #Création du répertoire de stockage des archives téléchargés
075.if ! [ -w  ${cpath} ]; then echo "ATTENTION - Le dossier ${cpath} n'est pas inscriptible - FIN D'EXECUTION DU SCRIPT"; exit; fi #Test d'écriture du dossier de cache (echec=> arrêt du script)
076.[ -e ${dpath} ] || mkdir ${dpath}; #Création du répertoire des fichiers de définitions
077.if ! [ -w ${dpath} ]; then echo "ATTENTION - Le dossier ${dpath} n'est pas inscriptible - FIN D'EXECUTION DU SCRIPT"; exit; fi #Test d'écriture du dossier de définitions (echec=> arrêt du script)
078.[ -e ${lpath} ] || mkdir ${lpath}; #Création du répertoire de log
079.if ! [ -w  ${lpath} ]; then echo "ATTENTION - Le dossier ${lpath} n'est pas inscriptible - FIN D'EXECUTION DU SCRIPT"; exit; fi #Test d'écriture du dossier de log (echec=> arrêt du script)
080.
081.#ETAPE 3 : INITIALISATION DES FICHIERS DE LOG
082.#----------------------------------------------------------------
083.#Detail
084.touch ${lpath}${detail}; #Création du fichier de détail
085.echo -e "${header} ${time}\r" > ${lpath}${detail}; #Entête du fichier de détail
086.#Log Global
087.if (!(test -e ${lpath}${log})) then touch ${lpath}${log}; echo -e "${header}\r" > ${lpath}${log}; fi #Si le fichier de log n'existe pas on le crée, et on inscrit l'entête
088.if (!(test -w ${lpath}${log})) then echo "ATTENTION - Le fichier de log n'est pas inscriptible - FIN D'EXECUTION DU SCRIPT "; exit; fi #Si le fichier de log n'est pas incriptible, on arrête l'exécution du script
089.
090.#ETAPE 4 : NETTOYAGE  (Ne met pas en échec l'exécution du script)
091.#------------------------------------------------------------------------------
092.echo -e ${separator} >> ${lpath}${detail}
093.echo -e "\tNETTOYAGE\r\r" >> ${lpath}${detail}
094.#Nettoyage des anciens fichiers de définitions ( Une fois par mois lors du chargement du Cumul, puisque les fichiers inclus au Cumul sont necessaires pour toute éventuelle nouvelle installation de Kaspersky sur un client )
095.if [ "$(date +%d)" != "${monthly_day}" ] || [ -e "${cpath}${version}_cleaning-definitions.cache" ]
096.then echo -e "Pas de nettoyage des définitions programmé\r" >> ${lpath}${detail};
097.else
098.echo -e "\t\tPurge des anciennes définitions\r" >> ${lpath}${detail}
099.for old_file in ${old_files}
100.do
101.rm ${dpath}*.${old_file} && echo -e "fichiers ${old_file} effacés dans ${dpath}\r" >> ${lpath}${detail} || echo -e "aucun fichier ${old_file} a effacer dans ${dpath}\r" >> ${lpath}${detail};
102.done
103.touch "${cpath}${version}_cleaning-definitions.cache";
104.fi
105.#Nettoyage des anciens fichiers d'archives et possibles téléchargements incomplets
106.echo -e "\t\tPurge des archives\r" >> ${lpath}${detail}
107.i=0
108.while [ $i -lt ${#archives[*]} ]
109.do
110.rm ${cpath}${archives[$i]}* && echo -e "tous les anciens fichiers d'archives de type ${archives[$i]} ont été supprimés dans ${cpath}\r" >> ${lpath}${detail} || echo -e "pas de fichiers d'archives de type ${archives[$i]} a supprimer\r" >> ${lpath}${detail};
111.((i++));
112.done
113.#Nettoyage des anciens fichiers log et des anciens fichiers de cache
114.limit=$(date -d "$cache days ago" +%y-%m-%d);
115.buffer=$(date -d "$limit -7 days" +%y-%m-%d); #Le tampon sert a effacer tous les fichiers une semaine avant le cache (=>sécurité supplémentaire)
116.while [ $buffer != ${limit} ]
117.do
118.rm -f ${lpath}$(date -d "${buffer}" +%d-%m-%Y)*.log;
119.rm -f ${cpath}$(date -d "${buffer}" +%d-%m-%Y)*.cache;
120.buffer=$(date -d "$buffer +1 day" +%y-%m-%d);
121.done
122.#ETAPE 5 : CHARGEMENT ET DECOMPRESSION DES ARCHIVES  (CUMUL, WEEKLY, DAILY)
123.#-----------------------------------------------------------------------------------------------------------
124.echo -e ${separator} >> ${lpath}${detail}
125.echo -e "\tCHARGEMENT ET DECOMPRESSION DES ARCHIVES\r\r" >> ${lpath}${detail}
126.
127.#    =>TEST DES ARCHIVES A RECUPERER
128.#        //DEFINITIONS CUMULATIVES (Cumul)
129.if [ "$(date +%d)" != "${monthly_day}" ]
130.then echo -e "Pas de mise à jour mensuel aujourd'hui\r" >> ${lpath}${detail};
131.unset archives[0]; #Annulation de la récupération de l'archive de Cumul
132.else
133.if [ -e "${cpath}${version}_${archives[0]}.cache" ]
134.then echo -e "Mise à jour mensuel déjà récupérée aujourd'hui\r" >> ${lpath}${detail};
135.unset archives[0]; #Annulation de la récupération de l'archive de Cumul
136.fi
137.fi
138.#        //DEFINITIONS HEBDOMADAIRE(Weekly)
139.if [ "$(date +%w)" != "${weekly_day}" ]
140.then echo -e "Pas de mise à jour hebdomadaire aujourd'hui\r" >> ${lpath}${detail};
141.unset archives[1]; #Annulation de la récupération de l'archive de Weekly
142.else
143.if [ -e "${cpath}${version}_${archives[1]}.cache" ]
144.then echo -e "Mise à jour hebdomadaire déjà récupérée aujourd'hui\r" >> ${lpath}${detail};
145.unset archives[1]; #Annulation de la récupération de l'archive de Weekly
146.fi
147.fi
148.
149.#    =>TRAITEMENT DES ARCHIVES A RECUPERER
150.for archive in ${archives[@]} #Traitement de chaque archive de définition
151.do
152.echo -e "\r\tTraitement des définitions de ${archive}\r">> ${lpath}${detail}
153.#        //CHARGEMENT
154.i=0;
155.while [ $i -lt ${#miror[*]} ] #Test de chaque miroir de téléchargement
156.do
157.if wget -t ${attempt} -T ${waiting} -P${cpath} ${miror[$i]}${archive} #Test de chargement de l'archive de définitions
158.then echo -e "Chargement du dernier fichier ${archive} sur ${miror[$i]}: réussi\r" >> ${lpath}${detail}; i=${#miror[*]}; dl=true; #Chargement réussi
159.else
160.echo -e "chargement du fichier ${archive} sur ${miror[$i]} : échec\r" >> ${lpath}${detail}; ((i++));# Si la tentative de chargement renvoie un échec on test sur le miroir suivant
161.fi #Fin de test de chargement de l'archive de définitions
162.done #Fin de test de chaque miroir de téléchargement
163.if [ -z "${dl}" ]
164.then echo -e "Impossible de charger le fichier de définition ${archive}\r" >> ${lpath}${detail}; #Toutes les tentatives sur tous les miroirs ont échoué
165.fi
166.#        //DECOMPRESSION
167.if ${dl} && unzip -o -q -d ${dpath} ${cpath}${archive} #Test de décompression de l'archive chargé et écrasement des anciennes versions de définitions
168.then touch ${cpath}${version}_${archive}.cache ;
169.echo -e "décompression du dernier fichier ${archive} dans ${dpath} : réussi\r" >> ${lpath}${detail}; dzip=true;#Décompression Réussie
170.else
171.echo -e "impossible de décompresser le dernier fichier ${archive} dans ${dpath}\r" >> ${lpath}${detail}; ((i++));#Problème de décompression on passe au miroir suivant
172.fi #Fin de test de décompression de l'archive chargé
173.done #Fin de traitement de chaque archive de définition
174.
175.#ETAPE 6 : ECRITURE DU RESULTAT DE MISE A JOUR DANS LE FICHIER DE LOG
176.#-------------------------------------------------------------------------------------------------
177.#Resultat de la mise à jour
178.echo -e ${separator} >> ${lpath}${log}
179.if ${dl} && ${dzip}
180.then echo -e "Mise à jour du ${version} à ${time} : ok\r" >> ${lpath}${log};
181.else
182.echo -e "Mise à jour du ${version} à ${time} : échec\r" >> ${lpath}${log};
183.fi
184.exit;

Amateur de scripts et autres boucles, régale toi. Faire un descriptif exhaustif du script serait bien inutile et pas vraiment digne d’intérêt. Il est en plus déjà largement commentés.
Enfin sans être parfait il est toutefois fonctionnel puisque testé en conditions réelles.

La p’tite touche qui ferait plaisir…

185.#############################################################
186.# par Jordy  Manner
187.# (cherche un emploi - contact : http://www.milkcreation.fr )
188.#############################################################

Facultatif mais si vous faites tourner le script soyez sympa de le rajouter, ça mange pas de pain et ça sauvera un informaticien pâtophobe !

Pour terminer vous pouvez télécharger le script update.sh

Quand à l’installation du script via un cron sur Kwartz, elle est largement détaillé dans les procédures d’installations de Kaspersky sur les sites des BAIP et de la CANTE :

http://baip.fr/nicolas/kaspersky/

http://www3.ac-lille.fr/crid-systeme/download/antivirus/kaspersky-kwartz.pdf

La procédure est la même sauf que vous n’avez qu’un script à installer au lieu de trois.

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Twitter picture

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Connexion à %s




Suivre

Get every new post delivered to your Inbox.