<< Retour

S3T2 Révisions 2

Le temps indicatif des questions est donné entre parenthèses en minutes. /ex. : (20')

Le rapport de travail est rendu par collecte sur moodle au bout de la séance de travail, aucun retard ne sera admis.

Nom du fichier rendu sous forme PDF : S3T2 - NOM prenom.pdf

DOS Script (2 heures)

Ressource : dossier technique sur le langage de commande C3-S1B1t DOS 

Une société possède un serveur FTP permettant aux utilisateurs de partager leurs documents internes. Afin de garantir la qualité de service, M. Arthaud, responsable informatique, vous demande de rédiger deux script BATCH :  

Les scripts sont tous sauvegardés dans le répertoire Scripts à la racine du disque C.

1 ServerSave.bat

Script de sauvegarde

Le script à réaliser doit récupérer tous les documents des répertoires de chaque utilisateur et les copier dans le répertoire FTP_SAV. Seuls les nouveaux fichiers ou ceux modifiés doivent être copiés afin de réduire la charge de travail de copie.

Les noms des répertoires principaux (FTP/Utilisateurs et FTP-SAV) seront placés dans des variables.

  1. Rédiger le code du script demandé.
  2. Proposer une solution pour lancer automatiquement le script à interval régulier (/exemple, tous les soirs à 22h).
  3. Définir le type de sauvegarde effectuée et la comparer aux deux autres types classiques de sauvegarde.

2 AddUser.bat

Le script de création d'utilisateurs permet de créer le répertoire de documents de l'utilisateur donné en paramètre. Ensuite, il ajoute une fiche utilisateur dans le fichier server.cfg et le nom de l'utilisateur dans le fichier users.cfg.

Le script admet trois à quatre paramètres :

%1 = login   %2 = mot de passe en clair
%3 = nom de l'utilisateur   %4 = prénom de l'utilisateur (optionnel)

Le mot de passe est chiffré dans le script, à l'aide d'un exécutable qui renvoie une chaîne de caractère chiffrée en MD5 à partir du mot de passe en clair. Vous utiliserez la commande set /a pour effectuer l'affectation d'une variable avec le résultat de la commande md5.exe

La fiche est composée comme l'exemple suivant :

TypSoft Ftp server xLight
users.ini
[zebra]
Password=A4d5369f566AC928E580*40
UserName=Zebra Julien
VirtualDir=1
HomePath=c:\FTP\Utilisateurs\Zebra\
Dir0=c:\FTP\Utilisateurs\Zebra\|DU_EMRY_S__|
Dir1=c:\FTP\Commun\partage\|DU_EMRY_SV_|Echange
Dir2=c:\FTP\Publication\|D__________|Pub
EnterMessage=c:\FTP\Utilisateurs\Zebra\.welcome # "Bienvenue sur le ftp de Julien Zebra"

2 fichiers concernés

ftpd.users
ftpd.users
<virtualserver 0.0.0.0:21>	# Nom du serveur
 
<username "anonymous">	### nom 1er utilisateur
AllowNoPassword:yes		# ne possède pas de mdp
VirtualPath: "/|c:\temp\FTP\|R--L---S" # chemin home
</username>
 
<username "alpha">		### nom utilisateur suivant
VirtualPath: "/|c:\temp\FTP\Utilisateur\Alpha\|RWCLADNS" # home
VirtualPath: "/Pub/|c:\temp\FTP\Publication\|R--L---S"	 # lecture seule
</username>
 
</virtualserver>
ftpd.password
ftpd.password
<virtualserver 0.0.0.0:21>
anonymous:00000000000000000000000000000000 	## no password
alpha:2c1743a391305fbf367df8e4f069f9f9		## password défini
</virtualserver>
  1. Rédiger l'algorithme du script à écrire
  2. Écrire le code du script proposé

La commande set /a psswd=md5.exe mot_de_passe ne fonctionne pas de cette façon. Le résultat de la commande md5 ne peut pas être récupéré par la commande set. Il existe cependant une solution en trois temps : écrire le résultat de la commande dans un fichier, récupérer le contenu du fichier temporaire dans une variable à l'aide de la commande FOR puis détruire le fichier temporaire.

  1. Écrire la commande FOR qui permet de placer le contenu du fichier temporaire dans une variable.

Correction

1 ServerSave.bat

  1. Rédiger le code du script demandé.

rem Définition des variables
set srce=c:/FTP/Utilisateurs
set cible=c:/FTP-SAV

rem execution du travail
xcopy /E %srce%/*.* %cible%/

Pour xcopy, l'aide propose de mettre /E pour copier aussi les répertoires et sous-répertoires vides. On ajoute un slash (/) à la cible afin de bien définir qu'il s'agit d'un répertoire de destination et non d'un nom de fichier.

On utilise le chemin complet et pas de commande cd pour faciliter l'écriture du script. En plus, ça ne sert à rien.

  1. Proposer une solution pour lancer automatiquement le script à interval régulier (/exemple, tous les soirs à 22h).

On pourra utiliser le planificateur d'événement de Windows

  1. Définir le type de sauvegarde effectuée et la comparer aux deux autres types classiques de sauvegarde.

C'est une sauvegarde de type incrémentale car seuls les fichiers nouveaux ou modifiés sont copiés.

Une sauvegarde complète effectuerait une copie intégrale des données d'origine. Elle serait très fiable mais prendrait plus de temps car tout est copié.

Une sauvegarde différentielle effectuerait une copie de toutes les modifications depuis la dernière sauvegarde complète.

Une sauvegarde incrémentale effectue bien la copie de tout ce qui a changé depuis la dernière sauvegarde incrémentale. C'est le type de sauvegarde le plus rapide.

Cependant, avec d'autres outils, ce type de sauvegarde est plus difficile à restaurer car il est nécessaire de reconstituer une image en superposant la complète et toutes les incrémentales successives. Ici, ce n'est pas le cas car les sauvegardes successives sont "fusionnées" dans un même répertoire, fichier par fichier.

2 AddUser.bat

Le script de création d'utilisateurs permet de créer le répertoire de documents de l'utilisateur donné en paramètre. Ensuite, il ajoute une fiche utilisateur dans le fichier server.cfg et le nom de l'utilisateur dans le fichier users.cfg.

Le mot de passe est chiffré à l'aide d'un exécutable qui renvoie une chaîne de caractère chiffrée en MD5 à partir du mot de passe en clair. Vous utiliserez la commande set /a pour effectuer l'affectation d'une variable avec le résultat de la commande md5.exe

La fiche est composée comme l'exemple suivant : (voir sujet)

  1. Rédiger l'algorithme du script à écrire

Début du script

Définir les variables :

Récupérer les paramètres

Chiffrer le mot de passe

Créer la fiche temporaire

Créer une sauvegarde du fichier de configuration

Ajouter la fiche au fichier de configuration

Ajouter le login à la liste des utilisateurs

Supprimer la fiche temporaire

Fin du script

  1. Écrire le code du script proposé

REM Définir les variables :
chemin = c:/TypSoFTPServer/
fiches   =server.ini
liste    =users.ini
REM Récupérer les paramètres
login    =%1
mdp      =%2
nom      =%3
pnom     =%4
REM Chiffrer le mot de passe
passwd /a =md5.exe %mdp%

REM Créer la fiche temporaire
echo ================ > %chemin%temp.txt
echo [%login%] >> %chemin%temp.txt
echo Password=%passwd% >> %chemin%temp.txt
echo UserName=%nom% %pnom% >> %chemin%temp.txt
echo VirtualDir=1 >> %chemin%temp.txt
echo HomePath=c:\FTP\Utilisateurs\%login%\  >> %chemin%temp.txt
echo Dir0=c:\FTP\Utilisateurs\Zebra\|DU_EMRY_S__|  >> %chemin%temp.txt
echo Dir1=c:\FTP\Commun\partage\|DU_EMRY_SV_|Echange  >> %chemin%temp.txt
echo Dir2=c:\FTP\Publication\|D__________|Pub  >> %chemin%temp.txt
echo EnterMessage=c:\FTP\Utilisateurs\Zebra\.welcome # "Bienvenue sur le ftp de %pnom% %nom%" >> %chemin%temp.txt

REM Créer une sauvegarde du fichier de configuration
copy %chemin%%fiches% %chemin%sav_%fiches% 
REM Ajouter la fiche au fichier de configuration
type %chemin%temp.txt >> %chemin%%fiches% 
REM Ajouter le login à la liste des utilisateurs
echo %login% >> %chemin%%liste% 
REM Supprimer la fiche temporaire
del %chemin%temp.txt
REM ----------- fin du script -----------

(Vous pouvez voir l'aide des commandes sur le site : http://www.ss64.com/nt/.html)

La commande set /a psswd=md5.exe mot_de_passe ne fonctionne pas de cette façon. Le résultat de la commande md5 ne peut pas être récupéré par la commande set. Il existe cependant une solution en trois temps : écrire le résultat de la commande dans un fichier, récupérer le contenu du fichier temporaire dans une variable à l'aide de la commande FOR puis détruire le fichier temporaire.

  1. Écrire la commande FOR qui permet de placer le contenu du fichier temporaire dans une variable.

REM convertir la chaîne vers un fichier tmp.txt
md5.exe %mdp% > tmp.txt
REM récupérer la chaîne vers une variable
FOR /F "usebackq tokens=1 delims=" %%a in (`type tmp.txt`) DO set passwd=%%a
REM supprimer tmp.txt
del tmp.txt

Ok, c'est compliqué (Voir l'aide FOR). Mais en powershell, c'est plus facile ...