#4sysadmins

Inicio » GNU/Linux » Usuario para crear respaldos con 4backup

Usuario para crear respaldos con 4backup

Follow #4sysadmins on WordPress.com

A raíz de escribir las entradas Copias de seguridad con tar y Shell script para automatizar backups en los que se explica como realizar copias de seguridad full, diferenciales e incrementales con el comando tar y un script programado para ello respectivamente, me surgió la idea se escribir esta entrada en la que explicaré como montar una unidad externa, ya sea un USB o disco duro, de forma que mantengamos una cierta seguridad sobre esas copias a la vez que podamos consultarlas desde varios sistemas.

En mi caso personal utilizo NTFS para guardar las copias (así puedo echarle un ojo desde varios sistemas) pero de todos modos las diferencias entre hacerlo con NFTS y hacerlo con vfat o ext4 son mínimas por lo que voy a explicar las tres formas.

Si tenemos un equipo con arranque dual en el que tenemos instalado una distribución Linux y un Windows deberíamos de usar las opciones A o B (vfat y ntfs respectivamente), si por el contrario solo disponemos de un sistema Linux usaremos la opción C (aunque cualquiera de las anteriores también nos valdría).

Nota: Se da por hecho que el disco o USB ya se encuentra formateado con cualquiera de los tres sistemas de archivos anteriormente nombrados. De lo contrario, y si necesitas ayuda puedes ver como particionar un disco Comandos para el particionado de discos y darle formato Comandos para formatear una partición

Para las tres opciones necesitaremos (al menos para cubrir los requisitos de esta entrada) un usuario dedicado expresamente a realizar copias de seguridad, que serán realizadas por una tarea cron del usuario (por lo que también deberemos de crear dicha tarea), un directorio de punto de montaje, agregar la correspondiente línea de automontaje al archivo /etc/fstab y un usuario corriente, que será al que le respaldemos sus archivos y directorios.

Importante: Lo normal es que cuando una unidad externa se automonte en el sistema nos de permisos de lectura y escritura al usuario. Si encontráis problemas con esto podéis otorgaros permisos vosotros mismos. En esta entrada explico algunas maneras.

Los recursos de los que nos vamos a servir (evidentemente podéis prescindir de ellos o modificar los valores):

  • Usuario destinado a realizar copias de seguridad: 4backup
  • Punto de montaje: Para simplificar la tarea de permisos de acceso a los backups voy a usar el mismo directorio home del usuario 4backup. /home/4backup
  • Usuario corriente: En mi caso se trata de nebul4ck. Es el usuario que suelo usar para trabajar y del que quiero crear copias que ningún otro usuario pueda modificar o ver, excepto el creador 4backup.
  • La tarea cron: Para crear una tarea cron de usuario supongamos que tenemos el script a ejecutar en /home/4backup/bin/. He usado esta ruta porque normalmente en la variable PATH del usuario viene definido este valor como directorio de búsqueda para programas ejecutables, de lo contrario deberemos de indicar el path completo del programa en la tarea cron. Esto lo dejaremos para el final.

1 . Para cualquiera de las opciones lo primero que deberemos de hacer será crear el directorio /home/4backup que además de ser el directorio principal del usuario, hará de punto de montaje para la unidad externa:

$ sudo mkdir /home/4backup

2 . Ahora montamos la unidad. Vamos a comprobar con dmesg o blkid que unidad es la que acabamos de conectar:

$ sudo blkid

3 . En cuanto la tengamos localizada, montamos:

$ sudo mount /dev/sdb1 /home/4backup

4 . Creamos el grupo principal y el usuario (ambos llevan GID y UID específicos):

$ sudo groupadd -g 499 4backup
$ sudo useradd -d /home/4backup -s /usr/sbin/nologin -c "Usuario para copias de seguridad" -u 499 -g 499 -G nebul4ck 4backup

Aclaraciones:

  • Creamos primero el grupo principal del usuario 4backup
  • Hemos usado como shell (-s) /usr/sbin/nologin para no permitir inicios de sesión al usuario 4backup con lo que reduciremos las vulnerabilidades.
  • Hemos dado unos ID de usuario y grupo de sistemas. Esto es para evitar en cierta forma la posibilidad de que cuando montemos este dispositivo en otro equipo, exista un usuario con el mismo uid y gid y se haga con el control del dispositivo. Al usar el 499 reducimos la probabilidad de que esto pase. Aún así no estaría de mas comprobarlo antes de conectar el dispositivo externo.
  • Hemos añadido el usuario al grupo principal de nuestro usuario de trabajo, de modo que tenga acceso a su directorio home y pueda respaldar sus datos.

5 . Copiamos en el home los archivos del directorio esqueleto (esto ignorará los directorios, no nos hacen falta):

$ sudo cp /etc/skel/.* /home/4backup/

6 . Es una buena idea cambiar la umask por defecto del usuario 4backup de manera que cada vez que cree un archivo lo haga lo mas restrictivo posible y para nuestro caso los mejores permisos serán 750 por lo que modificaremos esto en el archivo ~/.profile o ~/.bash_profile (depende de la distribución)

$ sudo nano /home/4backup/.profile

Y añadimos…

umask=027

7 . Ahora vamos añadir el usuario nebul4ck al grupo principal de 4backup para que pueda acceder a su directorio home y comprobar que las copias se están realizando correctamente y si lo desea, poder copiar y pegarlas en otra partición, disco o ruta.

$ sudo gpasswd -a nebul4ck 4backup

