sftp

sFTP en AWS EC2 en 5 minutos

En algún momento te puedes encontrar con la necesidad de levantar un sFTP para que alguien te envíe ficheros. Yo lo he necesitado hace poco y lo he solucionado rápidamente con una instancia de AWS EC2. Te dejo paso a paso lo que tienes que hacer por si lo necesitas.

Parto de la base de que tienes una cuenta en AWS y de que sabes levantar una instancia de ubuntu, si no es así hazmelo saber en los comentarios y preparo un tutorial de toda esta parte.

Puesto que no necesito gran rendimiento, he escogido una instancia de tipo t2.nano (CPU a 2.5Ghz, 512MB de RAM y 12GB de SSD) con un coste aproximado de 6$ al mes (suponiendo que esté encendida 24×7).

Los pasos son sencillos, sólo tienes que hacer lo siguiente:

1) Crear usuario y estructura de carpetas:

# Creo el usuario
adduser --shell=/bin/false user_name

# Creo la carpeta que será su raiz (para hacer chroot sobre ella)
mkdir /home/user_name/ftp_folder

Puesto que en /home/user_name estarán ficheros de configuración y demás, creamos un nivel más (ftp_folder) sobre el que luego enjaularemos al usuario con chroot.

2) Asignar los permisos:

# Asignamos propietario
chown -R root:user_name /home/user_name

# Asignamos permisos
chmod -R 750 /home/user_name

El dueño debe ser siempre root (o el sftp no arrancará), el grupo es el que tenga el usuario al que damos permiso.

3) Generamos las claves de acceso:

# Generamos las claves pública y privada
ssh-keygen -t rsa -f user_name

# Guardamos la clave pública
mkdir /etc/ssh/authorized_keys
cat user_name.pub > /etc/ssh/authorized_keys/user_name

# Generamos la clave de host por si no existe
ssh-keygen -A

Para que el acceso sea mediante certificado, generamos los pares de claves que el servicio ssh leerá. Tiene que estar fuera de la home del user o no podremos acceder.

4) Configuramos el acceso sftp:

# Editamos el fichero de configuración del servicio ssh
vi /etc/ssh/sshd_config

# Buscamos y comentamos la siguiente línea:
Subsystem sftp /usr/lib/openssh/sftp-server

# Configuramos el tipo de acceso de cada usuario
Subsystem sftp internal-sftp
Match User user_name
 AuthorizedKeysFile /etc/ssh/authorized_keys/%u
 ChrootDirectory /home/%u/ftp_folder
 ForceCommand internal-sftp
 X11Forwarding no
 AllowTCPForwarding no

Y sólo nos falta reiniciar el servicio ssh para que cargue los datos de configuración que hemos seteado:

service ssh restart

Y poco más, ya tenemos el sFTP funcionando y listo para que el user_name se conecte. No debes olvidar configurar correctamente el grupo de seguridad (firewall) para indicar quién puede o no conectarse a esta máquina.

Sencillo, no? Quien no tiene un sFTP es porque no quiere :D.

Saludos!!

Cristóbal Espinosa