Introducción

FTP, abreviatura de File Transfer Protocol, es un protocolo de red que una vez fue ampliamente utilizado para mover archivos entre un cliente y un servidor. Desde entonces, ha sido reemplazado por formas más rápidas, seguras y convenientes de entregar archivos. Muchos usuarios casuales de Internet esperan descargar directamente desde su navegador web con https, y los usuarios de línea de comandos son más propensos a usar protocolos seguros como el scp o sFTP.,

FTP todavía se utiliza para soportar aplicaciones heredadas y flujos de trabajo con necesidades muy específicas. Si tiene la opción de qué protocolo usar, considere explorar las opciones más modernas. Sin embargo, cuando necesita FTP, vsftpd es una excelente opción. Optimizado para la seguridad, el rendimiento y la estabilidad, vsftpd ofrece una fuerte protección contra muchos problemas de seguridad que se encuentran en otros servidores FTP y es el valor predeterminado para muchas distribuciones de Linux.,

en este tutorial, le mostraremos cómo configurar vsftpd para permitir que un usuario cargue archivos a su directorio personal usando FTP con credenciales de inicio de sesión protegidas por SSL/TLS.

prerequisitos

para seguir este tutorial necesitarás:

  • Un servidor Ubuntu 16.04 con un usuario no root consudo privilegios: puedes aprender más sobre cómo configurar un usuario con estos privilegios en nuestra Guía de configuración inicial del servidor con Ubuntu 16.04.

Una vez que tenga un servidor Ubuntu en su lugar, estará listo para comenzar.,

Paso 1 — Instalación de vsftpd

comenzaremos actualizando nuestra lista de paquetes e instalando el demonio vsftpd:

  • sudo apt-get update
  • sudo apt-get install vsftpd

Cuando la instalación esté completa, copiaremos el archivo de configuración para que podamos comenzar con una configuración en blanco, guardando el original como copia de seguridad.

  • sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

con una copia de seguridad de la configuración en su lugar, estamos listos para configurar el firewall.

Paso 2 — abrir el Cortafuegos

comprobaremos el estado del cortafuegos para ver si está habilitado., Si es así, nos aseguraremos de que el tráfico FTP esté permitido para que no se encuentre con reglas de firewall que lo bloqueen cuando llegue el momento de probar.

  • sudo ufw status

en este caso, solo se permite SSH a través de:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)

es posible que tenga otras reglas en su lugar o que no tenga reglas de firewall. Dado que solo se permite el tráfico ssh en este caso, necesitaremos agregar reglas para el tráfico FTP.,

tendremos que abrir los puertos 20 y 21 para FTP, el puerto 990 para más adelante cuando habilitemos TLS, y los puertos 40000-50000 para el rango de puertos pasivos que planeamos establecer en el archivo de configuración:

  • sudo ufw allow 20/tcp
  • sudo ufw allow 21/tcp
  • sudo ufw allow 990/tcp
  • sudo ufw allow 40000:50000/tcp
  • sudo ufw status

ahora nuestras reglas de firewall se ven como:

Con vsftpd instalado y los puertos necesarios abiertos, estamos listos para proceder al siguiente paso.

Paso 3 — Preparación del Directorio de usuarios

para este tutorial, vamos a crear un usuario, pero es posible que ya tenga un usuario que necesite acceso FTP., Nos encargaremos de preservar el acceso de un usuario existente a sus datos en las instrucciones que siguen. Aún así, le recomendamos que comience con un nuevo usuario hasta que haya configurado y probado su configuración.

primero, agregaremos un usuario de prueba:

  • sudo adduser sammy

asigne una contraseña cuando se le solicite y no dude en presionar» ENTER » a través de las otras solicitudes.

FTP es generalmente más seguro cuando los usuarios están restringidos a un directorio específico.vsftpdlogra esto con chroot jails., Cuando chroot está habilitado para usuarios locales, están restringidos a su directorio personal de forma predeterminada. Sin embargo, debido a la forma en que vsftpd asegura el directorio, no debe ser escribible por el usuario. Esto está bien para un usuario nuevo que solo debería conectarse a través de FTP, pero un usuario existente puede necesitar escribir en su carpeta de inicio si también tiene acceso a shell.,

en este ejemplo, en lugar de eliminar los privilegios de escritura del directorio home, crearemos un directorio ftp para servir como el directorio chroot y un directorio files para contener los archivos reales.,33″>

Output
total 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..

a continuación, crearemos el directorio donde se pueden cargar los archivos y asignaremos la propiedad al usuario:

  • sudo mkdir /home/sammy/ftp/files
  • sudo chown sammy:sammy /home/sammy/ftp/files

una comprobación de permisos en el directorio files debe devolver lo siguiente:

  • sudo ls -la /home/sammy/ftp

finalmente, agregaremos un archivo test.txt para usar cuando probemos más adelante:

  • echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt

ahora que hemos asegurado el directorio ftp y hemos permitido al usuario el acceso al directorio files directorio, vamos a dirigir nuestra atención a la configuración.,

