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,
Configuramos la compartición
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.
Buen post, pero revisa la ortografía xD. (line 8)
Malditos emoticonos, salen cuando no lo quieres.
tu linea 8 no es la mía!!