miércoles, 5 de noviembre de 2014

Cómo hacer un backup del Active Directory de Samba 4

En su código fuente Samba 4 incluye un script de Bash llamado samba_backup. El mismo está ubicado en la ruta source4/scripting/bin. Dicho script nos permitirá, como dice el título de esta entrada, hacer un backup o copia de seguridad de las bases de datos y ficheros de configuración más importantes de nuestro Active Directory. Lamentablemente este script es experimental, por lo que usted lo usará a su propio riesgo, sobre todo en la parte de restaurar los backups (lo cual veremos luego) debido a lo que puede pasarle a la data cuando el servidor está up and running.

Otro punto acerca de este script es que el mismo solo está disponible en el código fuente, por lo que si ya usted configuró su Active Directory usando el repositorio SerNet, debe descargar dicho fuente y adaptarlo a las rutas de directorios correspondientes.

¿De qué cosas hace backup el script?
  • Del directorio ../etc
  • Del directorio ../private
  • Del directorio ../sysvol
Normalmente cuando instalamos Samba desde el fuente, el mismo queda en el directorio /usr/local/samba, pero cuando lo hacemos usando el repo SerNet, queda en /var/lib/samba y el fichero smb.conf en /etc/samba.

Lo primero es copiarlo de su ubicación original y pegarlo en /usr/sbin y darle los permisos necesarios para ejecutarlo desde el terminal, no si antes editar la ruta donde guardará el backup.
[root@sambapdc01 ~]# cp /urs/src/samba-4.1.13/source4/scripting/bin/samba_backup /usr/sbin/
[root@sambapdc01 ~]# chown root:root /usr/sbin/samba_backup
[root@sambapdc01 ~]# chmod 750 /usr/sbin/samba_backup

Ahora debemos editarlo, como dijimos, para adaptarlo a nuestro escenario. Básicamente solo hay que editar la variable WHERE, para que quede de la siguiente manera.
[root@sambapdc01 ~]# nano /usr/sbin/samba_backup
#!/bin/sh
#
# Copyright (C) Matthieu Patou  2010-2011
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#

FROMWHERE=/usr/local/samba
WHERE=/root/samba/backups
if [ -n "$1" ] && [ "$1" = "-h" -o "$1" = "--usage" ]; then
 echo "samba_backup [provisiondir] [destinationdir]"
 echo "Will backup your provision located in provisiondir to archive stored in destinationdir"
 echo "Default provisiondir: $FROMWHERE"
 echo "Default destinationdir: $WHERE"
 exit 0
fi

[ -n "$1" -a -d "$1" ]&&FROMWHERE=$1
[ -n "$2" -a -d "$2" ]&&WHERE=$2

DIRS="private etc sysvol"
#Number of days to keep the backup
DAYS=90
WHEN=`date +%d%m%y`

if [ ! -d $WHERE ]; then
 echo "Missing backup directory $WHERE"
 exit 1
fi

if [ ! -d $FROMWHERE ]; then
 echo "Missing or wrong provision directory $FROMWHERE"
 exit 1
fi

cd $FROMWHERE
for d in $DIRS;do
 relativedirname=`find . -type d -name "$d" -prune`
 n=`echo $d | sed 's/\//_/g'`
 if [ "$d" = "private" ]; then
  find $relativedirname -name "*.ldb.bak" -exec rm {} \;
  for ldb in `find $relativedirname -name "*.ldb"`; do
   tdbbackup $ldb
   if [ $? -ne 0 ]; then
    echo "Error while backuping $ldb"
    exit 1
   fi
  done
  tar cjf ${WHERE}/samba4_${n}.${WHEN}.tar.bz2  $relativedirname --exclude=*.ldb >/dev/null 2>&1
  if [ $? -ne 0 ]; then
   echo "Error while archiving ${WHERE}/samba4_${n}.${WHEN}.tar.bz2"
   exit 1
  fi
  find $relativedirname -name "*.ldb.bak" -exec rm {} \;
 else
  tar cjf ${WHERE}/${n}.${WHEN}.tar.bz2  $relativedirname >/dev/null 2>&1
  if [ $? -ne 0 ]; then
   echo "Error while archiving ${WHERE}/${n}.${WHEN}.tar.bz2"
   exit 1
  fi
 fi
done

find $WHERE -name "samba4_*bz2" -mtime +90 -exec rm  {} \; >/dev/null 2>&1

Creamos el directorio donde se almacenará el backup.
[root@sambapdc01 ~]# mkdir -p samba/backups
[root@sambapdc01 ~]# chmod 750 -R samba/

Ahora lo ejecutamos para probar
[root@sambapdc01 ~]# samba_backup

Si no devuelve mensaje de error es porque ha funcionado correctamente. Verificamos su éxito listando el contenido del directorio /root/samba/backups.
[root@sambapdc01 ~]# ls -lh samba/backups/
total 4.7M
-rw-r--r--. 1 root root  558 Nov  5 00:30 etc.051114.tar.bz2
-rw-r--r--. 1 root root 2.3M Nov  5 00:30 samba4_private.051114.tar.bz2
-rw-r--r--. 1 root root  465 Nov  5 00:30 sysvol.051114.tar.bz2

Debido a su éxito ya podemos crear una tarea programada para dicho backup diario a las 2:00 A.M., por ejemplo.
[root@sambapdc01 ~]# crontab -e
0 2 * * *       /usr/sbin/samba_backup

Fuente: https://wiki.samba.org/index.php/Backup_and_Recovery#Backup

No hay comentarios:

Publicar un comentario