Paso 4 — Configuración del acceso FTP

estamos planeando permitir que un solo usuario con una cuenta de shell local se conecte con FTP. Las dos configuraciones clave para esto ya están configuradas en vsftpd.conf. Comience abriendo el archivo de configuración para verificar que los ajustes de su configuración coincidan con los siguientes:

  • sudo nano /etc/vsftpd.conf
/etc/vsftpd.conf

a continuación tendremos que cambiar algunos valores en el archivo. Para permitir al usuario subir archivos, descomentaremos la configuración write_enable para que tengamos:

/ etc / vsftpd.,conf
. . .write_enable=YES. . .

también descomentaremos el chroot para evitar que el usuario conectado a FTP acceda a cualquier archivo o comando fuera del árbol de directorios.

/ etc / vsftpd.conf
. . .chroot_local_user=YES. . .

agregaremos un user_sub_tokenpara insertar el nombre de usuario en nuestra ruta local_root directory para que nuestra configuración funcione para este usuario y cualquier usuario futuro que pueda agregarse.

/ etc / vsftpd.,conf
user_sub_token=$USERlocal_root=/home/$USER/ftp

limitaremos el rango de puertos que se pueden usar para FTP pasivo para asegurarnos de que haya suficientes conexiones disponibles:

/etc/vsftpd.conf
pasv_min_port=40000pasv_max_port=50000

Nota: Hemos pre-abierto los puertos que configuramos aquí para el rango de puertos pasivos. Si cambia los valores, asegúrese de actualizar la configuración del firewall.

dado que solo estamos planeando permitir el acceso FTP caso por caso, configuraremos la configuración para que el acceso se le dé a un usuario solo cuando se agregue explícitamente a una lista en lugar de por defecto:

/etc/vsftpd.,conf
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_deny alterna la lógica. Cuando se establece en «sí», a los usuarios de la lista se les niega el acceso FTP. Cuando se establece en «NO», solo se permite el acceso a los usuarios de la lista. Cuando haya terminado de hacer el cambio, guarde y salga del archivo.

finalmente, crearemos y agregaremos nuestro usuario al archivo., Usaremos la bandera -a para anexar al archivo:

  • echo "sammy" | sudo tee -a /etc/vsftpd.userlist

verifique que se haya agregado como esperaba:

cat /etc/vsftpd.userlist
Output
sammy

reinicie el daemon para cargar los cambios de configuración:

  • sudo systemctl restart vsftpd

ahora estamos listos para probar.

Paso 5-Prueba de acceso FTP

Hemos configurado el servidor para permitir que solo el usuario sammy se conecte a través de FTP. Asegurémonos de que ese es el caso.

Los usuarios anónimos no deben conectarse: deshabilitamos el acceso anónimo., Aquí vamos a probar que tratando de conectar de forma anónima. Si lo hemos hecho correctamente, se debe denegar el permiso a los usuarios anónimos:

  • ftp -p 203.0.113.0

cerrar la conexión:

  • bye

Los usuarios que no sean sammy no deben conectarse: a continuación, intentaremos conectarse como nuestro sudo usuario. A ellos también se les debe negar el acceso, y esto debe suceder antes de que se les permita ingresar su contraseña.,y escribir archivos: aquí, nos aseguraremos de que nuestro usuario designado canconnect:

  • ftp -p 203.0.113.0

cambiaremos al directorio files, luego usaremos el comando get para transferir el archivo de prueba que creamos anteriormente a nuestra máquina local:

  • cd files
  • get test.txt

daremos la vuelta e intentaremos cargar el archivo con un nuevo nombre para probar los permisos de escritura:

  • put test.txt upload.txt

cerrar la conexión:

  • bye

ahora que hemos probado nuestra configuración, tomaremos medidas para proteger aún más nuestro servidor.,

Paso 6-asegurar transacciones

dado que FTP no cifra ningún dato en tránsito, incluidas las credenciales de usuario, habilitaremos TTL / SSL para proporcionar ese cifrado. El primer paso es crear los certificados SSL para su uso con vsftpd.

usaremos openssl para crear un nuevo certificado y usaremos la bandera -days para que sea válido por un año. En el mismo comando, agregaremos una clave RSA privada de 2048 bits., A continuación, estableciendo tanto el -keyout y -out flags para el mismo valor de la clave privada y el certificado se encuentra en el mismo archivo.

haremos esto con el siguiente comando:

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

se le pedirá que proporcione información de dirección para su certificado., Sustituya su propia información por las siguientes preguntas:

para obtener información más detallada sobre los indicadores de certificado, consulte OpenSSL Essentials: trabajo con certificados SSL, claves privadas y CSR

una vez que haya creado los certificados, abra el archivo de configuración vsftpd nuevamente:

  • sudo nano /etc/vsftpd.conf

hacia la parte inferior del archivo, debe Con rsa_. Coméntalos para que se vean como:

/ etc / vsftpd.,conf
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

debajo de ellos, agregue las siguientes líneas que apuntan al certificado y la clave privada que acabamos de crear:

