Mise à jour des signatures de virus via l'utilisation d'un serveur Samba PDC

L'exemple proposé fait référence aux signatures de virus Norton (logiciel antivirus pour lequel le Rectorat de Rouen paye de nombreuses licences chaquue année), mais la démarche doit pouvoir s'adapter à un autre antivirus.

Il s'agit de faire exécuter la mise à jour en insérant quelques lignes dans le script de login des utilisateurs.

Vous pouvez probablement apporter d'autres raffinements.

- Créer en tant que super-utilisateur (root) des dossiers /home/samba/telech_norton et /home/samba/majnorton:

mkdir /home/samba/telech_norton
mkdir /home/samba/majnorton

- En changer le propriétaire, pour l'utilisateur apache:
chown apache /home/samba/telech_norton
chown apache /home/samba/majnorton

- En changer les droits pour que seul l'utilisateur apache ait le droit d'y écrire et les autres n'aient que le droit d'y entrer et d'y lire le contenu:
chmod 755 /home/samba/telech_norton
chmod 755 /home/samba/majnorton

- Créer des dossiers pour chaque machine du réseau se connectant au serveur de domaine:
mkdir /home/samba/machines
mkdir /home/samba/machines/pc10
mkdir /home/samba/machines/pc11
mkdir /home/samba/machines/pc12
...

(il est possible d'utiliser un script pour automatiser cette création.
Voici un petit script maison à cet effet: script_creation_dossiers.sh;
En voici un autre pour des noms de machines n'ayant pas un préfixe commun: script_creation_dossiers.sh
).

Il faut de plus que tout utilisateur puisse y écrire:

chmod 777 /home/samba/machines/* -R

- Ajouter/modifier dans la section [global] de votre /etc/smb.conf (ou/etc/samba/smb.conf sur certaines versions de Samba):
security = user
local master = yes
preferred master = Yes
domain master = yes
domain logons = yes
logon script = script.bat
Remarque: Cela peut aussi être un script%U.bat pour adapter d'autres paramètres du script de connexion aux différents utilisateurs.

- Déclarer dans /etc/smb.conf (ou /etc/samba/smb.conf sur certaines versions de Samba):
[pc$]
comment = Dossier Machines
path = /home/samba/machines/%m
public = yes
guest ok = yes
writable = yes
browseable = yes
printable = no

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
writable = no
share modes = no
public = no
browseable = no
printable = no
write list = root

[telech]
comment = Dossier temporaire de téléchargement des signatures de virus pour Norton Antivirus
path = /home/samba/telech_norton
public = yes
guest ok = yes
writable = no
browseable = yes
printable = no

[majnorton]
comment = Dossier des signatures de virus pour Norton Antivirus
path = /home/samba/majnorton
public = yes
guest ok = yes
writable = no
browseable = yes
printable = no

Précision: Le partage pc$ est destiné à stocker un fichier témoin de ce que la mise à jour a ou non été effectuée dans la journée pour telle machine.
Par ailleurs, une fois la phase de tests passés, vous pouvez déclarer browseable=no pour le partage [telech].

- Redémarrer Samba:
samba stop
samba start

- Créer, en tant que root, le script suivant (sous Linux pour avoir les fins de ligne correctes) et l'enregistrer dans /home/samba/telech_norton/recupnorton_lundi.sh:
#!/bin/sh
#Déclaration des variables:
desttelech=/home/samba/telech_norton
destmajnorton=/home/samba/majnorton
chemindossiermachines=/home/samba/machines
nomfich=symcdefsx86.exe

#Téléchargement:
wget --passive-ftp ftp://ftp.symantec.com:21/public/english_us_canada/antivirus_definitions/norton_antivirus/static/$nomfich -o $desttelech/telechexe.log -P $desttelech -v -l 1

#Test du fichier de log pour déterminer si le téléchargement a réussi:
if cat $desttelech/telechexe.log | grep 100% >> /dev/null; then
    #Suppression de la version précédente des signatures:
    rm -f $destmajnorton/majnort.exe

    #On déplace et on renomme le fichier téléchargé:
    mv $desttelech/$nomfich $destmajnorton/majnort.exe

    #On supprime les témoins de ce que la mise à jour (précédente) a été effectuée:
    for I in $(ls $chemindossiermachines)
    do
        rm -f $chemindossiermachines/$I/majok.txt
    done
else
    #On supprime l'archive incomplètement téléchargée:
    rm -f $desttelech/$nomfich
    rm -f $desttelech/telechexe.log
fi
Le voici.

- Créer, en tant que root, le script suivant (sous Linux pour avoir les fins de ligne correctes) et l'enregistrer dans /home/samba/telech_norton/recupnorton_semaine.sh:
#!/bin/sh
#Déclaration des variables:
desttelech=/home/samba/telech_norton
destmajnorton=/home/samba/majnorton
chemindossiermachines=/home/samba/machines
nomfich=symcdefsi32.exe

#Téléchargement:
wget --passive-ftp ftp://ftp.symantec.com:21/public/english_us_canada/antivirus_definitions/norton_antivirus/static/$nomfich -o $desttelech/telechexe.log -P $desttelech -v -l 1

#Test du fichier de log pour déterminer si le téléchargement a réussi:
if cat $desttelech/telechexe.log | grep 100% >> /dev/null; then
    #Suppression de la version précédente des signatures:
    rm -f $destmajnorton/majnort.exe

    #On déplace et on renomme le fichier téléchargé:
    mv $desttelech/$nomfich $destmajnorton/majnort.exe

    #On supprime les témoins de ce que la mise à jour (précédente) a été effectuée:
    for I in $(ls $chemindossiermachines)
    do
        rm -f $chemindossiermachines/$I/majok.txt
    done
else
    #On supprime l'archive incomplètement téléchargée:
    rm -f $desttelech/$nomfich
    rm -f $desttelech/telechexe.log
fi
Le voici.

 

- Changer le propriétaire et les droits de ces deux scripts:

chown apache /home/samba/telech_norton/recupnorton_lundi.sh
chmod 744 /home/samba/telech_norton/recupnorton_lundi.sh
chown apache /home/samba/telech_norton/recupnorton_semaine.sh
chmod 744 /home/samba/telech_norton/recupnorton_semaine.sh


- Créer une Tâche planifiée à l'aide de l'utilitaire cron:


- Un exemple de script de login:
net use n: \\pc16\majnorton
If exist \\pc16\pc$\majok.txt goto dejamaj
:maj
n:
cd \majnorton
majnorton /q
cd \
echo "majOK" >>\\pc16\pc$\majok.txt
goto fin
:dejamaj
@echo La mise à jour a déjà été faite.
:fin
c:
cd \windows

Remarque: Le serveur se nomme ici pc16.

L'intérêt de cette méthode par rapport à la précédente est qu'elle ne repose pas pour les clients sur des Tâches planifiées.
Si un poste client est éteint à l'heure de la mise à jour, cela n'a pas d'importance, puisque la mise à jour est effectuée lorsqu'on se logue.
Si vos utilisateurs ne sont pas disciplinés et cliquent sur Annuler ou frappent ECHAP au login, ils sont hors réseau et ne bénéficient pas de la mise à jour.
Vous pouvez forcer l'utilisation d'un nom d'utilisateur et mot de passe valide en passant une clé de registre dans le script de login:
regedit /s \\pc16\netlogon\cconnex.reg
Pour être efficace, il faut qu'un utilisateur se connecte correctement une fois (et que personne n'aille bricoler la base de registre).

Le fichier cconnex.reg proposé:
REGEDIT4
[HKEY_LOCAL_MACHINE\Network\Logon]
# empeche dappuyer sur echap au login:
"MustBeValidated"=dword:00000001

# Oblige l'utilisateur à se connecter avec un mot de passe valide:
"LMLogon"=dword:00000001

# ne pas montrer le login du dernier utilisateur:
"DontShowLastUser"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Network]
# empeche le cache des mots de pass (important pour la securite):
"DisablePwdCaching"=dword:00000001
# interdit les mots de passe de moins de 5 caractères:
"MinPwdLen"=dword:00000005


Inconvénients:
- Il faut paramétrer chaque poste client:
Propriétés du Voisinage Réseau, Propriétés de "Client pour les réseaux Micro$oft", cocher la case "Se connecter sur un domaine NT" et donner comme nom de domaine NT, le nom du groupe de travail, nom aussi déclaré dans /etc/smb.conf à la ligne:
workgroup = cdi
Ici le groupe de travail est nommé "cdi".
- Vos utilisateurs doivent être déclarés pour Linux et pour Samba.
- Si votre serveur vient à défaillir (extrêmement rare), il vous faut disposer d'une disquette de déblocage des postes clients, pour qu'ils puissent se connecter (sans bénéficier du serveur Samba, le temps que vous déterminiez la source du problème).
Franck MOLLE, Animateur sur le Secteur de Louvier/Vernon a réalisé une disquette de boot DOS qui permet de régler les problèmes de connexion au réseau:
En voici une image: disk_rescue_f_molle.bin
Pour créer une disquette d'après cette image, utilisez l'utilitaire DOS rawrite, ou rawritewin sous Window$, ou encore dd if=/chemin/disk_rescue_f_molle.bin of=/dev/fd0 sous Linux.
 
Remarque:
(1) Je ne détaille pas ici la mise en place d'un serveur Samba PDC.

(2) Une solution analogue doit pouvoir est adaptée via Vigile qui autorise l'utilisation de scripts au démarrage.