Cómo configurar vsftpd para un usuario's Directory en Ubuntu 18.04

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 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, 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 18.04 y un usuario no root con privilegios sudo: 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 18.04.,

Paso 1 — Instalación de vsftpd

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

  • sudo apt update
  • sudo apt install vsftpd

cuando se complete la instalación, copiemos 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

vamos a comprobar el estado del cortafuegos para ver si está habilitado., Si lo es, nos aseguraremos de que el tráfico FTP esté permitido para que las reglas del firewall no bloqueen nuestras pruebas.

Compruebe el estado del firewall:

  • 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.,

abramos ports 20 y 21 para FTP, port 990 para cuando habilitamos TLS, y ports 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

nuestras reglas de cortafuegos ahora deberían verse así:

Con vsftpd instalado y los puertos necesarios abiertos, vamos a pasar a la creación de un usuario FTP dedicado.,

Paso 3 — Preparación del Directorio de usuarios

crearemos un usuario FTP dedicado, 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, agregue un usuario de prueba:

  • sudo adduser sammy

asigne una contraseña cuando se le solicite. Siéntase libre de presionar ENTER a través de las otras indicaciones.,

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 de shell.,

en este ejemplo, en lugar de eliminar los privilegios de escritura del directorio home, vamos a crear un directorio ftp para servir como el directorio chroot y un directorio files para contener los archivos reales.,misiones:

  • sudo ls -la /home/sammy/ftp
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, vamos a crear el directorio para la carga de archivos y asignar la propiedad al usuario:

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

una verificación de permisos en el ftp Directory debe devolver lo siguiente:

  • sudo ls -la /home/sammy/ftp

finalmente, agreguemos un archivo test.txt para usar cuando probemos:

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

ahora que hemos asegurado el ftp directorio y permitió al usuario el acceso al files directorio, vamos a modificar nuestra 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, vamos a habilitar al usuario para cargar archivos descomentando la configuración write_enable:

/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. . .

también agreguemos 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 adicional. Agregue estas configuraciones en cualquier lugar del archivo:

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

también limitemos el rango de puertos que se pueden usar para FTP pasivo para asegurarse de que haya suficientes conexiones disponibles:

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

nota: en el paso 2, abrimos los puertos que configuramos aquí para el rango de puertos pasivos. Si cambia los valores, asegúrese de actualizar la configuración del firewall.

para permitir el acceso FTP caso por caso, vamos a establecer la configuración para que los usuarios tengan acceso solo cuando se agregan explícitamente a una lista, en lugar de por defecto:

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

userlist_denyalterna la lógica: cuando se establece en YES, 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 los cambios, guarde el archivo y salga del editor.

finalmente, agreguemos nuestro usuario a /etc/vsftpd.userlist., Use la bandera -a para agregar al archivo:

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

compruebe que se agregó como esperaba:

  • cat /etc/vsftpd.userlist
Output
sammy

reinicie el demonio para cargue los cambios de configuración:

  • sudo systemctl restart vsftpd

con la configuración en su lugar, pasemos a probar el acceso FTP.

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 esto funcione como se espera.,

Los usuarios anónimos no deben conectarse: hemos deshabilitado el acceso anónimo. Probemos eso tratando de conectarnos anónimamente. Si nuestra configuración está configurada correctamente, a los usuarios anónimos se les debe negar el permiso. Abra otra ventana de terminal y ejecute el siguiente comando. Asegúrese de reemplazar 203.0.113.0 con la dirección IP pública de su servidor:

  • ftp -p 203.0.113.0

cierre la conexión:

  • bye

Los usuarios que no sean sammy no deben conectarse: a continuación, intentemos conectarnos como nuestro usuario sudo.,> debe ser capaz de conectar, leer y escribir archivos: asegurémonos de que nuestro usuario designado pueda conectarse:

  • ftp -p 203.0.113.0

cambiemos al directorio files y utilicemos el comando get para transferir el archivo de prueba que creamos anteriormente a nuestra máquina local:

  • cd files
  • get test.txt

a continuación, vamos a 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, vamos a tomar 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 TLS / SSL para proporcionar ese cifrado. El primer paso es crear los certificados SSL para usar con vsftpd.

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

  • 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 la dirección de su certificado., Sustituya su propia información por los valores resaltados a continuación:

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, verá dos líneas que comience con rsa_. Coméntalos para que se vean así:

/ 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, configure 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. . .

la sección del archivo terminado debería tener este aspecto:

/etc/vsftpd.conf

Cuando haya terminado, guarde y cierre el archivo.

reinicie 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, vamos a verificar 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 conectar con 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 encima de la palabra Host, 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.

rellene 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 su usuario FTP 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 conectarse. Ahora debería estar conectado con su servidor con cifrado TLS / SSL.,cuando haya aceptado el certificado, haga doble clic en la carpetafilesy arrastreupload.txta la izquierda para confirmar que puede descargar archivos:

Cuando haya hecho eso, haga clic con el botón derecho en la copia local, cámbiela aupload-tls.txty arrástrela al servidor para confirmar que puede cargar archivos:

ahora ha confirmado que puede transferir archivos de forma segura y archivos 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

agregue un mensaje que le diga al usuario por qué no puede iniciar sesión:

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

guarde el archivo y salga de su editor.,Cambie los permisos para hacer que el archivo sea 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 en su servidor 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 utilizar una fuente de autenticación externa, es posible que desee buscar en vsftpd ‘ S Soporte de 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.

Deja una respuesta

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