/etc/vsftpd.conf
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem

después de eso, forzaremos el uso de SSL, lo que evitará que los clientes que no pueden lidiar con TLS se conecten. Esto es necesario para garantizar que todo el tráfico esté cifrado, pero puede obligar a su usuario FTP a cambiar de cliente. Cambiar ssl_enable a YES:

/etc/vsftpd.,conf
ssl_enable=YES

después de eso, agregue las siguientes líneas para denegar explícitamente las conexiones anónimas a través de SSL y para Requerir SSL tanto para la transferencia de datos como para los inicios de sesión:

/etc/vsftpd.conf
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES

después de esto configuraremos el servidor para usar TLS, el sucesor preferido de SSL agregando las siguientes líneas:

/etc/vsftpd.conf
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO

finalmente, agregaremos dos opciones más. En primer lugar, no requeriremos la reutilización de SSL porque puede romper muchos clientes FTP., Requeriremos conjuntos de cifrado de cifrado» alto», que actualmente significa longitudes de clave iguales o superiores a 128 bits:

/etc/vsftpd.conf
require_ssl_reuse=NOssl_ciphers=HIGH

Cuando haya terminado, guarde y cierre el archivo.

Ahora, necesitamos reiniciar el servidor para que los cambios surtan efecto:

  • sudo systemctl restart vsftpd

en este punto, ya no podremos conectarnos con un cliente de línea de comandos inseguro. Si lo intentáramos, veríamos algo como:

a continuación, verificaremos que podemos conectarnos usando un cliente que soporte TLS.,

Paso 7 — Probar TLS con FileZilla

La mayoría de los clientes FTP modernos se pueden configurar para usar cifrado TLS. Demostraremos cómo conectarse usando FileZilla debido a su soporte multiplataforma. Consulte la documentación para otros clientes.

Cuando abra FileZilla por primera vez, encuentre el icono del administrador del sitio justo debajo del archivo de word, el icono más a la izquierda en la fila superior. Haga clic en él:

se abrirá Una nueva ventana., Haga clic en el botón «nuevo sitio» en la esquina inferior derecha:


debajo de» mis sitios «aparecerá un nuevo icono con las palabras» nuevo sitio». Puede darle un nombre ahora o volver más tarde y usar el botón Cambiar nombre.

debe rellenar el campo «Host» con el nombre o la dirección IP. En el menú desplegable» cifrado», seleccione»requerir FTP explícito sobre TLS».

Para «Tipo de inicio de sesión», seleccione»Solicitar contraseña». Rellene el usuario FTP que creó en el campo «Usuario»:


Haga clic en» Conectar » en la parte inferior de la interfaz., Se le pedirá la contraseña del usuario:


haga Clic en «ACEPTAR» para conectar. Ahora debería estar conectado con su servidor con cifrado TLS / SSL.


Cuando haya aceptado el certificado, haga doble clic en la carpeta files y arrastre upload.txt a la izquierda para confirmar que puedes descargar archivos.

Cuando hayas hecho eso, haz clic derecho en la copia local, cámbiala a upload-tls.txt ‘ y arrástrelo al servidor para confirmar que puede cargar archivos.,


ahora ha confirmado que puede transferir archivos de forma segura y exitosa con SSL/TLS habilitado.

Paso 8 — deshabilitar el acceso de Shell (opcional)

si no puede usar TLS debido a los requisitos del cliente, puede obtener algo de seguridad deshabilitando la capacidad del usuario FTP para iniciar sesión de cualquier otra manera. Una forma relativamente sencilla de evitarlo es creando un shell personalizado. Esto no proporcionará ningún cifrado, pero limitará el acceso de una cuenta comprometida a archivos accesibles por FTP.,

primero, abra un archivo llamado ftponly en el directorio bin:

  • sudo nano /bin/ftponly

agregaremos un mensaje diciéndole al usuario por qué no puede iniciar sesión.,/p>

#!/bin/shecho "This account is limited to FTP access only."

cambie los permisos para hacer el archivo ejecutable:

  • sudo chmod a+x /bin/ftponly

abra la lista de shells válidos:

  • sudo nano /etc/shells

en la parte inferior, agregue:

/etc/shells
. . ./bin/ftponly

actualice el shell del usuario con el siguiente comando:

  • sudo usermod sammy -s /bin/ftponly

ahora intente iniciar sesión como Sammy:

debería ver algo como:

Output
This account is limited to FTP access only.Connection to 203.0.113.0 closed.

esto confirma que el usuario ya no puede ssh al servidor y está limitado solo al acceso FTP.,

conclusión

en este tutorial cubrimos la configuración de FTP para usuarios con una cuenta local. Si necesita usar una fuente de autenticación externa, es posible que desee buscar el soporte de vsftpd para usuarios virtuales. Esto ofrece un rico conjunto de opciones a través del uso de PAM, los módulos de autenticación conectables, y es una buena opción si administra usuarios en otro sistema como LDAP o Kerberos.

Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *