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

índice

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

 

Es MUY IMPORTANTE que los permisos del directorio /home/backuppc/.ssh sean 755 y los del archivo /home/backuppc/.ssh/authorized_keys sean 644.

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)

Captura de pantalla 2015-06-30 a las 12.03.31

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

 

Enlaces

http://backuppc.sourceforge.net/faq/ssh.html

http://www.doxer.org/resolved-sudo-sorry-you-must-have-a-tty-to-run-sudo/