Skip to content

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 ftpaccess

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.

Categories

Linux, Tutoriales

Tags

, , ,

deweloper View All

Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.

13 thoughts on “Configurar FTP, FTPS y SFTP en Ubuntu Leave a comment

  1. Tanto WinSCP como Filezilla en la prueba mas básica de conectarse al FTP me dan error al listar el directorio.
    Luego al probar la conexión ya con SSL, me da el siguiente error:
    “El servidor envió una respuesta pasiva con una dirección no enrutable. Usando en su lugar la dirección del servidor.”
    Es decir, conecta pero algo pasa a nivel del directorio. Alguna idea de que puede ser? Podrá ser que estoy queriendo listar un directorio linux con un cliente en windows?

  2. Hola a todos

    En el paso que dice editar el archivo «/etc/ssh/sshd_config» indica que debe agregar al final esta linea:
    «Match group ftpaccess»

    pero en el ejemplo el grupo se llama: «accesoftp» por lo consiguiente, la linea correcta sería:
    «Match group accesoftp» para los que quieran seguir el ejemplo al pie de la letra.

    • Corregido Douglas, gracias!
      A veces esto de pensar dualmente en inglés y castellano juega malas pasadas. Espero que te haya servido el post.
      Saludos.

  3. Gracias Alejandro por este artículo tan útil e interesante.
    Hay un detalle que pienso no es correcto, en la generación del certificado:

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

    si no me equivoco la forma correcta es:

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

    Gracias y saludos.

  4. Muchas gracias logre levantar el sFTP, ahorita estoy batallando para verlo desde fue de un red local. tendrá algo de eso ?

    • Hola Rubén, no tengo nada específico, pero lo que necesitas es hacer port forwarding o «reenvío de puertos» de la dirección del equipo que sirve el SFTP. Busca para el modelo de tu router. En cualquier caso, debes tener en cuenta que no se debería exponer puertos al exterior desde equipos finales si no están debidamente bastionados, es decir, quita servicios innecesarios en los mismos, instala buen software de seguridad, usa credenciales fuertes y 2FA en los servicios que utilices en ellos (por ejemplo, un WordPress).

      Mi última recomendación es (sobre todo si el servicio que quieres reenviar es con fines empresariales o de negocio) valorar si te conviene adquirir algún appliance que pueda proteger los activos expuestos por tí. En anteriores ocasiones en hablado de «Firewalla» en mi web, así que te aconsejo hacer una búsqueda en la página e informarte. Si lo necesitas, tengo un código descuento de 8% que podrías aplicar. Saludos!

Deja un comentario