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 con
sudo
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:
OutputStatus: 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.vsftpd
logra 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″>
Outputtotal 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
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:
. . .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.
. . .chroot_local_user=YES. . .
agregaremos un user_sub_token
para 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.
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:
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:
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
Outputsammy
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:
# 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:
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
:
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:
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:
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:
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:
. . ./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:
OutputThis 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.