commit ec952ba29fcd15928456bea9d4abbef98dfa778e Author: jfontaine35 <76435797+jfontaine35@users.noreply.github.com> Date: Tue Dec 10 09:35:10 2024 +0100 Create samba_backup_restore.sh diff --git a/samba_backup_restore.sh b/samba_backup_restore.sh new file mode 100644 index 0000000..30284dc --- /dev/null +++ b/samba_backup_restore.sh @@ -0,0 +1,171 @@ +#!/bin/bash + +# Variables +SAMBA_PRIVATE="/var/lib/samba/private" +SAMBA_SYSVOL="/var/lib/samba/sysvol" +SAMBA_CONFIG="/etc/samba" +BACKUP_DIR="/sauvegardes/samba" +DATE=$(date +%Y%m%d_%H%M%S) +GREEN="\033[1;32m" +RED="\033[1;31m" +YELLOW="\033[1;33m" +NC="\033[0m" +ADMIN_USER="Administrator" +DOMAIN="h3adm.lan" +SERVER="srv-*-*" +IP="192.168.*.*" +REVERSE_IP="*.168.192.in-addr.arpa" +OLD_SERVER="srv-poi-addc01" +OLD_IP="192.168.*.*" +OLD_REVERSE_IP="*.168.192.in-addr.arpa" +ADMIN_EMAIL="*.h3campus.fr" + +# Vérification des privilèges root +if [[ $EUID -ne 0 ]]; then + echo -e "${RED}Ce script doit être exécuté en tant que root.${NC}" + exit 1 +fi + +# Fonction de sauvegarde Samba +backup_samba() { + echo -e "${YELLOW}Début de la sauvegarde Samba...${NC}" + mkdir -p "$BACKUP_DIR" + echo -e "${YELLOW}Entrez un nom pour la sauvegarde (laisser vide pour générer automatiquement) :${NC}" + read -r CUSTOM_NAME + if [[ -z "$CUSTOM_NAME" ]]; then + CUSTOM_NAME="samba_backup_$DATE" + fi + ARCHIVE="$BACKUP_DIR/${CUSTOM_NAME}.tar.gz" + tar -czvf "$ARCHIVE" "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG" + echo -e "${GREEN}Fichiers sauvegardés dans $ARCHIVE${NC}" + ACL_FILE="$BACKUP_DIR/${CUSTOM_NAME}_acl.acl" + getfacl -R "$SAMBA_SYSVOL" > "$ACL_FILE" + echo -e "${GREEN}ACL sauvegardées dans $ACL_FILE${NC}" +} + +# Fonction de restauration Samba +restore_samba() { + echo -e "${YELLOW}Début de la restauration Samba...${NC}" + if [[ ! -d "$BACKUP_DIR" ]] || [[ -z $(ls -A "$BACKUP_DIR" | grep "tar.gz") ]]; then + echo -e "${RED}Aucune sauvegarde trouvée dans $BACKUP_DIR.${NC}" + exit 1 + fi + echo -e "${YELLOW}Liste des sauvegardes disponibles :${NC}" + ls -1 "$BACKUP_DIR" | grep "tar.gz" | nl + echo -e "${YELLOW}Choisissez le numéro de la sauvegarde à restaurer :${NC}" + read -r BACKUP_CHOICE + BACKUP_FILE=$(ls -1 "$BACKUP_DIR" | grep "tar.gz" | sed -n "${BACKUP_CHOICE}p") + if [[ -z "$BACKUP_FILE" ]]; then + echo -e "${RED}Sélection invalide.${NC}" + exit 1 + fi + BACKUP_PATH="$BACKUP_DIR/$BACKUP_FILE" + echo -e "${GREEN}Sauvegarde sélectionnée : $BACKUP_FILE${NC}" + echo -e "${YELLOW}Arrêt du service Samba...${NC}" + systemctl stop samba-ad-dc + BACKUP_ORIG_DIR="$BACKUP_DIR/original_$DATE" + mkdir -p "$BACKUP_ORIG_DIR" + tar -czvf "$BACKUP_ORIG_DIR/original_samba_files.tar.gz" "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG" + echo -e "${GREEN}Sauvegarde des fichiers originaux dans $BACKUP_ORIG_DIR${NC}" + tar -xzvf "$BACKUP_PATH" -C / + echo -e "${GREEN}Fichiers restaurés depuis $BACKUP_PATH${NC}" + ACL_FILE="$BACKUP_DIR/${BACKUP_FILE%.tar.gz}_acl.acl" + if [[ -f "$ACL_FILE" ]]; then + setfacl --restore="$ACL_FILE" + echo -e "${GREEN}ACL restaurées depuis $ACL_FILE${NC}" + else + echo -e "${RED}Fichier ACL introuvable. Les permissions SYSVOL doivent être réinitialisées.${NC}" + fi + echo -e "${YELLOW}Réinitialisation des permissions SYSVOL...${NC}" + samba-tool ntacl sysvolreset + echo -e "${YELLOW}Mise à jour des fichiers de configuration Samba...${NC}" + echo -e "${YELLOW}Entrez le nouveau nom du serveur :${NC}" + read -r NEW_HOSTNAME + echo -e "${YELLOW}Entrez la nouvelle adresse IP du serveur :${NC}" + read -r NEW_IP + sed -i "s/$(hostname)/$NEW_HOSTNAME/" "$SAMBA_CONFIG/smb.conf" + hostnamectl set-hostname "$NEW_HOSTNAME" + echo "$NEW_IP $(hostname)" >> /etc/hosts + echo -e "${GREEN}Configuration mise à jour avec le nom $NEW_HOSTNAME et l'adresse $NEW_IP.${NC}" + echo -e "${YELLOW}Redémarrage du service Samba...${NC}" + systemctl start samba-ad-dc + echo -e "${GREEN}Restauration Samba terminée.${NC}" +} + +# Fonction pour ajouter des enregistrements DNS +add_dns_records() { + samba-tool dns add $SERVER $DOMAIN _ldap._tcp SRV "$SERVER.$DOMAIN 389 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $DOMAIN _kerberos._tcp SRV "$SERVER.$DOMAIN 88 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $DOMAIN _kerberos._udp SRV "$SERVER.$DOMAIN 88 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $DOMAIN _kpasswd._tcp SRV "$SERVER.$DOMAIN 464 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $DOMAIN _kpasswd._udp SRV "$SERVER.$DOMAIN 464 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $REVERSE_IP 210 PTR "$SERVER.$DOMAIN" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $DOMAIN $SERVER A $IP -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns add $SERVER $DOMAIN @ NS "$SERVER.$DOMAIN" -U $ADMIN_USER --password=$ADMIN_PASS +} + +# Fonction pour supprimer les anciens enregistrements DNS +delete_old_dns_records() { + samba-tool dns delete $SERVER $DOMAIN _ldap._tcp SRV "$OLD_SERVER.$DOMAIN 389 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $DOMAIN _kerberos._tcp SRV "$OLD_SERVER.$DOMAIN 88 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $DOMAIN _kerberos._udp SRV "$OLD_SERVER.$DOMAIN 88 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $DOMAIN _kpasswd._tcp SRV "$OLD_SERVER.$DOMAIN 464 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $DOMAIN _kpasswd._udp SRV "$OLD_SERVER.$DOMAIN 464 0 100" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $OLD_REVERSE_IP 210 PTR "$OLD_SERVER.$DOMAIN" -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $DOMAIN $OLD_SERVER A $OLD_IP -U $ADMIN_USER --password=$ADMIN_PASS + samba-tool dns delete $SERVER $DOMAIN @ NS "$OLD_SERVER.$DOMAIN" -U $ADMIN_USER --password=$ADMIN_PASS +} + +# Fonction pour mettre à jour l'enregistrement SOA +update_soa_record() { + samba-tool dns update $SERVER $DOMAIN @ SOA "$OLD_SERVER.$DOMAIN. admin.$DOMAIN. 62646 900 600 86400 3600" "$SERVER.$DOMAIN. $ADMIN_EMAIL. 2024120901 900 600 86400 3600" -U $ADMIN_USER --password=$ADMIN_PASS +} + +# Fonction pour vérifier les enregistrements DNS +verify_dns_records() { + host -t A $SERVER.$DOMAIN + host -t SRV _ldap._tcp.$DOMAIN + host -t SRV _kerberos._tcp.$DOMAIN + host -t SRV _kerberos._udp.$DOMAIN + host -t SRV _kpasswd._tcp.$DOMAIN + host -t SRV _kpasswd._udp.$DOMAIN +} + +# Menu principal +echo -e "${YELLOW}Samba Backup & Restore Script${NC}" +echo -e "${GREEN}1. Sauvegarder Samba${NC}" +echo -e "${GREEN}2. Restaurer Samba${NC}" +echo -e "${GREEN}3. Mise à jour du DNS${NC}" +echo -e "${GREEN}4. Quitter${NC}" +echo -e "Choisissez une option :" +read -r OPTION + +case $OPTION in + 1) + backup_samba + ;; + 2) + restore_samba + ;; + 3) + read -sp "Enter password for $ADMIN_USER: " ADMIN_PASS + echo + echo -e "\e[34mSuppression des anciens enregistrements DNS...\e[0m" + delete_old_dns_records + echo -e "\e[32mAjout des nouveaux enregistrements DNS...\e[0m" + add_dns_records + echo -e "\e[35mMise à jour de l'enregistrement SOA...\e[0m" + update_soa_record + echo -e "\e[33mVérification des enregistrements DNS...\e[0m" + verify_dns_records + echo -e "\e[36mMise à jour du DNS terminée.\e[0m" + ;; + 4) + echo -e "${GREEN}Quitter...${NC}" + exit 0 + ;; + *) + echo -e "${RED}Option invalide.${NC}" + exit 1 + ;; +esac