Intro

Es de sobra conocido que el acceso SSH mediante claves es mucho más seguro que el empleo de contraseñas. Pero además, cuando estamos automatizando tareas como las copias de seguridad, el empleo de contraseñas no tiene sentido, pues nos obligaría a escribirlas cada vez que se ejecute el script.

Por eso SSH tiene la opción de permitir el acceso mediante claves. No voy a hacer un tutorial sobre el acceso SSH mediante claves, sino sobre cómo configurar la versión embeded de NAS4Free para permitir el acceso SSH sin el uso de contraseñas.

Lo habitual en estos casos es crear el directorio .ssh dentro del directorio del usuario y copiar la clave pública del equipo autorizado en el archivo authorized_keys. Sin embargo, la versión embeded de NAS4Free tiene una peculiaridad que hacen que esta aproximación no funcione: cada vez que el sistema se reinicia se elimina el contenido del directorio de usuario (del directorio /root en el caso que nos ocupa).

Veremos pues como configurar el sistema para que nos permita acceder sin constraseña incluso después de reiniciar.

 

Como lo hacemos?

Los pasos a seguir serán los siguientes:

  • Copiar las claves públicas de los equipos que deben tener permiso para acceder al NAS en un archivo dentro del dispositivo de almacenamiento. En nuestro caso será: /mnt/Zaska/claves/authorized_keys
  • Generar un script para que el sistema cree el directorio /root.ssh, cambie los permisos convenientemente y copie el archivo authorized_keys desde el directorio del dispositivo de almacenamiento a /root/.ssh
  • Ejecutar ese script tras cada reinicio.

 

Después de copiar las claves públicas en /mnt/Zaska/claves/authorized_keys cambiamos los permisos del archivo para que solamente sean legibles por el usuario root:

# chgmod 600 /mnt/Zaska/claves/authorized_keys

 

El script que hace todo el trabajo

Le llamaremos CopiaClaves.sh y lo guardaremos también en el dispositivo de almacenamiento: /mnt/Zaska/claves

El contenido del script es el siguiente (gracias a ldkraemer, que se lo curró en 2012 en el foro de NAS4Free):

#!/bin/sh
#
# Script for FreeNAS Embedded 6412.img file to use ssh-keygen keys
# for secure logins with SSH
#
# Root Logon Script:
#               WARNING:..SYSTEM -> SERVICES -> SSH MUST HAVE LOGIN AS ROOT DIRECTLY CHECKED
#               WARNING:..THIS ISN'T SOMETHING YOU ALWAYS WANT ENABLED - TESTING OR LOCAL ONLY
#
USER="root"
KEYDIR="/mnt/Zaska/claves"
#----------------------------------------------
mkdir -p -m 711 /root/.ssh
cp -p $KEYDIR/authorized_keys /root/.ssh
chown $USER:wheel /root/.ssh/authorized_keys
#
#

Cambiamos el usuario de CopiaClaves.sh por root:wheel y los permisos por 770 .

 

Ejecutando CopiaClaves.sh tras cada reinicio

En NAS4Free hay una forma sencilla de ejecutar scripts tras el reinicio. La encontramos en:

System > Advanced > Command Scripts (fig. 1)

 

Figura 1. Hay que tener en cuenta seleccionar «PostInit» en Type

Nos aseguramos que el checkbox «Enable» de la parte derecha de «Settings» esté marcado, le damos a «Add» y lo probamos.