Para realizar las copias de seguridad empleando BackupPC de máquinas Linux emplearemos el sistema rsync.
El servidor de BackupPC viene configurado para emplear por defecto el usuario root. Sin embargo, si mantenemos esta configuración y alguien logra acceso al servidor de BackupPC tendría acesso root al resto de máquinas.
Para evitar este problema, configuraremos el servidor para que acceda como el usuario backuppc y éste emplee el comando sudo para realizar la copia de seguridad y la restauración de archivos. Los pasos a seguir son:
- Crear el usuario backuppc en el cliente y pasarle la clave pública del servidor
- Incluir el usuario backuppc entre los sudoers en el cliente
- Permitir al usuario backuppc del cliente solamente acceder como root al archivo /usr/bin/rsync
Comencemos.
Crear el usuario backup en el cliente y pasarle la clave pública del servidor
Creamos el usuario con:
#adduser backuppc
Creamos el directorio ~/.ssh
Copiamos la clave pública del servidor de BackupPC al archivo ~/.ssh/authorized_keys
Editamos el archivo ~/.ssh/authorized_keys y le añadimos delante de ‘ssh-rsa XXXXXX…’ lo siguiente:
from="backuppc.xxxx.com"
(backuppc.xxxx.com es el nombre del servidor de BackupPC o su IP)
Editamos el archivo /etc/ssh/sshd_config:
- añadimos backuppc a ‘AllowUsers’
- añadimos lo siguiente para permitir al usuario backuppc conectarse únicamente mediante clave:
Match User backuppc
PasswordAuthentication no
De otro modo el sistema no permitirá el acceso por ssh al usuario backuppc
Comprobamos que podemos acceder al cliente desde el servidor como el usuario backuppc empleando la clave pública y de paso almacenamos su firma en el archivo .ssh/known_hosts para evitar que nos la solicite cuando vayamos a hacer la copia de seguridad:
#su backuppc
$ssh <cliente>
Incluir el usuario backup entre los sudoers en el cliente y permitirle acceder con permisos de root solamente al archivo /usr/bin/rsync
Ejecutamos visudo en el cliente y añadimos lo siguiente al final del archivo:
backuppc ALL=NOPASSWD: /usr/bin/rsync
Defaults:backuppc !requiretty
Cambiar el comando RsyncClientCmd por:
$sshPath -q -x -l backuppc $host nice -n 19 sudo $rsyncPath $argList+
Y clicar en ‘Override’ para esta variable en la pestaña de configuración de Xfer dentro de ‘Edit Config’ en el apartado correspondiente al cliente en el servidor de BackupPC (Fig. 1)
Para evitar el error:
Got fatal error during xfer (Unable to read 4 bytes)
Backup aborted (Unable to read 4 bytes)
Tenemos dos opciones:
Ejecutar como usuario backuppc desde el servidor el comando:
/usr/bin/ssh -q -x -l backuppc micliente.xxxx.es nice -n 19 sudo /usr/bin/rsync
O pasar la clave pública del cliente a ~/.ssh/known_hosts del usuario backuppc del servidor de BackupPC.
Personalmente prefiero la primera opción.
Cuando el cliente es localhost
Cuando tratamos de hacer backups en localhost el sistema arroja el siguiente error:
2015-07-03 08:55:05 Got fatal error during xfer (Tar exited with error 512 () status)
2015-07-03 08:55:10 Backup aborted (Tar exited with error 512 () status)
2015-07-03 08:55:10 Saved partial dump 0
El problema es que está tratando de ejecutar la copia de seguridad con permisos de usuario.
Hemos de incluir lo siguiente en el archivo /etc/sudoers
backuppc ALL=NOPASSWD: /bin/tar
Cambiamos rsync por tar ya que las copias de seguridad en el localhost se hacen mediante este último.
El comando de backup (TarClientCommand) debe ser:
/usr/bin/env LC_ALL=C sudo $tarPath -c -v -f - -C $shareName --totals
Hemos añadido ‘sudo’ para que el usuario backuppc ejecute el tar con permisos de root
Para evitar el error de ping al loclahost hay que sustituir en /etc/backuppc/config.pl la línea:
$Conf{Ping6Path} = undef;
Por:
$Conf{Ping6Path} = ‘/bin/ping6’;
Enlaces
http://backuppc.sourceforge.net/faq/ssh.html
http://www.doxer.org/resolved-sudo-sorry-you-must-have-a-tty-to-run-sudo/