Nota: Podemos comprobar con $ cat /etc/passwd y $ cat /etc/group de que todo marcha bien.

8 . Ya solo falta crear la tarea cron del usuario 4backup, pero antes creamos el directorio /home/4backup/bin (aquí deberemos de pegar el script)

$ sudo mkdir /home/4backup/bin
$ sudo crontab -u 4backup -e

Y añadimos…

SHELL=/bin/bash
PATH=/usr/bin:/bin:/home/4backup/bin
00 22 * * * 4backup lun vie

Sobre 4backup.sh: Es el programa que va a realizar las copias de seguridad del usuario nebul4ck (en este caso). Es de fácil uso y modificación, podemos ver el script aquí. Básicamente se indican los directorios que queremos respaldar y el directorio base del programa (en el que se crearán los logs y contenido necesario). Se le pasan dos parámetros: el primero es el día que se realizan copias full y el segundo el día en el que se crean las diferenciales. El resto de días se crearán copias incrementales. Podemos descargar el shell script desde aquí.

Hasta aquí hemos realizado todos los pasos necesarios para tener un usuario restringido (4backup) propietario y creador de las copias de seguridad alojadas en su directorio home que a su vez es el disco duro o USB que tenemos montado al cual ‘solo’ puede acceder y con permisos de solo lectura el usuario que usamos para trabajar (nebul4ck en este ejemplo) por lo que podremos mirar si las copias se están realizando correctamente.

Aviso: Ahora ya podemos desmontar el disco: $ sudo umount /dev/sdb1

Ahora viene se indica como montaremos el disco de forma que los permisos sean los apropiados. Dependiendo del sistema de archivos que utilicemos en la unidad externa, seleccionaremos la opción que mas nos convenga.

Opción A (vfat):

Añadimos la siguiente línea al archivo /etc/fstab (podemos usar el editor de texto que nos plazca. nano para los mas inexpertos).

  • Si vamos a usar una partición tipo vfat:
UUID="6637-4567"     /home/4backup     vfat     rw,user,exec,auto,umask=027,uid=499,gid=499,sync     0     0

Las opciones que se han utilizado:

  • El UUID. Podríamos haber usado también el dispositivo /dev/sdbX pero puede que en otra ocasión conectemos un dispositivo distinto lo identifique como sdb y quiera montarlo en el home de 4backup. También podríamos haberlo identificado por su LABEL. Podemos ver el UUID con el comando $ sudo blkid
  • rw (lectura y escritura), user (permite a otros usuarios montar y desmontar el dispositivo. Nos vendrá bien para hacerlo con el usuario de trabajo nebul4ck en caso de ser necesario), exec (nos permitirá ejecutar binarios dentro del sistema de archivos), auto (se montará al iniciar el sistema), umask=027 (cada vez que el usuario 4backup cree un archivo lo hará con permisos 750, de esta manera los usuarios pertenecientes a su grupo principal podrán leer el contenido. En nuestro caso le vendrá bien a nebul4ck), uid y gid = 499 (esto hará que se monte con propietario 4backup) y sync (sincronizará los datos con el disco por si existiese un corte de energía el sistema journal nos permita recuperarlos o al menos intentarlo)

Opción B (ntfs)

  • Para un sistema de archivos NTFS añadiremos la siguiente línea a /etc/fstab y deberemos de montar el dispositivo como root o reiniciar y que se automonte). Además deberemos de tener el paquete ntfs-3g instalado.
UUID="3AF94C7A41388851"    /home/4backup    ntfs    rw,exec,auto,umask=027,uid=499,gid=499,sync,locale=es_ES.UTF-8     0     0

Opción C (ext4)

Dos cosas varían con respecto a la opción A. La línea de /etc/fstab la cual debe de ser la siguiente:

UUID="39008872-df3a-4e6a-a35a-bf5e3477f53a"     /home/4backup     ext4     rw,user,exec,auto,nosuid,sync     0 0

Y lo mas importante los permisos. Si queremos tener privilegios debemos de cambiar los permisos del directorio una vez que ha sido montado. Podemos hacer esto mediante chown y chmod o bien con una ACL:

  • Mediante chown y chmod:
$ sudo chown -R 4backup.4backup /home/4backup
$ sudo chmod -R 750 /home/4backup
  • Con ACL:
$ sudo setfacl -R -m u:4backup:rwx /home/4backup/
$ sudo setfacl -R -m g:4backup:rx /home/4backup/
$ sudo setfacl -R -m o::--- /home/4backup/

Podemos aprender mas sobre las listas de control de acceso aquí.



4 comentarios

  1. jocastillo dice:

    Creo que falta algo en la parte donde creas la tarea Cron no?? no declaras el script y que significa lun vie despues del usuario??

    Me gusta

    • nebul4ck dice:

      jocastillo, el archivo ejecutable (comando) es 4backup, se está metiendo dentro del crontab del propio usuario 4backup por lo que será ese usuario el que lo ejecute. Luego el PATH define donde encontrar el comando (shell-script/programa) que es 4backup, de ahí a que no meta el path completo y por último; lun, vie son los dos parámetros con los que ejecutamos el programa 4backup. sería como… /usr/bin/4backup lun vie . Dentro del programa verás que se toman dos parámetros y con ello crea copias full o incrementales.

      Me gusta

  2. […] Usuario para crear respaldos con 4backup marzo 20, 2015 […]

    Me gusta

Deja un comentario, Gracias!