#------------------------------------------------------# # Script de sauvegarde # Auteur: Yohan Fresneau #------------------------------------------------------# import socket, subprocess, os, time #import ip = "172.16.57.4" #ip ecoute serveur port = 25555 #port ecoute serveur ##-------[ Variable ]-------## dossier_source = "" dossier_destination = "" ip_samba = "" username = "" password = "" user = "" passwd = "" ##--------------------------## ##-------[ Creation du socket serveur ]-------## server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((ip,port)) server.listen(1) ##--------------------------------------------## ##-------[ Creation du socket du client ]-------## client, infos_client = server.accept() ##----------------------------------------------## reponse = client.recv(2048).decode() #attent de la reponse du client os.chdir("/save/logs/") #changement d'emplacement du shell python file = open("log.txt", "a") #ouveture du fichier log ##-------[ Creation de l'entete du logs avec date ]-------## file.write("--------------------------------------------------------------------------------\n") file.write("\t\t\t\t\t"+time.strftime("%A %d %B %Y %H:%M:%S")+"\n") file.write("--------------------------------------------------------------------------------\n") ##--------------------------------------------------------## if reponse == "Try_Connexion_Client": #Vertification de la reponse du client pour savoir que ce n'est pas un programme autre qui repond client.send(b"Ok_Connexion") #renvoi de reponse vers le client print("[+] {"+infos_client[0]+"} Connexion effectuer") #affiche que la connexion du client est effectuer file.write("[+] {"+infos_client[0]+"} Connexion effectuer\n") #idem mais dans le log reponse = client.recv(2048).decode() #attente de reponse du client pour son choix ##-------[ Sauvegarde de fichier ]-------## if reponse == "1": #choix de sauvegarde de fichier client.send(b"Ok_Fichiers") #envoi au client que le choix est bien la sauvegarde de fichier print("[+] {"+infos_client[0]+"} Choix : Sauvegarde de fichiers") #affiche le choix a l'ecran file.write("[+] {"+infos_client[0]+"} Choix : Sauvegarde de fichiers\n") #idem dans le log ip_samba = client.recv(2048).decode() #reception adresse ip samba client.send(b"OK_Ip") #revois une reponse de bonne reception de l'ip #print("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba) #affiche l'adresse à l'ecran file.write("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba+"\n") #idem bans le log username = client.recv(2048).decode() #reception user samba client.send(b"OK_User") #revois une reponse de bonne reception de l'username print("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username) #affiche user samba à l'ecran file.write("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username+"\n") #idem bans le log password = client.recv(2048).decode() #reception du mot de passe client.send(b"OK_Password") #revois une reponse de bonne reception du mot de passe print("[+] {"+infos_client[0]+"} Mot de passe samba : "+password) #affiche password samba à l'ecran file.write("[+] {"+infos_client[0]+"} Mot de passe samba : "+password+"\n") #idem bans le log dossier_destination = client.recv(1024).decode() #reception du dossier destination client.send(b"OK_Do") #revois une reponse de bonne reception du dossier samba print("[+] {"+infos_client[0]+"} Dossier destination sur le serveur samba : "+dossier_destination) #affiche dossier samba à l'ecran file.write("[+] {"+infos_client[0]+"} Dossier destination sur le serveur samba : "+dossier_destination+"\n") #idem bans le log dossier_source = client.recv(2048).decode() #reception du dossier source a sauvegarder client.send(b"Ok_Src") #revois une reponse de bonne reception du dossier a sauvegarder print("[+] {"+infos_client[0]+"} Emplacement du dossier sources a sauvegarder : "+dossier_source) #affiche dossier a sauvegarder à l'ecran file.write("[+] {"+infos_client[0]+"} Emplacement du dossier sources a sauvegarder : "+dossier_source+"\n") #idem bans le log print("[+] {Serveur} Debut de sauvegarde des fichiers !") #affiche le debut de la sauvegarde file.write("[+] {Serveur} Debut de sauvegarde des fichiers !\n") #idem bans le log try: print("[+] {Serveur} Creation de l'archive") #affiche la creation de l'archive a l'ecran file.write("[+] {Serveur} Creation de l'archive\n") #idem dans le log time.sleep(1) #une pause de 1 seconde print("--------------------------------------------------------") #delimite les fichier a sauvegarder a l'ecran file_arch = "backup-"+time.strftime("%A-%d-%B-%Y-%H-%M-%S")+".tar.gz" #generation du nom du fichier "Jourenanglais-numerodujour-mois-annee-heure-minute-seconde.tar.gz" os.system("cd /backups-tmp/ && sudo tar zcvf "+file_arch+" "+dossier_source+" --exclude=/sys --exclude=/proc --exclude=/save --exclude=/backups-tmp") #creation de l'archive dans le dossier backups-tmp en local et qui exclue les dossier "/sys /proc /save /backups-tmp" print("--------------------------------------------------------") #delimite les fichier a sauvegarder a l'ecran print("[+] {Serveur} Archive creer") #affiche que l'archive est créer a l'ecran file.write("[+] {Serveur} Archive creer\n") #idem dans le log except: print("[!] {serveur} Erreur de creation de l'archive") #affiche en cas d'erreur que l'archive n'a pas pu etre créer a l'ecran file.write("[!] {serveur} Erreur de creation de l'archive\n") #idem dans le log try: print("[+] {Serveur} Creation point de montage") #affiche la creation du point de montage file.write("[+] {Serveur} Creation point de montage\n") #idem dans le log os.system("sudo mkdir -p /mnt/save") #creation du point de montage print("[+] {Serveur} Point de montage creer") #affiche que le point de montager est creer a l'ecran file.write("[+] {Serveur} Point de montage creer\n") #idem dans le log except: print("[!] {serveur} Point de montage deja existent") #affiche que le point de montager existe deja a l'ecran file.write("[!] {serveur} Point de montage deja existent\n") #idem dans le log try: print("[+] {Serveur} Montage du serveur samba") #affiche le montage du serveur samba sur l'ecran file.write("[+] {Serveur} Montage du serveur samba\n") #idem dans le log os.system("sudo mount -t cifs -o username="+username+",password="+password+" //"+ip_samba+"/"+dossier_destination+" /mnt/save") #montage du serveur samba print("[+] {Serveur} Montage effectuer") #affiche que le montage est bien effectuer a l'ecran file.write("[+] {Serveur} Montage effectuer\n") #idem dans le log except: print("[!] {serveur} Erreur de montage") #affiche que le montage ne c'est pas bien effectuer a l'ecran file.write("[!] {serveur} Erreur de montage\n") #idem dans le log try: print("[+] {Serveur} Copie de l'archive") #affiche que l'on va copier l'archive a l'ecran file.write("[+] {Serveur} Copie de l'archive\n") #idem dans le log os.system("sudo cp /backups-tmp/"+file_arch+" /mnt/save") #copie de l'archive sur le serveur samba print("[+] {Serveur} Copie effectuer") #affiche que la copier l'archive est effectuer a l'ecran file.write("[+] {Serveur} Copie effectuer\n") #idem dans le log except: print("[!] {serveur} Erreur de copie") #affiche que la copier l'archive n'a pas etait effectuer a l'ecran file.write("[!] {serveur} Erreur de copie\n") #idem dans le log try: print("[+] {Serveur} Suppression de l'archive local") #affiche que l'archive local vient d'etre supprimer a l'ecran file.write("[+] {Serveur} Suppression de l'archive local\n") #idem dans le log os.system("sudo rm /backups-tmp/"+file_arch) #suppression de l'archive local print("[+] {Serveur} Suppression effectuer") #affiche que la suppresion a bien etait effectuer a l'ecran file.write("[+] {Serveur} Suppression effectuer\n") #idem dans le log except: print("[!] {serveur} Erreur de suppression") #affiche que la copier de l'archive ne c'est pas effectuer a l'ecran file.write("[!] {serveur} Erreur de suppression\n") #idem dans le log try: print("[+] {Serveur} Demontage du serveur samba") #affiche que le demontage du serveur s'est bien effectuer a l'ecran file.write("[+] {Serveur} Demontage du serveur samba\n") #idem dans le log os.system("sudo umount /mnt/save") #demontage du serveur samba print("[+] {Serveur} Demontage effectuer") #affiche que le demontage c'est bien effectuer a l'ecran file.write("[+] {Serveur} Demontage effectuer\n") #idem dans le log except: print("[!] {serveur} Erreur de demontage") #affiche que le demontage ne c'est pas effectuer a l'ecran file.write("[!] {serveur} Erreur de demontage\n") #idem dans le log print("[+] {Serveur} Copie terminer") #affiche que la copie c'est bien fini a l'ecran file.write("[+] {Serveur} Copie terminer\n") #idem dans le log ##---------------------------------------## ##-------[ Sauvegarde BD ]-------## elif reponse == "2": client.send(b"Ok_BD") print("[+] {"+infos_client[0]+"} Choix : Sauvegarde BD") file.write("[+] {"+infos_client[0]+"} Choix : Sauvegarde BD\n") ip_samba = client.recv(2048).decode() client.send(b"OK_Ip") print("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba) file.write("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba+"\n") username = client.recv(2048).decode() client.send(b"OK_User") print("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username) file.write("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username+"\n") password = client.recv(2048).decode() client.send(b"OK_Password") print("[+] {"+infos_client[0]+"} Mot de passe samba : "+password) file.write("[+] {"+infos_client[0]+"} Mot de passe samba : "+password+"\n") dossier_destination = client.recv(1024).decode() client.send(b"OK_Do") print("[+] {"+infos_client[0]+"} Dossier destination sur le serveur samba : "+dossier_destination) file.write("[+] {"+infos_client[0]+"} Dossier destination sur le serveur samba : "+dossier_destination+"\n") user = client.recv(2048).decode() client.send(b"Ok_User") print("[+] {"+infos_client[0]+"} Utilisateur base de donnees : "+user) file.write("[+] {"+infos_client[0]+"} Utilisateur base de donnees : "+user+"\n") passwd = client.recv(2048).decode() client.send(b"OK_Password") print("[+] {"+infos_client[0]+"} Mot de passe base de donnees : "+passwd) file.write("[+] {"+infos_client[0]+"} Mot de passe base de donnees : "+passwd+"\n") bd = client.recv(2048).decode() client.send(b"OK_DB") print("[+] {"+infos_client[0]+"} Argument de sauvegarde : "+bd) file.write("[+] {"+infos_client[0]+"} Argument de sauvegarde : "+bd+"\n") print("[+] {Serveur} Debut de sauvegarde de la base de donnees !") file.write("[+] {Serveur} Debut de sauvegarde de la base de donnees !\n") try: print("[+] {Serveur} Creation point de montage") file.write("[+] {Serveur} Creation point de montage\n") os.system("sudo mkdir -p /mnt/save") print("[+] {Serveur} Point de montage creer") file.write("[+] {Serveur} Point de montage creer\n") except: print("[!] {serveur} Point de montage deja existent") file.write("[!] {serveur} Point de montage deja existent\n") try: print("[+] {Serveur} Montage du serveur samba") file.write("[+] {Serveur} Montage du serveur samba\n") os.system("sudo mount -t cifs -o username="+username+",password="+password+" //"+ip_samba+"/"+dossier_destination+" /mnt/save") print("[+] {Serveur} Montage effectuer") file.write("[+] {Serveur} Montage effectuer\n") except: print("[!] {serveur} Erreur de montage") file.write("[!] {serveur} Erreur de montage\n") try: print("[+] {Serveur} Sauvegarde de la base de donnees ") file.write("[+] {Serveur} Sauvegarde de la base de donnees\n") file_bd = "bd-"+time.strftime("%A-%d-%B-%Y-%H-%M-%S")+".sql" os.system("sudo mysqldump --user="+user+" --password="+passwd+" "+bd+" > /backups-tmp/"+file_bd) print("[+] {Serveur} Sauvegarde effectuer") file.write("[+] {Serveur} Sauvegarde effectuer\n") except: print("[!] {serveur} Erreur de Sauvegarde") file.write("[!] {serveur} Erreur de Sauvegarde\n") try: print("[+] {Serveur} Copie de la sauvegarde") file.write("[+] {Serveur} Copie de la sauvegarde\n") os.system("sudo cp /backups-tmp/"+file_bd+" /mnt/save") print("[+] {Serveur} Copie effectuer") file.write("[+] {Serveur} Copie effectuer\n") except: print("[!] {serveur} Erreur de copie") file.write("[!] {serveur} Erreur de copie\n") try: print("[+] {Serveur} Suppression de la sauvegarde local") file.write("[+] {Serveur} Suppression de la sauvegarde local\n") os.system("sudo rm /backups-tmp/"+file_bd) print("[+] {Serveur} Suppression effectuer") file.write("[+] {Serveur} Suppression effectuer\n") except: print("[!] {serveur} Erreur de suppression") file.write("[!] {serveur} Erreur de suppression\n") try: print("[+] {Serveur} Demontage du serveur samba") file.write("[+] {Serveur} Demontage du serveur samba\n") os.system("sudo umount /mnt/save") print("[+] {Serveur} Demontage effectuer") file.write("[+] {Serveur} Demontage effectuer\n") except: print("[!] {serveur} Erreur de demontage") file.write("[!] {serveur} Erreur de demontage\n") ##-------------------------------## #Restauration de fichier elif reponse == "3": client.send(b"Ok_RF") print("[+] {"+infos_client[0]+"} Choix : Restauration de fichiers") file.write("[+] {"+infos_client[0]+"} Choix : Restauration de fichiers\n") ip_samba = client.recv(2048).decode() client.send(b"OK_Ip") print("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba) file.write("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba+"\n") username = client.recv(2048).decode() client.send(b"OK_User") print("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username) file.write("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username+"\n") password = client.recv(2048).decode() client.send(b"OK_Password") print("[+] {"+infos_client[0]+"} Mot de passe samba : "+password) file.write("[+] {"+infos_client[0]+"} Mot de passe samba : "+password+"\n") dossier_destination = client.recv(1024).decode() client.send(b"OK_Do") print("[+] {"+infos_client[0]+"} Dossier emplacement sur le serveur samba : "+dossier_destination) file.write("[+] {"+infos_client[0]+"} Dossier emplacement sur le serveur samba : "+dossier_destination+"\n") dossier_source = client.recv(2048).decode() client.send(b"Ok_Src") print("[+] {"+infos_client[0]+"} Nom du fichier de restauration : "+dossier_source) file.write("[+] {"+infos_client[0]+"} Nom du fichier de restauration : "+dossier_source+"\n") print("[+] {Serveur} Debut de restauration des fichiers !") file.write("[+] {Serveur} Debut de restauration des fichiers !\n") try: print("[+] {Serveur} Creation point de montage") file.write("[+] {Serveur} Creation point de montage\n") os.system("sudo mkdir -p /mnt/save") print("[+] {Serveur} Point de montage creer") file.write("[+] {Serveur} Point de montage creer\n") except: print("[!] {serveur} Point de montage deja existent") file.write("[!] {serveur} Point de montage deja existent\n") try: print("[+] {Serveur} Montage du serveur samba") file.write("[+] {Serveur} Montage du serveur samba\n") os.system("sudo mount -t cifs -o username="+username+",password="+password+" //"+ip_samba+"/"+dossier_destination+" /mnt/save") print("[+] {Serveur} Montage effectuer") file.write("[+] {Serveur} Montage effectuer\n") except: print("[!] {serveur} Erreur de montage") file.write("[!] {serveur} Erreur de montage\n") try: print("[+] {Serveur} Restauration de l'archive") file.write("[+] {Serveur} Restauration de l'archive\n") time.sleep(1) print("--------------------------------------------------------") file_arch = dossier_source os.system("cd / && sudo tar zxvf /mnt/save/"+file_arch) print("--------------------------------------------------------") print("[+] {Serveur} Archive restaurer") file.write("[+] {Serveur} Archive restaurer\n") except: print("[!] {serveur} Erreur de restauration de l'archive") file.write("[!] {serveur} Erreur de restauration de l'archive\n") try: print("[+] {Serveur} Demontage du serveur samba") file.write("[+] {Serveur} Demontage du serveur samba\n") os.system("sudo umount /mnt/save") print("[+] {Serveur} Demontage effectuer") file.write("[+] {Serveur} Demontage effectuer\n") except: print("[!] {serveur} Erreur de demontage") file.write("[!] {serveur} Erreur de demontage\n") print("[+] {Serveur} Restauration terminer") file.write("[+] {Serveur} Restauration terminer\n") #Restauration base de donnees elif reponse == "4": client.send(b"Ok_RB") print("[+] {"+infos_client[0]+"} Choix : Restauration BD") file.write("[+] {"+infos_client[0]+"} Choix : Restauration BD\n") ip_samba = client.recv(2048).decode() client.send(b"OK_Ip") print("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba) file.write("[+] {"+infos_client[0]+"} Adresse IP serveur samba : "+ip_samba+"\n") username = client.recv(2048).decode() client.send(b"OK_User") print("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username) file.write("[+] {"+infos_client[0]+"} Nom d'utilisateur samba : "+username+"\n") password = client.recv(2048).decode() client.send(b"OK_Password") print("[+] {"+infos_client[0]+"} Mot de passe samba : "+password) file.write("[+] {"+infos_client[0]+"} Mot de passe samba : "+password+"\n") dossier_destination = client.recv(1024).decode() client.send(b"OK_Do") print("[+] {"+infos_client[0]+"} Dossier emplacement sur le serveur samba : "+dossier_destination) file.write("[+] {"+infos_client[0]+"} Dossier emplacement sur le serveur samba : "+dossier_destination+"\n") user = client.recv(2048).decode() client.send(b"Ok_User") print("[+] {"+infos_client[0]+"} Utilisateur base de donnees : "+user) file.write("[+] {"+infos_client[0]+"} Utilisateur base de donnees : "+user+"\n") passwd = client.recv(2048).decode() client.send(b"OK_Password") print("[+] {"+infos_client[0]+"} Mot de passe base de donnees : "+passwd) file.write("[+] {"+infos_client[0]+"} Mot de passe base de donnees : "+passwd+"\n") file_tmp = client.recv(2048).decode() client.send(b"OK_File") print("[+] {"+infos_client[0]+"} Nom du fichier de restauration : "+file_tmp) file.write("[+] {"+infos_client[0]+"} Nom du fichier de restauration : "+file_tmp+"\n") print("[+] {Serveur} Debut de restauration de la base de donnees !") file.write("[+] {Serveur} Debut de restauration de la base de donnees !\n") try: print("[+] {Serveur} Creation point de montage") file.write("[+] {Serveur} Creation point de montage\n") os.system("sudo mkdir -p /mnt/save") print("[+] {Serveur} Point de montage creer") file.write("[+] {Serveur} Point de montage creer\n") except: print("[!] {serveur} Point de montage deja existent") file.write("[!] {serveur} Point de montage deja existent\n") try: print("[+] {Serveur} Montage du serveur samba") file.write("[+] {Serveur} Montage du serveur samba\n") os.system("sudo mount -t cifs -o username="+username+",password="+password+" //"+ip_samba+"/"+dossier_destination+" /mnt/save") print("[+] {Serveur} Montage effectuer") file.write("[+] {Serveur} Montage effectuer\n") except: print("[!] {serveur} Erreur de montage") file.write("[!] {serveur} Erreur de montage\n") try: print("[+] {Serveur} Restauration de la base de donnees ") file.write("[+] {Serveur} Restauration de la base de donnees\n") os.system("sudo mysql --user="+user+" --password="+passwd+" < /mnt/save/"+file_tmp) print("[+] {Serveur} Restauration effectuer") file.write("[+] {Serveur} Restauration effectuer\n") except: print("[!] {serveur} Erreur de Restauration") file.write("[!] {serveur} Erreur de Restauration\n") try: print("[+] {Serveur} Demontage du serveur samba") file.write("[+] {Serveur} Demontage du serveur samba\n") os.system("sudo umount /mnt/save") print("[+] {Serveur} Demontage effectuer") file.write("[+] {Serveur} Demontage effectuer\n") except: print("[!] {serveur} Erreur de demontage") file.write("[!] {serveur} Erreur de demontage\n") else: print("[!] {"+infos_client[0]+"} Erreur de commande du client") file.write("[!] {"+infos_client[0]+"} Erreur de commande du client\n") client.close() server.close() else: client.send(b"Erreur_Connexion") client.close() server.close() print("[!] {"+infos_client[0]+"} Erreur de connexion du client") file.write("[!] {"+infos_client[0]+"} Erreur de connexion du client\n") file.write("--------------------------------------------------------------------------------\n") file.close() #------------------------------------------------------# # Script de sauvegarde # Auteur: Yohan Fresneau #------------------------------------------------------#