• Inicio
  • Linux
  • Tarea programada de Backup con llave pública en Linux

Tarea programada de Backup con llave pública en Linux

A continuación voy a describir paso a paso, para novatos (como yo), el resultado del siguiente ejercicio (si falla algo, por favor, dejad un comentario).

Para ello he utilizando la distribución Ubuntu/Kubuntu 8.10:

EJERCICIO: Cada 2 noches, a las 02:00h, necesitamos que se haga una copia de seguridad comprimida en TGZ sobre las carpetas incluidas en el /home de un usuario, y enviadas al /home de otro usuario de otra máquina, mediante "spc" y con clave pública. El archivo resultante tiene que denominarse con el nombre de la carpeta comprimida y la fecha de creación (ejemplo: Documentos-20090130.tgz).

- Habilitamos el usuario root: sudo passwd

- Introducimos la contraseña que queramos

- Nos logueamos como "root": su -

- Introducimos la contraseña anterior.

- Ahora creamos 2 usuarios, básicos, diferentes. useradd usuario1 -m useradd usuario2 -m

- Ahora nos vamos a la carpeta "/etc/" cd /etc/

- Y ponemos las contraseñas para los usuarios creados, siguiendo las siguientes ordenes: passwd usuario1 passwd usuario2

- Instalamos el demonio (servicio) SSHD: sudo apt-get install openssh-server

- Comprobamos que el demonio está corriendo por el puerto 22 (por defecto): lsof -i -P -n

- Incluimos al final del archivo "/etc/hosts.allow" la siguiente línea (utilizaremos el editor "vim"): vim /etc/hosts.allow

- El documento abierto será, aproximadamente así:
# /etc/hosts.allow: list of hosts that are allowed to access the system.
# See the manual pages hosts_access(5) and hosts_options(5).
# # Example: ALL: LOCAL @some_netgroup
# ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
# # If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
# ~

- Y añadimos, pulsando "a", al final, la siguiente línea: sshd: LOCAL - Pulsamos ESC y ":wq" y el archivo queda grabado con la modificación.

- Hacemos una prueba de conexión local: ssh usuario1@localhost ó ssh usuario1@127.0.0.0

- Introducimos la contraseña correspondiente al usuario.

- Para salir de la conexión escribimos: exit

- Por seguridad, vamos a deshabilitar el acceso directo de "root" al SSH

- Editamos, con "vim", el archivo "/etc/ssh/sshd_config": vim /etc/ssh/sshd_config

- El documento abierto será, aproximadamente así:
# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0 Protocol 2
# HostKeys for protocol version 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key KeyRegenerationInterval 3600 ServerKeyBits 768
# Logging SyslogFacility AUTH LogLevel INFO

# Authentication: LoginGraceTime 120 PermitRootLogin yes StrictModes yes

- Cambiamos, en "#Authentication:" la línea "PermitRootLogin yes" por "PermitRootLogin no" y grabamos: :wq

- Para habilitar este cambio, debemos reiniciar el demonio SSHD, por ejemplo de la siguiente manera: /etc/init.d/ssh stop /etc/init.d/ssh start

- Ahora comprobaremos que el usuario "root" no puede entrar por SSH: ssh root@localhost

- Comprobaremos, que aunque pongamos la contraseña correcto, nos dará siempre el siguiente mensaje: Permission denied, please try again

- Vamos a crear una clave pública para los usuarios que hemos creado, consiguiendo de este modo que no tengamos que estar poniendo continuamente la contraseña del usuario.

- Primero nos loguearemos con el "usuario1" y haremos los siguiente pasos: su usuario1 ssh-keygen -t rsa

- Nos aparecerá el siguiente mensaje: Generating public/private rsa key pair. Enter file in which to save the key (/home/usuario1/.ssh/id_rsa):

- Pulsamos ENTER a todas las pregunas y nos creará (si no está creada anteriormente) la carpeta "/home/usuario1/.ssh/" y dentro nos encontraremos 2 archivos, "id_rsa" e "id_rsa.pub". Este último (id_rsa.pub) es el que tendremos que llevarnos a nuestra carpeta personal en el ordenador que queramos loguearnos.

- Terminada la operación anterior, y habiendo introducido la contraseña, nos saldrá un mensaje similar al siguiente:
Your identification has been saved in /home/usuario1/.ssh/id_rsa.
Your public key has been saved in /home/usuario1/.ssh/id_rsa.pub.
The key fingerprint is:
30:1d:dc:24:04:3e:4e:f8:c4:6d:d6:5a:88:e7:30:0e usuario1@cesar-desktop
The key's randomart image is:
+--[ RSA 2048]----+
| .++o. |
| + +.=. |
| E % B o |
| B @ o |
| + S |
| |
| |
| |
| |
+-----------------+
$

- Cuando llevemos el archivo "id_rsa.pub" a la carpeta del ordenador que queramos loguearnos, deberemos cambiar el nombre por: authorized_keys

- En este caso vamos a realizar la conexión en el propio equipo, así que copiaré el archivo con el otro nombre: cd /home/usuario1/.ssh/ cp id_rsa.pub authorized_keys

- Para que NO permita usuarios que no tengan llave pública creada, cambiamos a "root", y modificamos el archivo "sshd_config": su - vim /etc/ssh/sshd_config

- Y en la línea donde encontremos: #PasswordAuthentication yes

- La cambiamos por: PasswordAuthentication no

- Grabamos y reiniciamos el servicio: /etc/init.d/ssh restart

- Ahora nos loguearemos con el "usuario2" y haremos los mismos pasos.

- Si ahora probamos: ssh usuario1@localhost

- No pedirá clave para comunicarnos, en parte también es porque en el archivo sshd_config existe una línea, por defecto, que pone "PubKeyAuthentication yes".

- Vamos a crear la carpeta Documentos dentro del /home/usuario1 y /home/usuario2 manualmente, y algunos archivos para rellenar:
su usuario1
cd /home/usuario1
mkdir Documentos
cd Documentos touch documentosprueba.txt
touch algunosmas.txt

su usuario2
cd /home/usuario2

mkdir Documentos
cd Documentos touch documentosprueba.txt
touch algunosmas.txt

- Ahora vamos a crear un archivo "backup.sh" en "/home/usuario1/" que se encargará de comprimir la carpeta Documentos y generar un archivo TGZ, cuyo nombre de archivo será "backup+fechadecreación+.tgz", y que posteriormente envíe una copia del archivo generado a otro usuario (en nuestro caso el mismo usuario) automáticamente.

su usuario1
cd /home/usuario1/
vim backup.sh

- En el interior del archivo "backup.sh" escribimos:

#!/bin/bash DATE=$(/bin/date +%Y%m%d)
tar -zczf backup_$DATE.tgz /home/usuario1/Documentos> /dev/null

scp usuario1@localhost:/home/usuario1/backup_$DATE.tgz usuario1@localhost:/home/usuario1/backup_$DATE_OK.tgz

- Y lo guardamos (como hemos visto anteriormente).

- Ahora convertimos este archivo en ejecutable: chmod +x backup.sh

- Ahora para hacerlo automático todas las noches a las 02:00 horas y durante todos los días pares del mes, vamos a utilizar "cron".
su - vim /etc/cron.d/anacron

- Y añadimos dentro del archivo nuestra línea:
0 2 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * usuario1 /home/usuario1/backup.sh >/dev/null

- Y el ejercicio queda resuelto.