213 lines
8.5 KiB
Bash
213 lines
8.5 KiB
Bash
#!/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"
|
|
|
|
# Mode automatique (défaut à false)
|
|
AUTO_MODE=false
|
|
|
|
# Parsing des arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--auto)
|
|
AUTO_MODE=true
|
|
shift
|
|
;;
|
|
*)
|
|
echo -e "${RED}Option non reconnue: $1${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# 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"
|
|
|
|
# Mode automatique : génération automatique du nom de sauvegarde
|
|
if [[ "$AUTO_MODE" = true ]]; then
|
|
CUSTOM_NAME="samba_backup_$DATE"
|
|
echo -e "${GREEN}Mode automatique activé. Sauvegarde : $CUSTOM_NAME${NC}"
|
|
else
|
|
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
|
|
fi
|
|
|
|
ARCHIVE="$BACKUP_DIR/${CUSTOM_NAME}.tar.gz"
|
|
|
|
# Suppression des anciennes sauvegardes
|
|
find "$BACKUP_DIR" -name "samba_backup_*" -type f -mtime +30 -delete
|
|
|
|
# Création de l'archive
|
|
tar -czvf "$ARCHIVE" "$SAMBA_PRIVATE" "$SAMBA_SYSVOL" "$SAMBA_CONFIG"
|
|
echo -e "${GREEN}Fichiers sauvegardés dans $ARCHIVE${NC}"
|
|
|
|
# Sauvegarde des ACL
|
|
ACL_FILE="$BACKUP_DIR/${CUSTOM_NAME}_acl.acl"
|
|
getfacl -R "$SAMBA_SYSVOL" > "$ACL_FILE"
|
|
echo -e "${GREEN}ACL sauvegardées dans $ACL_FILE${NC}"
|
|
|
|
# En mode automatique, on ajoute des logs si nécessaire
|
|
if [[ "$AUTO_MODE" = true ]]; then
|
|
echo "[$(date)] Sauvegarde Samba automatique : $ARCHIVE" >> /var/log/samba_backup.log
|
|
fi
|
|
}
|
|
|
|
# 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 modifié pour supporter le mode auto
|
|
if [[ "$AUTO_MODE" = true ]]; then
|
|
backup_samba
|
|
else
|
|
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
|
|
fi
|