Configurar FTP, FTPS y SFTP en Ubuntu

El protocolo de transferencia de archivos (más conocido como FTP) se utiliza de forma habitual para enviar ficheros en una infraestructura cliente-servidor. Un equipo recibe este cometido y sirve directorios habilitados a tal efecto, para que el resto de clientes de la red pueda descargar e información o incluso añadir sus propios elementos al directorio, si se le permite.

El protocolo ftp y sftp (su variante más segura) es importante y se utiliza mucho en empresas, también como parte de procesos de automatización (por ejemplo, para Gestión de la Configuración).

Por ejemplo, durante el parcheo masivo de equipos o durante pases a producción para aplicativos y servicios web estos son comúnmente copiados desde servidores ftp.

Vamos a ver como funciona el servicio de ftp en Ubuntu/Debian

Configuración de FTP en Ubuntu/Debian

Pasos previos

Lo primero que deberíamos hacer es asignar una IP estática al servidor (salvo que tengamos un período de concesión dhcp muy elevado) aunque no es obligatorio y no me detendré ahí para no alargar más el artículo.

Actualizaremos el repositorio:

sudo apt update

Descargaremos desde internet el paquete vsftpd con sus dependencias:

sudo apt isntall vsftpd

Por seguridad, haremos una copia de seguridad del archivo de configuración:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

Configuración

Ahora comenzaremos con una configuración estándar del FTP.

Editaremos nuestro archivo /etc/vsftpd.conf quitando el comentario (#) en estas líneas:

write_enable=YES
local_umask=022
chroot_local_user=YES

La opción “write_enable” permite a los clientes salvar información en el ftp, usadlo a vuestra propia discreción. Lo normal en sistemas colaborativos es que interese habilitarla.

Ahora añadiremos al final del mismo archivo las siguientes líneas:

allow_writeable_chroot=YES
pasv_min_port=40000
pasv_max_port=40100

La primera de las 3 líneas permite mantener a los usuarios sin permiso de chroot aislados. Las otras dos son para configurar los puertos por los que se comunicará nuestro servidor con los clientes en modo pasivo. Más información sobre FTP en modo activo/pasivo.

Ahora reiniciaremos el servicio vsftpd:

sudo systemctl restart vsftpd.service
service vsftpd status

Servicio de vsftpd

Debería estar en ejecución, en caso de que no sea así tendremos que volver a revisar el archivo re configuración para detectar el fallo y reiniciar el servicio de nuevo tras aplicar los cambios. Se habrá creado un usuario “ftp” por defecto y un directorio en /srv/ftp.

Ahora crearemos un usuario para poner a prueba la conexión: Usaremos la siguiente Shell para limitar su acceso:

sudo useradd ftpuser -m -s /usr/sbin/nologin
sudo passwd ftpuser

Añadiremos /usr/sbin/nologin al archivo /etc/shells para habilitar el acceso a usuarios que utilizan el Shell nologin:

echo "/usr/sbin/nologin" | sudo tee -a /etc/shells

Modificar shells Ubuntu

Ahora probaremos nuestra conexión al FTP. Bastará con hacer una prueba contra el “localhost” (nuestro equipo) para asegurarnos de que el servicio funciona y no es filtrado por ningún firewall.

Conectar a ftp en Ubuntu

Configurar FTPS en Ubuntu/Debian

Las conexiones FTP pueden securizarse mediante el uso de un certificado SSL, así que vamos a ver ahora como crear un certificado SSL auto-firmado mediante openssl.

Crearemos un nuevo certificado SSL con clave de 2048 bits de longitud y una validez de 365 días para el certificado RSA.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/ftps_vsftpd.pem -out /etc/ssl/private/ftps_vsftpd.pem

Podemos dejar todas las siguientes opciones en blanco y confirmar cada una pulsando intro. La clave RSA recién generada tendrá el siguiente aspecto:

Certificado SSL

Ahora reiniciaremos de nuevo el servicio vsftpd:

sudo systemctl restart vsftpd

Probaremos ahora nuestra conexión utilizando la opción explícita de TLS/SSL. Los principales clientes de FTP/SFTP nos permiten escoger este valor.

conexion a ftps

Deberíamos ahora recibir un aviso indicando que no se puede garantizar la veracidad de la identidad del servidor al que nos conectamos, algo lógico pues se trata de un certificado auto-firmado.

Certificado SSL vsftpd

Aceptaremos para importar el certificado a nuestro almacén y ya no veremos este aviso en adelante.

NOTA: si no conseguimos conectar posiblemente se deba a que no hemos actualizado la siguiente línea de nuestro archivo de configuración en /etc/vsftpd.conf:

  1. sudo nano /etc/vsftpd.conf
  2. pulsamos la tecla F6 para buscar y escribimos ssl
  3. Quitamos el comentario de la línea “ssl_enable=YES”
  4. Guardamos con CTRL+X e INTRO.
  5. Reiniciaremos nuevamente el servicio de vsftpd

Configurar SFTP en Ubuntu/Debian

Vamos a ver como configurar la última de las opciones para ftp en Ubuntu en este tercer paso. El protocolo SFTP funciona de forma un poco diferente a lo anterior, dado que usa el puerto ssh para transferir los datos.

En caso de no haberlo hecho previamente, instalaremos el paquete openssh para servidores:

sudo apt-get install openssh-server

Ahora añadimos un grupo para usuarios del sftp:

sudo addgroup accesoftp

Comentaremos, dentro de /etc/ssh/sshd_config, la siguiente línea:

Subsystem sftp /usr/lib/openssh/sftp-server

Añadiremos además lo siguiente al final del archivo:

Subsystem sftp internal-sftp
Match group ftpaccess
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Y reiniciaremos el servicio SSH:

sudo service ssh restart

Haced lo anterior mediante la consola para no perder el acceso al equipo.

También crearemos un usuario con Shell de tipo nologin y asociado al grupo accesosftp que hemos creado:

sudo useradd usuario_sftp -m -s /usr/sbin/nologin -G accesoftp
sudo passwd usuario_sftp

Ahora haremos algo importante para la seguridad y es configurar el chroot para los usuarios en sus directorios “home” personales. De esta manera quedarán restringidos a su propio directorio.

sudo chown root:root /home/usuario_sftp

Finalmente, crearemos un directorio llamando “subido”, “upload” o similar, que es donde irán a parar los directorios subidos por el usuario al servidor sftp:

sudo mkdir /home/usuario_sftp/subido
sudo chown usuario_sftp:accesoftp /home/usuario_sftp/subido

Y comprobaremos que los accesos con nuestro nuevo usuario y protocolo sftp son correctos.

El pase de diapositivas requiere JavaScript.

Deja tu comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s