Backup de Clientes Windows en Servidores Linux

Estaba yo dándole vueltas a como arreglar la historia de hacer copias de seguridad de las máquinas de los usuarios. Hasta ahora había probado Unison y una versión de RSync para Windows, pero no estaba satisfecho. El problema se producía al intentar copiar ficheros que estaban fuera del directorio de usuario, en windows es %USER% o algo así, de vez en cuando, había que hacer una modificación a esos archivos para darles “Control total”. Hay que sumar, que mis usuarios son los de contraseñas basadas en gruesos algoritmos de cifrado, efectivamente, 1234 es la más común, así que no pueden iniciar sesión en el servidor, sólo transferencia por sftp con chroot a su $HOME.

Como el hecho de copiar del cliente al servidor no estaba funcionando, plantee hacer lo contrario. Compartí en la red los directorios a copiar, aquí podemos establecer el número máximo de usuarios que se pueden conectar y poner a uno por mejorar un poco la seguridad, ya que al montarlos en el servidor quedaran bloqueados. Una vez montados en el servidor, se hace la copia con el todo poderoso RSync.

Para montar la infraestructura planteamos el siguiente escenario:

Server: 192.168.0.2 server.example.com
Cliente: 192.168.0.3 client.example.com
Usuario: charly
Password: 1234
Directorio: D:\Mis datos\

En Windows, nos movemos hasta el directorio que queremos compartir,

Directorio

Configuramos la compartición

Compartir

Al ponerle el nombre a la compartición evito las mayúsculas y los espacios, para los scripts es muy negativo que los nombres de ficheros tengan espacios y caracteres especiales como acentos, eñes, diéresis, etc. Pasamos al servidor.

Me ha sorprendido, pero la plataforma EBox no incluía de serie los paquetes necesarios para nuestra tarea, así que tendremos que instalarlos

apt-get install smbclient smbfs

Aunque el paquete smbclient no es necesario, siempre está bien tenerlo a mano para comprobar cosas. smbfs es el módulo que nos permitirá montar directorios compartidos Windows en nuestro servidor.

Editamos /etc/hosts

127.0.0.1	localhost
192.168.0.2	server.example.com	server
192.168.0.3	client.example.com	client

Desde Windows la tarea de traducir nombres de máquinas a direcciones IP se encarga el protocolo NETBIOS, en Linux podemos montarlo, pero para este caso se sale del objetivo.

A continuación vamos a crear un archivo de texto con las credenciales del usuario, como esto va de Samba lo vamos a guardar en el directorio de configuración de Samba, me parece lo más lógico,

# vim /etc/samba/credenciales
Añadimos
username=charly
password=1234
Modificamos los permisos
# chmod 0600 /etc/samba/credenciales

Un archivo de credenciales por usuario. Tened en cuenta los permisos.

Ahora editamos el fichero de puntos de montaje,

# vim /etc/fstab
añadimos
//client/misdatos       /mnt/charly  cifs   defaults,noatime,uid=3008,gid=1000,credentials=/etc/samba/credenciales  0 0

Hemos definido un punto de montaje en /mnt/charly para montar la compartición, se establecen los uid y gid para que la compatición se monte con el id y gid de usuario correcto y se le pasan las credenciales con el nombre de usuario y la contraseña para que podamos montarla.

Ahora vamos a escribir un script en /usr/local/bin/copia-charly para que se haga la copia, tendría más o menos esta pinta:

#!/bin/bash
# Copia de seguridad de usuario
# Fede Diaz nordri_gmail_com Junio 2010

PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/nordri/bin

DATE=$(date +"%d%m%Y");
LOGFILE="/var/log/rsync/rsync-${DATE}-charly.log"
RSYNCOPT="--archive --perms --times --progress --log-file=$LOGFILE"

/usr/bin/rsync $RSYNCOPT /mnt/charly/ /home/charly/backup;

Y le damos permisos de ejecución

# chmod +x /usr/local/bin/copia-charly

Lo ponemos en una tarea de cron, por ejemplo, de Lunes a Viernes a las 15.

# crontab -e
Añadimos
0 15 * * 1,2,3,4,5 /usr/local/bin/copia-charly

Deberiamos disponer de un control de errores en caso que la compartición no esté montada, para ello nos apoyaríamos en el fichero /etc/mtab que es la lista de lo que está montado, con esto y grep nuestro script quedaría como esto:

#!/bin/bash
# Copia de seguridad de usuario
# Fede Diaz nordri_gmail_com Junio 2010

PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/nordri/bin

DATE=$(date +"%d%m%Y");
LOGFILE="/var/log/rsync/rsync-${DATE}-charly.log"
RSYNCOPT="--archive --perms --times --progress --log-file=$LOGFILE"

grep -q charly /etc/mtab;

if [ $? == 1 ]; then
  echo "La comparticion no está montada" > $LOGFILE;
  exit 1;
fi
/usr/bin/rsync $RSYNCOPT /mnt/charly/ /home/charly/backup;

Podemos mejorar aun más si al detectar que no está montada, intentamos montarla en ese momento, pero hay que tener cuidado, puede haber problemas en la red, y acabar montando un follón.

Y esto es todo, podemos ir haciendo lo mismo para cada usuario del que queramos copiar archivos al servidor.

This entry was posted in Linux, Linux Script, Tips and tagged , , , , , , . Bookmark the permalink.

3 Responses to Backup de Clientes Windows en Servidores Linux

  1. danyal says:

    Buen post, pero revisa la ortografía xD. (line 8)

  2. danyal says:

    Malditos emoticonos, salen cuando no lo quieres.

  3. nordri says:

    tu linea 8 no es la mía!!

Comments are closed.